/// <summary> /// Returns the content of a certain catalogue page as string. /// </summary> /// <param name="pageName">The name of the catalogue page to retrieve the content of.</param> /// <param name="userRank">The rank of the user to handout the page content to. If this rank is lower than the required minimum rank to access this page, the 'access denied' cast is returned.</param> /// <returns></returns> public static string getPage(string pageName, byte userRank) { try { cataloguePage objPage = ((cataloguePage)cataloguePages[pageName]); if (userRank < objPage.minRank) { return("holo.cast.catalogue.access_denied"); } return(objPage.pageData); } catch { return("cast_catalogue.access_denied"); } }
/// <summary> /// Caches a specified catalogue page, plus the items on this page. /// </summary> /// <param name="pageID">The ID of the page to cache. If -1 is specified, all the items that aren't on a page are cached.</param> private static void cachePage(int pageID) { DataRow dRow; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dRow = dbClient.getRow("SELECT indexname,minrank,displayname,style_layout,img_header,img_side,label_description,label_misc,label_moredetails FROM catalogue_pages WHERE indexid = '" + pageID + "' LIMIT 1"); } if (pageID > 0 && dRow.Table.Rows.Count == 0) { return; } object[] pageObject = dRow.ItemArray; string[] pageData = new string[pageObject.Length]; for (int a = 0; a < pageData.Length; a++) { pageData[a] = pageObject[a].ToString(); } string pageIndexName = ""; StringBuilder pageBuilder = new System.Text.StringBuilder(); cataloguePage objPage = new cataloguePage(); if (pageID > 0) { pageIndexName = pageData[0]; objPage.displayName = pageData[2]; objPage.minRank = Convert.ToByte(bool.Parse(pageData[1])); // Add the required fields for catalogue page (indexname, showname, page layout style (boxes etc)) pageBuilder.Append("i:" + pageIndexName + Convert.ToChar(13) + "n:" + pageData[2] + Convert.ToChar(13) + "l:" + pageData[3] + Convert.ToChar(13)); if (pageData[4] != "") // If there's a headline image set, add it { pageBuilder.Append("g:" + pageData[4] + Convert.ToChar(13)); } if (pageData[5] != "") // If there is/are side image(s) set, add it/them { pageBuilder.Append("e:" + pageData[5] + Convert.ToChar(13)); } if (pageData[6] != "") // If there's a description set, add it { pageBuilder.Append("h:" + pageData[6] + Convert.ToChar(13)); } if (pageData[8] != "") // If there's a 'Click here for more details' label set, add it { pageBuilder.Append("w:" + pageData[8] + Convert.ToChar(13)); } if (pageData[7] != "") // If the misc additions field is not blank { string[] miscDetail = pageData[7].Split(Convert.ToChar(13)); for (int m = 0; m < miscDetail.Length; m++) { pageBuilder.Append(miscDetail[m] + Convert.ToChar(13)); } } } DataTable dTable; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dTable = dbClient.getTable("SELECT tid, typeid, length, width, catalogue_cost, door, tradeable, recycleable, catalogue_name, catalogue_description, name_cct, colour, top, drink_ids, next_to_required, rights_required FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC"); } int count = dTable.Rows.Count; int[] itemTemplateIDs = new int[count]; int[] itemTypeIDs = new int[count]; int[] itemLengths = new int[count]; int[] itemWidths = new int[count]; int[] itemCosts = new int[count]; int[] itemDoorFlags = new int[count]; int[] itemTradeableFlags = new int[count]; int[] itemRecycleableFlags = new int[count]; string[] itemNames = new string[count]; string[] itemDescs = new string[count]; string[] itemCCTs = new string[count]; string[] itemColours = new string[count]; string[] itemTopHs = new string[count]; string[] itemDrinks = new string[count]; int[] nexttoRequired = new int[count]; int[] rightsRequired = new int[count]; int i = 0; //tid, //typeid, //length, //width, //catalogue_cost, //door, //tradeable, //recycleable, //catalogue_name, //catalogue_description, //name_cct, //colour, //top //drinkids foreach (DataRow dbRow in dTable.Rows) { itemTemplateIDs[i] = Convert.ToInt32(dbRow["tid"]); itemTypeIDs[i] = Convert.ToInt32(dbRow["typeid"]); itemLengths[i] = Convert.ToInt32(dbRow["length"]); itemWidths[i] = Convert.ToInt32(dbRow["width"]); itemCosts[i] = Convert.ToInt32(dbRow["catalogue_cost"]); itemDoorFlags[i] = Convert.ToInt32(dbRow["door"]); itemTradeableFlags[i] = Convert.ToInt32(dbRow["tradeable"]); itemRecycleableFlags[i] = Convert.ToInt32(dbRow["recycleable"]); itemNames[i] = Convert.ToString(dbRow["catalogue_name"]); itemDescs[i] = Convert.ToString(dbRow["catalogue_description"]); itemCCTs[i] = Convert.ToString(dbRow["name_cct"]); itemColours[i] = Convert.ToString(dbRow["colour"]); itemTopHs[i] = Convert.ToString(dbRow["top"]); itemDrinks[i] = Convert.ToString(dbRow["drink_ids"]); nexttoRequired[i] = Convert.ToInt32(dbRow["next_to_required"]); rightsRequired[i] = Convert.ToInt32(dbRow["rights_required"]); i++; } for (i = 0; i < itemTemplateIDs.Length; i++) { if (stringManager.getStringPart(itemCCTs[i], 0, 4) != "deal") { itemCache.Add(itemTemplateIDs[i], new itemTemplate(itemCCTs[i], Convert.ToByte(itemTypeIDs[i]), itemColours[i], itemLengths[i], itemWidths[i], double.Parse(itemTopHs[i]), (itemDoorFlags[i] == 1), (itemTradeableFlags[i] == 1), (itemRecycleableFlags[i] == 1), nexttoRequired[i], rightsRequired[i], itemDrinks[i])); if (pageID == -1) { continue; } pageBuilder.Append("p:" + itemNames[i] + Convert.ToChar(9) + itemDescs[i] + Convert.ToChar(9) + itemCosts[i] + Convert.ToChar(9) + Convert.ToChar(9)); if (itemTypeIDs[i] == 0) { pageBuilder.Append("i"); } else { pageBuilder.Append("s"); } pageBuilder.Append(Convert.ToChar(9) + itemCCTs[i] + Convert.ToChar(9)); if (itemTypeIDs[i] == 0) { pageBuilder.Append(Convert.ToChar(9)); } else { pageBuilder.Append("0" + Convert.ToChar(9)); } if (itemTypeIDs[i] == 0) { pageBuilder.Append(Convert.ToChar(9)); } else { pageBuilder.Append(itemLengths[i] + "," + itemWidths[i] + Convert.ToChar(9)); } pageBuilder.Append(itemCCTs[i] + Convert.ToChar(9)); if (itemTypeIDs[i] > 0) { pageBuilder.Append(itemColours[i]); } pageBuilder.Append(Convert.ToChar(13)); } else { int dealID = int.Parse(itemCCTs[i].Substring(4)); using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dTable = dbClient.getTable("SELECT tid, amount FROM catalogue_deals WHERE id = '" + dealID + "'"); } count = dTable.Rows.Count; int[] dealItemIDs = new int[count]; int[] dealItemAmounts = new int[count]; int n = 0; foreach (DataRow dbRow in dTable.Rows) { dealItemIDs[n] = Convert.ToInt32(dbRow["tid"]); dealItemAmounts[n] = Convert.ToInt32(dbRow["amount"]); n++; } pageBuilder.Append("p:" + itemNames[i] + Convert.ToChar(9) + itemDescs[i] + Convert.ToChar(9) + itemCosts[i] + Convert.ToChar(9) + Convert.ToChar(9) + "d"); pageBuilder.Append(Convert.ToChar(9), 4); pageBuilder.Append("deal" + dealID + Convert.ToChar(9) + Convert.ToChar(9) + dealItemIDs.Length + Convert.ToChar(9)); for (int l = 0; l < dealItemIDs.Length; l++) { using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dRow = dbClient.getRow("SELECT name_cct, colour FROM catalogue_items WHERE tid = '" + dealItemIDs[l] + "' LIMIT 1"); } string itemCCT = Convert.ToString(dRow["name_cct"]); string itemColour = Convert.ToString(dRow["colour"]); pageBuilder.Append(itemCCT + Convert.ToChar(9) + dealItemAmounts[l] + Convert.ToChar(9) + itemColour + Convert.ToChar(9)); } } } if (pageID == -1) { return; } objPage.pageData = pageBuilder.ToString(); cataloguePages.Add(pageIndexName, objPage); }
/// <summary> /// Caches a specified catalogue page, plus the items on this page. /// </summary> /// <param name="pageID">The ID of the page to cache. If -1 is specified, all the items that aren't on a page are cached.</param> private static void cachePage(int pageID) { DataRow dRow; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dRow = dbClient.getRow("SELECT indexname,minrank,displayname,style_layout,img_header,img_side,label_description,label_misc,label_moredetails FROM catalogue_pages WHERE indexid = '" + pageID + "' LIMIT 1"); } if (pageID > 0 && dRow.Table.Rows.Count == 0) { return; } object[] pageObject = dRow.ItemArray; string[] pageData = new string[pageObject.Length]; for (int a = 0; a < pageData.Length; a++) pageData[a] = pageObject[a].ToString(); string pageIndexName = ""; StringBuilder pageBuilder = new System.Text.StringBuilder(); cataloguePage objPage = new cataloguePage(); if (pageID > 0) { pageIndexName = pageData[0]; objPage.displayName = pageData[2]; objPage.minRank = Convert.ToByte(bool.Parse(pageData[1])); // Add the required fields for catalogue page (indexname, showname, page layout style (boxes etc)) pageBuilder.Append("i:" + pageIndexName + Convert.ToChar(13) + "n:" + pageData[2] + Convert.ToChar(13) + "l:" + pageData[3] + Convert.ToChar(13)); if (pageData[4] != "") // If there's a headline image set, add it pageBuilder.Append("g:" + pageData[4] + Convert.ToChar(13)); if (pageData[5] != "") // If there is/are side image(s) set, add it/them pageBuilder.Append("e:" + pageData[5] + Convert.ToChar(13)); if (pageData[6] != "") // If there's a description set, add it pageBuilder.Append("h:" + pageData[6] + Convert.ToChar(13)); if (pageData[8] != "") // If there's a 'Click here for more details' label set, add it pageBuilder.Append("w:" + pageData[8] + Convert.ToChar(13)); if (pageData[7] != "") // If the misc additions field is not blank { string[] miscDetail = pageData[7].Split(Convert.ToChar(13)); for (int m = 0; m < miscDetail.Length; m++) pageBuilder.Append(miscDetail[m] + Convert.ToChar(13)); } } DataTable dTable; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dTable = dbClient.getTable("SELECT tid, typeid, length, width, catalogue_cost, door, tradeable, recycleable, catalogue_name, catalogue_description, name_cct, colour, top FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC"); } int count = dTable.Rows.Count; int[] itemTemplateIDs = new int[count]; int[] itemTypeIDs = new int[count]; int[] itemLengths = new int[count]; int[] itemWidths = new int[count]; int[] itemCosts = new int[count]; int[] itemDoorFlags = new int[count]; int[] itemTradeableFlags = new int[count]; int[] itemRecycleableFlags = new int[count]; string[] itemNames = new string[count]; string[] itemDescs = new string[count]; string[] itemCCTs = new string[count]; string[] itemColours = new string[count]; string[] itemTopHs = new string[count]; int i = 0; //tid, //typeid, //length, //width, //catalogue_cost, //door, //tradeable, //recycleable, //catalogue_name, //catalogue_description, //name_cct, //colour, //top foreach (DataRow dbRow in dTable.Rows) { itemTemplateIDs[i] = Convert.ToInt32(dbRow["tid"]); itemTypeIDs[i] = Convert.ToInt32(dbRow["typeid"]); itemLengths[i] = Convert.ToInt32(dbRow["length"]); itemWidths[i] = Convert.ToInt32(dbRow["width"]); itemCosts[i] = Convert.ToInt32(dbRow["catalogue_cost"]); itemDoorFlags[i] = Convert.ToInt32(dbRow["door"]); itemTradeableFlags[i] = Convert.ToInt32(dbRow["tradeable"]); itemRecycleableFlags[i] = Convert.ToInt32(dbRow["recycleable"]); itemNames[i] = Convert.ToString(dbRow["catalogue_name"]); itemDescs[i] = Convert.ToString(dbRow["catalogue_description"]); itemCCTs[i] = Convert.ToString(dbRow["name_cct"]); itemColours[i] = Convert.ToString(dbRow["colour"]); itemTopHs[i] = Convert.ToString(dbRow["top"]); i++; } for (i = 0; i < itemTemplateIDs.Length; i++) { if(stringManager.getStringPart(itemCCTs[i],0,4) != "deal") { itemCache.Add(itemTemplateIDs[i], new itemTemplate(itemCCTs[i], Convert.ToByte(itemTypeIDs[i]), itemColours[i], itemLengths[i], itemWidths[i], double.Parse(itemTopHs[i]), (itemDoorFlags[i] == 1), (itemTradeableFlags[i] == 1), (itemRecycleableFlags[i] == 1))); if (pageID == -1) continue; pageBuilder.Append("p:" + itemNames[i] + Convert.ToChar(9) + itemDescs[i] + Convert.ToChar(9) + itemCosts[i] + Convert.ToChar(9) + Convert.ToChar(9)); if (itemTypeIDs[i] == 0) pageBuilder.Append("i"); else pageBuilder.Append("s"); pageBuilder.Append(Convert.ToChar(9) + itemCCTs[i] + Convert.ToChar(9)); if (itemTypeIDs[i] == 0) pageBuilder.Append(Convert.ToChar(9)); else pageBuilder.Append("0" + Convert.ToChar(9)); if (itemTypeIDs[i] == 0) pageBuilder.Append(Convert.ToChar(9)); else pageBuilder.Append(itemLengths[i] + "," + itemWidths[i] + Convert.ToChar(9)); pageBuilder.Append(itemCCTs[i] + Convert.ToChar(9)); if (itemTypeIDs[i] > 0) pageBuilder.Append(itemColours[i]); pageBuilder.Append(Convert.ToChar(13)); } else { int dealID = int.Parse(itemCCTs[i].Substring(4)); using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dTable = dbClient.getTable("SELECT tid, amount FROM catalogue_deals WHERE id = '" + dealID + "'"); } count = dTable.Rows.Count; int[] dealItemIDs = new int[count]; int[] dealItemAmounts = new int[count]; int n = 0; foreach(DataRow dbRow in dTable.Rows) { dealItemIDs[n] = Convert.ToInt32(dbRow["tid"]); dealItemAmounts[n] = Convert.ToInt32(dbRow["amount"]); n++; } pageBuilder.Append("p:" + itemNames[i] + Convert.ToChar(9) + itemDescs[i] + Convert.ToChar(9) + itemCosts[i] + Convert.ToChar(9) + Convert.ToChar(9) + "d"); pageBuilder.Append(Convert.ToChar(9), 4); pageBuilder.Append("deal" + dealID + Convert.ToChar(9) + Convert.ToChar(9) + dealItemIDs.Length + Convert.ToChar(9)); for (int l = 0; l < dealItemIDs.Length; l++) { using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dRow = dbClient.getRow("SELECT name_cct, colour FROM catalogue_items WHERE tid = '" + dealItemIDs[l] + "' LIMIT 1"); } string itemCCT = Convert.ToString(dRow["name_cct"]); string itemColour = Convert.ToString(dRow["colour"]); pageBuilder.Append(itemCCT + Convert.ToChar(9) + dealItemAmounts[l] + Convert.ToChar(9) + itemColour + Convert.ToChar(9)); } } } if (pageID == -1) return; objPage.pageData = pageBuilder.ToString(); cataloguePages.Add(pageIndexName, objPage); }
/// <summary> /// Caches a specified catalogue page, plus the items on this page. /// </summary> /// <param name="pageID">The ID of the page to cache. If -1 is specified, all the items that aren't on a page are cached.</param> private static void cachePage(int pageID) { string[] pageData = DB.runReadRow("SELECT indexname,minrank,displayname,style_layout,img_header,img_side,label_description,label_misc,label_moredetails FROM catalogue_pages WHERE indexid = '" + pageID + "'"); if (pageID > 0 && pageData.Length == 0) { return; } string pageIndexName = ""; StringBuilder pageBuilder = new System.Text.StringBuilder(); cataloguePage objPage = new cataloguePage(); if (pageID > 0) { pageIndexName = pageData[0]; objPage.displayName = pageData[2]; objPage.minRank = byte.Parse(pageData[1]); // Add the required fields for catalogue page (indexname, showname, page layout style (boxes etc)) pageBuilder.Append("i:" + pageIndexName + Convert.ToChar(13) + "n:" + pageData[2] + Convert.ToChar(13) + "l:" + pageData[3] + Convert.ToChar(13)); if (pageData[4] != "") // If there's a headline image set, add it { pageBuilder.Append("g:" + pageData[4] + Convert.ToChar(13)); } if (pageData[5] != "") // If there is/are side image(s) set, add it/them { pageBuilder.Append("e:" + pageData[5] + Convert.ToChar(13)); } if (pageData[6] != "") // If there's a description set, add it { pageBuilder.Append("h:" + pageData[6] + Convert.ToChar(13)); } if (pageData[8] != "") // If there's a 'Click here for more details' label set, add it { pageBuilder.Append("w:" + pageData[8] + Convert.ToChar(13)); } if (pageData[7] != "") // If the misc additions field is not blank { string[] miscDetail = pageData[7].Split(Convert.ToChar(13)); for (int m = 0; m < miscDetail.Length; m++) { pageBuilder.Append(miscDetail[m] + Convert.ToChar(13)); } } } int[] itemTemplateIDs = DB.runReadColumn("SELECT tid FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0, null); int[] itemTypeIDs = DB.runReadColumn("SELECT typeid FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0, null); int[] itemLengths = DB.runReadColumn("SELECT length FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0, null); int[] itemWidths = DB.runReadColumn("SELECT width FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0, null); int[] itemCosts = DB.runReadColumn("SELECT catalogue_cost FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0, null); int[] itemDoorFlags = DB.runReadColumn("SELECT door FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0, null); int[] itemTradeableFlags = DB.runReadColumn("SELECT tradeable FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0, null); int[] itemRecycleableFlags = DB.runReadColumn("SELECT recycleable FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0, null); string[] itemNames = DB.runReadColumn("SELECT catalogue_name FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0); string[] itemDescs = DB.runReadColumn("SELECT catalogue_description FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0); string[] itemCCTs = DB.runReadColumn("SELECT name_cct FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0); string[] itemColours = DB.runReadColumn("SELECT colour FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0); string[] itemTopHs = DB.runReadColumn("SELECT top FROM catalogue_items WHERE catalogue_id_page = '" + pageID + "' ORDER BY catalogue_id_index ASC", 0); for (int i = 0; i < itemTemplateIDs.Length; i++) { if (stringManager.getStringPart(itemCCTs[i], 0, 4) != "deal") { itemCache.Add(itemTemplateIDs[i], new itemTemplate(itemCCTs[i], Convert.ToByte(itemTypeIDs[i]), itemColours[i], itemLengths[i], itemWidths[i], double.Parse(itemTopHs[i]), (itemDoorFlags[i] == 1), (itemTradeableFlags[i] == 1), (itemRecycleableFlags[i] == 1))); if (pageID == -1) { continue; } pageBuilder.Append("p:" + itemNames[i] + Convert.ToChar(9) + itemDescs[i] + Convert.ToChar(9) + itemCosts[i] + Convert.ToChar(9) + Convert.ToChar(9)); if (itemTypeIDs[i] == 0) { pageBuilder.Append("i"); } else { pageBuilder.Append("s"); } pageBuilder.Append(Convert.ToChar(9) + itemCCTs[i] + Convert.ToChar(9)); if (itemTypeIDs[i] == 0) { pageBuilder.Append(Convert.ToChar(9)); } else { pageBuilder.Append("0" + Convert.ToChar(9)); } if (itemTypeIDs[i] == 0) { pageBuilder.Append(Convert.ToChar(9)); } else { pageBuilder.Append(itemLengths[i] + "," + itemWidths[i] + Convert.ToChar(9)); } pageBuilder.Append(itemCCTs[i] + Convert.ToChar(9)); if (itemTypeIDs[i] > 0) { pageBuilder.Append(itemColours[i]); } pageBuilder.Append(Convert.ToChar(13)); } else { int dealID = int.Parse(itemCCTs[i].Substring(4)); int[] dealItemIDs = DB.runReadColumn("SELECT tid FROM catalogue_deals WHERE id = '" + dealID + "'", 0, null); int[] dealItemAmounts = DB.runReadColumn("SELECT amount FROM catalogue_deals WHERE id = '" + dealID + "'", 0, null); pageBuilder.Append("p:" + itemNames[i] + Convert.ToChar(9) + itemDescs[i] + Convert.ToChar(9) + itemCosts[i] + Convert.ToChar(9) + Convert.ToChar(9) + "d"); pageBuilder.Append(Convert.ToChar(9), 4); pageBuilder.Append("deal" + dealID + Convert.ToChar(9) + Convert.ToChar(9) + dealItemIDs.Length + Convert.ToChar(9)); for (int y = 0; y < dealItemIDs.Length; y++) { string itemCCT = DB.runRead("SELECT name_cct FROM catalogue_items WHERE tid = '" + dealItemIDs[y] + "'"); string itemColour = DB.runRead("SELECT colour FROM catalogue_items WHERE tid = '" + dealItemIDs[y] + "'"); pageBuilder.Append(itemCCT + Convert.ToChar(9) + dealItemAmounts[y] + Convert.ToChar(9) + itemColour + Convert.ToChar(9)); } } } if (pageID == -1) { return; } objPage.pageData = pageBuilder.ToString(); cataloguePages.Add(pageIndexName, objPage); }