// //==================================================================================================== // public override double GetNumber(string FieldName) { try { return(cs.getNumber(FieldName)); } catch (Exception ex) { LogController.logError(cp.core, ex); throw; } }
// //======================================================================== /// <summary> /// Display a field in the admin index form /// </summary> /// <param name="core"></param> /// <param name="adminData"></param> /// <param name="fieldName"></param> /// <param name="CS"></param> /// <param name="IsLookupFieldValid"></param> /// <param name="IsEmailContent"></param> /// <returns></returns> public static string getGridCell(CoreController core, AdminDataModel adminData, string fieldName, CsModel csData, bool IsLookupFieldValid, bool IsEmailContent) { try { var Stream = new StringBuilderLegacyController(); var field = adminData.adminContent.fields[fieldName.ToLowerInvariant()]; if (field.password) { // // -- do not list password fields Stream.add("****"); } else { int Pos = 0; switch (field.fieldTypeId) { case CPContentBaseClass.FieldTypeIdEnum.File: case CPContentBaseClass.FieldTypeIdEnum.FileImage: { string filename = csData.getText(field.nameLc); filename = GenericController.strReplace(filename, "\\", "/"); Pos = filename.LastIndexOf("/") + 1; if (Pos != 0) { filename = filename.Substring(Pos); } Stream.add(filename); break; } case CPContentBaseClass.FieldTypeIdEnum.Lookup: { if (IsLookupFieldValid) { Stream.add(csData.getText("LookupTable" + field.id + "Name")); } else if (field.lookupList != "") { string[] lookups = field.lookupList.Split(','); int LookupPtr = csData.getInteger(field.nameLc) - 1; if (LookupPtr <= lookups.GetUpperBound(0)) { if (LookupPtr >= 0) { Stream.add(lookups[LookupPtr]); } } } else { Stream.add(" "); } break; } case CPContentBaseClass.FieldTypeIdEnum.MemberSelect: { if (IsLookupFieldValid) { Stream.add(csData.getText("LookupTable" + field.id + "Name")); } else { Stream.add(csData.getText(field.nameLc)); } break; } case CPContentBaseClass.FieldTypeIdEnum.Boolean: { if (csData.getBoolean(field.nameLc)) { Stream.add("yes"); } else { Stream.add("no"); } break; } case CPContentBaseClass.FieldTypeIdEnum.Currency: { string fieldValueText = csData.getText(field.nameLc); if (string.IsNullOrWhiteSpace(fieldValueText)) { Stream.add(fieldValueText); break; } Stream.add(string.Format("{0:C}", csData.getNumber(field.nameLc))); break; } case CPContentBaseClass.FieldTypeIdEnum.LongText: case CPContentBaseClass.FieldTypeIdEnum.HTML: case CPContentBaseClass.FieldTypeIdEnum.HTMLCode: { string fieldValueText = csData.getText(field.nameLc); if (fieldValueText.Length > 50) { fieldValueText = fieldValueText.left(50) + "[more]"; } Stream.add(fieldValueText); break; } case CPContentBaseClass.FieldTypeIdEnum.FileText: case CPContentBaseClass.FieldTypeIdEnum.FileCSS: case CPContentBaseClass.FieldTypeIdEnum.FileXML: case CPContentBaseClass.FieldTypeIdEnum.FileJavascript: case CPContentBaseClass.FieldTypeIdEnum.FileHTML: case CPContentBaseClass.FieldTypeIdEnum.FileHTMLCode: { string filename = csData.getText(field.nameLc); if (!string.IsNullOrEmpty(filename)) { string Copy = core.cdnFiles.readFileText(filename); Stream.add(Copy); } break; } case CPContentBaseClass.FieldTypeIdEnum.Redirect: case CPContentBaseClass.FieldTypeIdEnum.ManyToMany: { Stream.add("n/a"); break; } case CPContentBaseClass.FieldTypeIdEnum.Date: { // // -- if minvalue, use blank, if no time-part, do short-date DateTime cellValueDate = csData.getDate(field.nameLc); if (cellValueDate.Equals(DateTime.MinValue)) { Stream.add(""); } else if (cellValueDate.Equals(cellValueDate.Date)) { Stream.add(cellValueDate.ToShortDateString()); } else { Stream.add(cellValueDate.ToString()); } break; } default: { string valueString = csData.getText(field.nameLc); if (string.IsNullOrWhiteSpace(valueString)) { Stream.add(valueString); break; } Stream.add(csData.getText(field.nameLc)); break; } } } return(HtmlController.encodeHtml(Stream.text)); } catch (Exception ex) { LogController.logError(core, ex); throw; } }
// //========================================================================================= // Summarize the visits // excludes non-cookie visits // excludes administrator and developer visits // excludes authenticated users with ExcludeFromReporting // // Average time on site // // Example data // Pages TimeToLastHit // 1 0 - hit 1 page, start time = last time // 10 3510 - hit 10 pages, first hit time - last hit time = 3510 // 2 30 - hit 2 pages, first hit time - last hit time = 30 // // AveReadTime is the average time spent reading pages // this is calculated from the multi-page visits only // = MultiPageTimeToLastHitSum / ( MultiPageHitCnt - MultiPageVisitCnt ) // = ( 3510 + 30 ) / ((10+2) - 2 ) // = 354 // // TotalTimeOnSite is the total time people spent reading pages // There are two parts: // 1) the TimeToLastHit, which covers all but the last hit of each visit // 2) assume the last hit of each visit is the AveReadTime // = MultiPageTimeToLastHitSum + ( AveReadTime * VisitCnt ) // = ( 3510 + 30 ) + ( 354 * 3 ) // = 4602 // // AveTimeOnSite // = TotalTimeOnSite / TotalHits // = 4602 / 3 // = 1534 // //========================================================================================= // private static void summarizePeriod(CoreController core, HouseKeepEnvironmentModel env, DateTime StartTimeDate, DateTime EndTimeDate, int HourDuration, string BuildVersion, DateTime OldestVisitSummaryWeCareAbout) { try { // if (string.CompareOrdinal(BuildVersion, CoreController.codeVersion()) >= 0) { DateTime PeriodStart = default(DateTime); PeriodStart = StartTimeDate; if (PeriodStart < OldestVisitSummaryWeCareAbout) { PeriodStart = OldestVisitSummaryWeCareAbout; } double StartTimeHoursSinceMidnight = PeriodStart.TimeOfDay.TotalHours; PeriodStart = PeriodStart.Date.AddHours(StartTimeHoursSinceMidnight); DateTime PeriodDatePtr = default(DateTime); PeriodDatePtr = PeriodStart; while (PeriodDatePtr < EndTimeDate) { // int DateNumber = encodeInteger(PeriodDatePtr.AddHours(HourDuration / 2.0).ToOADate()); int TimeNumber = encodeInteger(PeriodDatePtr.TimeOfDay.TotalHours); DateTime DateStart = default(DateTime); DateStart = PeriodDatePtr.Date; DateTime DateEnd = default(DateTime); DateEnd = PeriodDatePtr.AddHours(HourDuration).Date; // // No Cookie Visits // string SQL = "select count(v.id) as NoCookieVisits" + " from ccvisits v" + " where (v.CookieSupport<>1)" + " and(v.dateadded>=" + DbController.encodeSQLDate(DateStart) + ")" + " and (v.dateadded<" + DbController.encodeSQLDate(DateEnd) + ")" + " and((v.ExcludeFromAnalytics is null)or(v.ExcludeFromAnalytics=0))" + ""; int NoCookieVisits = 0; using (var csData = new CsModel(core)) { core.db.sqlCommandTimeout = 180; csData.openSql(SQL); if (csData.ok()) { NoCookieVisits = csData.getInteger("NoCookieVisits"); } } // // Total Visits // SQL = "select count(v.id) as VisitCnt ,Sum(v.PageVisits) as HitCnt ,sum(v.TimetoLastHit) as TimeOnSite" + " from ccvisits v" + " where (v.CookieSupport<>0)" + " and(v.dateadded>=" + DbController.encodeSQLDate(DateStart) + ")" + " and (v.dateadded<" + DbController.encodeSQLDate(DateEnd) + ")" + " and((v.ExcludeFromAnalytics is null)or(v.ExcludeFromAnalytics=0))" + ""; // int VisitCnt = 0; int HitCnt = 0; using (var csData = new CsModel(core)) { core.db.sqlCommandTimeout = 180; csData.openSql(SQL); if (csData.ok()) { VisitCnt = csData.getInteger("VisitCnt"); HitCnt = csData.getInteger("HitCnt"); double TimeOnSite = csData.getNumber("TimeOnSite"); } } // // -- Visits by new visitors int NewVisitorVisits = 0; int SinglePageVisits = 0; int AuthenticatedVisits = 0; int MobileVisits = 0; int BotVisits = 0; double AveTimeOnSite = 0; if (VisitCnt > 0) { SQL = "select count(v.id) as NewVisitorVisits" + " from ccvisits v" + " where (v.CookieSupport<>0)" + " and(v.dateadded>=" + DbController.encodeSQLDate(DateStart) + ")" + " and (v.dateadded<" + DbController.encodeSQLDate(DateEnd) + ")" + " and((v.ExcludeFromAnalytics is null)or(v.ExcludeFromAnalytics=0))" + " and(v.VisitorNew<>0)" + ""; using (var csData = new CsModel(core)) { core.db.sqlCommandTimeout = 180; csData.openSql(SQL); if (csData.ok()) { NewVisitorVisits = csData.getInteger("NewVisitorVisits"); } } // // Single Page Visits // SQL = "select count(v.id) as SinglePageVisits" + " from ccvisits v" + " where (v.CookieSupport<>0)" + " and(v.dateadded>=" + DbController.encodeSQLDate(DateStart) + ")" + " and (v.dateadded<" + DbController.encodeSQLDate(DateEnd) + ")" + " and((v.ExcludeFromAnalytics is null)or(v.ExcludeFromAnalytics=0))" + " and(v.PageVisits=1)" + ""; using (var csData = new CsModel(core)) { core.db.sqlCommandTimeout = 180; csData.openSql(SQL); if (csData.ok()) { SinglePageVisits = csData.getInteger("SinglePageVisits"); } } // // Multipage Visits // SQL = "select count(v.id) as VisitCnt ,sum(v.PageVisits) as HitCnt ,sum(v.TimetoLastHit) as TimetoLastHitSum " + " from ccvisits v" + " where (v.CookieSupport<>0)" + " and(v.dateadded>=" + DbController.encodeSQLDate(DateStart) + ")" + " and (v.dateadded<" + DbController.encodeSQLDate(DateEnd) + ")" + " and((v.ExcludeFromAnalytics is null)or(v.ExcludeFromAnalytics=0))" + " and(PageVisits>1)" + ""; int MultiPageHitCnt = 0; int MultiPageVisitCnt = 0; double MultiPageTimetoLastHitSum = 0; using (var csData = new CsModel(core)) { core.db.sqlCommandTimeout = 180; csData.openSql(SQL); if (csData.ok()) { MultiPageVisitCnt = csData.getInteger("VisitCnt"); MultiPageHitCnt = csData.getInteger("HitCnt"); MultiPageTimetoLastHitSum = csData.getNumber("TimetoLastHitSum"); } } // // Authenticated Visits // SQL = "select count(v.id) as AuthenticatedVisits " + " from ccvisits v" + " where (v.CookieSupport<>0)" + " and(v.dateadded>=" + DbController.encodeSQLDate(DateStart) + ")" + " and (v.dateadded<" + DbController.encodeSQLDate(DateEnd) + ")" + " and((v.ExcludeFromAnalytics is null)or(v.ExcludeFromAnalytics=0))" + " and(VisitAuthenticated<>0)" + ""; using (var csData = new CsModel(core)) { core.db.sqlCommandTimeout = 180; csData.openSql(SQL); if (csData.ok()) { AuthenticatedVisits = csData.getInteger("AuthenticatedVisits"); } } // // // Mobile Visits // SQL = "select count(v.id) as cnt " + " from ccvisits v" + " where (v.CookieSupport<>0)" + " and(v.dateadded>=" + DbController.encodeSQLDate(DateStart) + ")" + " and (v.dateadded<" + DbController.encodeSQLDate(DateEnd) + ")" + " and((v.ExcludeFromAnalytics is null)or(v.ExcludeFromAnalytics=0))" + " and(Mobile<>0)" + ""; using (var csData = new CsModel(core)) { core.db.sqlCommandTimeout = 180; csData.openSql(SQL); if (csData.ok()) { MobileVisits = csData.getInteger("cnt"); } } // // Bot Visits // SQL = "select count(v.id) as cnt " + " from ccvisits v" + " where (v.CookieSupport<>0)" + " and(v.dateadded>=" + DbController.encodeSQLDate(DateStart) + ")" + " and (v.dateadded<" + DbController.encodeSQLDate(DateEnd) + ")" + " and((v.ExcludeFromAnalytics is null)or(v.ExcludeFromAnalytics=0))" + " and(Bot<>0)" + ""; using (var csData = new CsModel(core)) { core.db.sqlCommandTimeout = 180; csData.openSql(SQL); if (csData.ok()) { BotVisits = csData.getInteger("cnt"); } } // if ((MultiPageHitCnt > MultiPageVisitCnt) && (HitCnt > 0)) { int AveReadTime = encodeInteger(MultiPageTimetoLastHitSum / (MultiPageHitCnt - MultiPageVisitCnt)); double TotalTimeOnSite = MultiPageTimetoLastHitSum + (AveReadTime * VisitCnt); AveTimeOnSite = TotalTimeOnSite / VisitCnt; } } // // Add or update the Visit Summary Record // using (var csData = new CsModel(core)) { core.db.sqlCommandTimeout = 180; csData.open("Visit Summary", "(timeduration=" + HourDuration + ")and(DateNumber=" + DateNumber + ")and(TimeNumber=" + TimeNumber + ")"); if (!csData.ok()) { csData.close(); csData.insert("Visit Summary"); } // if (csData.ok()) { csData.set("name", HourDuration + " hr summary for " + DateTime.FromOADate(DateNumber).ToShortDateString() + " " + TimeNumber + ":00"); csData.set("DateNumber", DateNumber); csData.set("TimeNumber", TimeNumber); csData.set("Visits", VisitCnt); csData.set("PagesViewed", HitCnt); csData.set("TimeDuration", HourDuration); csData.set("NewVisitorVisits", NewVisitorVisits); csData.set("SinglePageVisits", SinglePageVisits); csData.set("AuthenticatedVisits", AuthenticatedVisits); csData.set("NoCookieVisits", NoCookieVisits); csData.set("AveTimeOnSite", AveTimeOnSite); { csData.set("MobileVisits", MobileVisits); csData.set("BotVisits", BotVisits); } } } PeriodDatePtr = PeriodDatePtr.AddHours(HourDuration); } { // // Delete any daily visit summary duplicates during this period(keep the first) // string SQL = "delete from ccvisitsummary" + " where id in (" + " select d.id from ccvisitsummary d,ccvisitsummary f" + " where f.datenumber=d.datenumber" + " and f.datenumber>" + env.oldestVisitSummaryWeCareAbout.ToOADate() + " and f.datenumber<" + env.yesterday.ToOADate() + " and f.TimeDuration=24" + " and d.TimeDuration=24" + " and f.id<d.id" + ")"; core.db.sqlCommandTimeout = 180; core.db.executeNonQuery(SQL); // // Find missing daily summaries, summarize that date // SQL = core.db.getSQLSelect("ccVisitSummary", "DateNumber", "TimeDuration=24 and DateNumber>=" + env.oldestVisitSummaryWeCareAbout.Date.ToOADate(), "DateNumber,TimeNumber"); using (var csData = new CsModel(core)) { csData.openSql(SQL); DateTime datePtr = env.oldestVisitSummaryWeCareAbout; while (datePtr <= env.yesterday) { if (!csData.ok()) { // // Out of data, start with this DatePtr // VisitSummaryClass.summarizePeriod(core, env, datePtr, datePtr, 24, core.siteProperties.dataBuildVersion, env.oldestVisitSummaryWeCareAbout); } else { DateTime workingDate = DateTime.MinValue.AddDays(csData.getInteger("DateNumber")); if (datePtr < workingDate) { // // There are missing dates, update them // VisitSummaryClass.summarizePeriod(core, env, datePtr, workingDate.AddDays(-1), 24, core.siteProperties.dataBuildVersion, env.oldestVisitSummaryWeCareAbout); } } if (csData.ok()) { // // if there is more data, go to the next record // csData.goNext(); } datePtr = datePtr.AddDays(1).Date; } csData.close(); } } } // return; } catch (Exception ex) { LogController.logError(core, ex); } }
// //==================================================================================================== // public static string get(CoreController core) { string tempGetForm_QuickStats = null; try { string sql = null; string RowColor = null; string Panel = null; int VisitID = 0; int VisitCount = 0; double PageCount = 0; StringBuilderLegacyController Stream = new StringBuilderLegacyController(); // // --- Start a form to make a refresh button Stream.add(core.html.getPanelButtons(ButtonCancel + "," + ButtonRefresh)); Stream.add("<input TYPE=\"hidden\" NAME=\"asf\" VALUE=\"" + AdminFormQuickStats + "\">"); Stream.add(core.html.getPanel(" ")); // // --- Indented part (Title Area plus page) // Stream.add("<table border=\"0\" cellpadding=\"20\" cellspacing=\"0\" width=\"100%\"><tr><td>" + SpanClassAdminNormal); Stream.add("<h1>Real-Time Activity Report</h1>"); // // --- set column width // Stream.add("<h2>Visits Today</h2>"); Stream.add("<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" width=\"100%\" style=\"background-color:white;border-top:1px solid #888;\">"); // // ----- All Visits Today // using (var csData = new CsModel(core)) { sql = "SELECT Count(ccVisits.ID) AS VisitCount, Avg(ccVisits.PageVisits) AS PageCount FROM ccVisits WHERE ((ccVisits.StartTime)>" + DbController.encodeSQLDate(core.doc.profileStartTime.Date) + ");"; csData.openSql(sql); if (csData.ok()) { VisitCount = csData.getInteger("VisitCount"); PageCount = csData.getNumber("pageCount"); Stream.add("<tr>"); Stream.add("<td style=\"border-bottom:1px solid #888;\" valign=top>" + SpanClassAdminNormal + "All Visits</span></td>"); Stream.add("<td style=\"width:150px;border-bottom:1px solid #888;\" valign=top>" + SpanClassAdminNormal + "<a target=\"_blank\" href=\"/" + HtmlController.encodeHtml(core.appConfig.adminRoute + "?" + rnAdminForm + "=" + AdminFormReports + "&rid=3&DateFrom=" + core.doc.profileStartTime + "&DateTo=" + core.doc.profileStartTime.ToShortDateString()) + "\">" + VisitCount + "</A>, " + string.Format("{0:N2}", PageCount) + " pages/visit.</span></td>"); Stream.add("<td style=\"border-bottom:1px solid #888;\" valign=top>" + SpanClassAdminNormal + "This includes all visitors to the website, including guests, bots and administrators. Pages/visit includes page hits and not ajax or remote method hits.</span></td>"); Stream.add("</tr>"); } } // // ----- Non-Bot Visits Today // using (var csData = new CsModel(core)) { sql = "SELECT Count(ccVisits.ID) AS VisitCount, Avg(ccVisits.PageVisits) AS PageCount FROM ccVisits WHERE (ccVisits.CookieSupport=1)and((ccVisits.StartTime)>" + DbController.encodeSQLDate(core.doc.profileStartTime.Date) + ");"; csData.openSql(sql); if (csData.ok()) { VisitCount = csData.getInteger("VisitCount"); PageCount = csData.getNumber("pageCount"); Stream.add("<tr>"); Stream.add("<td style=\"border-bottom:1px solid #888;\" valign=top>" + SpanClassAdminNormal + "Non-bot Visits</span></td>"); Stream.add("<td style=\"border-bottom:1px solid #888;\" valign=top>" + SpanClassAdminNormal + "<a target=\"_blank\" href=\"/" + HtmlController.encodeHtml(core.appConfig.adminRoute + "?" + rnAdminForm + "=" + AdminFormReports + "&rid=3&DateFrom=" + core.doc.profileStartTime.ToShortDateString() + "&DateTo=" + core.doc.profileStartTime.ToShortDateString()) + "\">" + VisitCount + "</A>, " + string.Format("{0:N2}", PageCount) + " pages/visit.</span></td>"); Stream.add("<td style=\"border-bottom:1px solid #888;\" valign=top>" + SpanClassAdminNormal + "This excludes hits from visitors identified as bots. Pages/visit includes page hits and not ajax or remote method hits.</span></td>"); Stream.add("</tr>"); } } // // ----- Visits Today by new visitors // using (var csData = new CsModel(core)) { sql = "SELECT Count(ccVisits.ID) AS VisitCount, Avg(ccVisits.PageVisits) AS PageCount FROM ccVisits WHERE (ccVisits.CookieSupport=1)and(ccVisits.StartTime>" + DbController.encodeSQLDate(core.doc.profileStartTime.Date) + ")AND(ccVisits.VisitorNew<>0);"; csData.openSql(sql); if (csData.ok()) { VisitCount = csData.getInteger("VisitCount"); PageCount = csData.getNumber("pageCount"); Stream.add("<tr>"); Stream.add("<td style=\"border-bottom:1px solid #888;\" valign=top>" + SpanClassAdminNormal + "Visits by New Visitors</span></td>"); Stream.add("<td style=\"border-bottom:1px solid #888;\" valign=top>" + SpanClassAdminNormal + "<a target=\"_blank\" href=\"/" + HtmlController.encodeHtml(core.appConfig.adminRoute + "?" + rnAdminForm + "=" + AdminFormReports + "&rid=3&ExcludeOldVisitors=1&DateFrom=" + core.doc.profileStartTime.ToShortDateString() + "&DateTo=" + core.doc.profileStartTime.ToShortDateString()) + "\">" + VisitCount + "</A>, " + string.Format("{0:N2}", PageCount) + " pages/visit.</span></td>"); Stream.add("<td style=\"border-bottom:1px solid #888;\" valign=top>" + SpanClassAdminNormal + "This includes only new visitors not identified as bots. Pages/visit includes page hits and not ajax or remote method hits.</span></td>"); Stream.add("</tr>"); } csData.close(); } // Stream.add("</table>"); // // ----- Visits currently online // { Panel = ""; Stream.add("<h2>Current Visits</h2>"); using (var csData = new CsModel(core)) { sql = "SELECT ccVisits.HTTP_REFERER as referer,ccVisits.remote_addr as Remote_Addr, ccVisits.LastVisitTime as LastVisitTime, ccVisits.PageVisits as PageVisits, ccMembers.Name as MemberName, ccVisits.ID as VisitID, ccMembers.ID as MemberID" + " FROM ccVisits LEFT JOIN ccMembers ON ccVisits.memberId = ccMembers.ID" + " WHERE (((ccVisits.LastVisitTime)>" + DbController.encodeSQLDate(core.doc.profileStartTime.AddHours(-1)) + "))" + " ORDER BY ccVisits.LastVisitTime DESC;"; csData.openSql(sql); if (csData.ok()) { Panel = Panel + "<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"2\">"; Panel = Panel + "<tr bgcolor=\"#B0B0B0\">"; Panel = Panel + "<td width=\"20%\" align=\"left\">" + SpanClassAdminNormal + "User</td>"; Panel = Panel + "<td width=\"20%\" align=\"left\">" + SpanClassAdminNormal + "IP Address</td>"; Panel = Panel + "<td width=\"20%\" align=\"left\">" + SpanClassAdminNormal + "Last Page Hit</td>"; Panel = Panel + "<td width=\"10%\" align=\"right\">" + SpanClassAdminNormal + "Page Hits</td>"; Panel = Panel + "<td width=\"10%\" align=\"right\">" + SpanClassAdminNormal + "Visit</td>"; Panel = Panel + "<td width=\"30%\" align=\"left\">" + SpanClassAdminNormal + "Referer</td>"; Panel = Panel + "</tr>"; RowColor = "ccPanelRowEven"; while (csData.ok()) { VisitID = csData.getInteger("VisitID"); Panel = Panel + "<tr class=\"" + RowColor + "\">"; Panel = Panel + "<td align=\"left\">" + SpanClassAdminNormal + "<a target=\"_blank\" href=\"/" + HtmlController.encodeHtml(core.appConfig.adminRoute + "?" + rnAdminForm + "=" + AdminFormReports + "&rid=16&MemberID=" + csData.getInteger("MemberID")) + "\">" + csData.getText("MemberName") + "</A></span></td>"; Panel = Panel + "<td align=\"left\">" + SpanClassAdminNormal + csData.getText("Remote_Addr") + "</span></td>"; Panel = Panel + "<td align=\"left\">" + SpanClassAdminNormal + csData.getDate("LastVisitTime").ToString("") + "</span></td>"; Panel = Panel + "<td align=\"right\">" + SpanClassAdminNormal + "<a target=\"_blank\" href=\"/" + core.appConfig.adminRoute + "?" + rnAdminForm + "=" + AdminFormReports + "&rid=10&VisitID=" + VisitID + "\">" + csData.getText("PageVisits") + "</A></span></td>"; Panel = Panel + "<td align=\"right\">" + SpanClassAdminNormal + "<a target=\"_blank\" href=\"/" + core.appConfig.adminRoute + "?" + rnAdminForm + "=" + AdminFormReports + "&rid=17&VisitID=" + VisitID + "\">" + VisitID + "</A></span></td>"; Panel = Panel + "<td align=\"left\">" + SpanClassAdminNormal + " " + csData.getText("referer") + "</span></td>"; Panel = Panel + "</tr>"; if (RowColor == "ccPanelRowEven") { RowColor = "ccPanelRowOdd"; } else { RowColor = "ccPanelRowEven"; } csData.goNext(); } Panel = Panel + "</table>"; } csData.close(); } Stream.add(core.html.getPanel(Panel, "ccPanel", "ccPanelShadow", "ccPanelHilite", "100%", 0)); } Stream.add("</td></tr></table>"); //Stream.Add(htmlController.form_end()); // tempGetForm_QuickStats = HtmlController.form(core, Stream.text); core.html.addTitle("Quick Stats"); return(tempGetForm_QuickStats); // // ----- Error Trap // } catch (Exception ex) { LogController.logError(core, ex); } return(tempGetForm_QuickStats); }