// //==================================================================================================== // public override DateTime GetDate(string FieldName) { try { return(cs.getDate(FieldName)); } catch (Exception ex) { LogController.logError(cp.core, ex); throw; } }
// //======================================================================== // //======================================================================== // public static string get(CPClass cp) { string tempGetForm_HouseKeepingControl = null; try { // StringBuilderLegacyController Content = new StringBuilderLegacyController(); string Copy = null; string SQL = null; string Button = null; int PagesTotal = 0; string Caption = null; DateTime DateValue = default(DateTime); string AgeInDays = null; int ArchiveRecordAgeDays = 0; string ArchiveTimeOfDay = null; bool ArchiveAllowFileClean = false; string ButtonList = ""; string Description = null; // Button = cp.core.docProperties.getText(RequestNameButton); if (Button == ButtonCancel) { // // // return(cp.core.webServer.redirect("/" + cp.core.appConfig.adminRoute, "HouseKeepingControl, Cancel Button Pressed")); } else if (!cp.core.session.isAuthenticatedAdmin()) { // // // ButtonList = ButtonCancel; Content.add(AdminUIController.getFormBodyAdminOnly()); } else { // string tableBody = ""; // // Set defaults // ArchiveRecordAgeDays = (cp.core.siteProperties.getInteger("ArchiveRecordAgeDays", 0)); ArchiveTimeOfDay = cp.core.siteProperties.getText("ArchiveTimeOfDay", "12:00:00 AM"); ArchiveAllowFileClean = (cp.core.siteProperties.getBoolean("ArchiveAllowFileClean", false)); // // Process Requests // switch (Button) { case ButtonOK: case ButtonSave: // ArchiveRecordAgeDays = cp.core.docProperties.getInteger("ArchiveRecordAgeDays"); cp.core.siteProperties.setProperty("ArchiveRecordAgeDays", GenericController.encodeText(ArchiveRecordAgeDays)); // ArchiveTimeOfDay = cp.core.docProperties.getText("ArchiveTimeOfDay"); cp.core.siteProperties.setProperty("ArchiveTimeOfDay", ArchiveTimeOfDay); // ArchiveAllowFileClean = cp.core.docProperties.getBoolean("ArchiveAllowFileClean"); cp.core.siteProperties.setProperty("ArchiveAllowFileClean", GenericController.encodeText(ArchiveAllowFileClean)); break; } // if (Button == ButtonOK) { return(cp.core.webServer.redirect("/" + cp.core.appConfig.adminRoute, "StaticPublishControl, OK Button Pressed")); } // // ----- Status // tableBody += HtmlController.tableRowStart() + "<td colspan=\"3\" class=\"ccPanel3D ccAdminEditSubHeader\"><b>Status</b>" + tableCellEnd + kmaEndTableRow; // // ----- Visits Found // PagesTotal = 0; SQL = "SELECT Count(ID) as Result FROM ccVisits;"; using (var csData = new CsModel(cp.core)) { csData.openSql(SQL); if (csData.ok()) { PagesTotal = csData.getInteger("Result"); } } tableBody += AdminUIController.getEditRowLegacy(cp.core, SpanClassAdminNormal + PagesTotal, "Visits Found", "", false, false, ""); // // ----- Oldest Visit // Copy = "unknown"; AgeInDays = "unknown"; using (var csData = new CsModel(cp.core)) { SQL = cp.core.db.getSQLSelect("ccVisits", "DateAdded", "", "ID", "", 1); csData.openSql(SQL); if (csData.ok()) { DateValue = csData.getDate("DateAdded"); if (DateValue != DateTime.MinValue) { Copy = GenericController.encodeText(DateValue); AgeInDays = GenericController.encodeText(encodeInteger(Math.Floor(encodeNumber(cp.core.doc.profileStartTime - DateValue)))); } } } tableBody += (AdminUIController.getEditRowLegacy(cp.core, SpanClassAdminNormal + Copy + " (" + AgeInDays + " days)", "Oldest Visit", "", false, false, "")); // // ----- Viewings Found // PagesTotal = 0; SQL = "SELECT Count(ID) as result FROM ccViewings;"; using (var csData = new CsModel(cp.core)) { csData.openSql(SQL); if (csData.ok()) { PagesTotal = csData.getInteger("Result"); } csData.close(); } tableBody += (AdminUIController.getEditRowLegacy(cp.core, SpanClassAdminNormal + PagesTotal, "Viewings Found", "", false, false, "")); // tableBody += (HtmlController.tableRowStart() + "<td colspan=\"3\" class=\"ccPanel3D ccAdminEditSubHeader\"><b>Options</b>" + tableCellEnd + kmaEndTableRow); // Caption = "Archive Age"; Copy = HtmlController.inputText_Legacy(cp.core, "ArchiveRecordAgeDays", ArchiveRecordAgeDays.ToString(), -1, 20) + " Number of days to keep visit records. 0 disables housekeeping."; tableBody += (AdminUIController.getEditRowLegacy(cp.core, Copy, Caption)); // Caption = "Housekeeping Time"; Copy = HtmlController.inputText_Legacy(cp.core, "ArchiveTimeOfDay", ArchiveTimeOfDay, -1, 20) + " The time of day when record deleting should start."; tableBody += (AdminUIController.getEditRowLegacy(cp.core, Copy, Caption)); // Caption = "Purge Content Files"; Copy = HtmlController.checkbox("ArchiveAllowFileClean", ArchiveAllowFileClean) + " Delete Contensive content files with no associated database record."; tableBody += (AdminUIController.getEditRowLegacy(cp.core, Copy, Caption)); // Content.add(AdminUIController.editTable(tableBody)); Content.add(HtmlController.inputHidden(rnAdminSourceForm, AdminformHousekeepingControl)); ButtonList = ButtonCancel + ",Refresh," + ButtonSave + "," + ButtonOK; } // Caption = "Data Housekeeping Control"; Description = "This tool is used to control the database record housekeeping process. This process deletes visit history records, so care should be taken before making any changes."; tempGetForm_HouseKeepingControl = AdminUIController.getToolBody(cp.core, Caption, ButtonList, "", false, false, Description, "", 0, Content.text); // cp.core.html.addTitle(Caption); } catch (Exception ex) { LogController.logError(cp.core, ex); } return(tempGetForm_HouseKeepingControl); }
// //======================================================================== /// <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; } }
// //========================================================================================= /// <summary> /// summarized visits hourly /// </summary> /// <param name="core"></param> /// <param name="env"></param> public static void housekeep(CoreController core, HouseKeepEnvironmentModel env) { try { // LogController.logInfo(core, "Housekeep, visitsummary"); // bool newHour = (core.dateTimeNowMockable.Hour != env.lastCheckDateTime.Hour); if (env.forceHousekeep || newHour) { // // Set NextSummaryStartDate based on the last time we ran hourly summarization // DateTime LastTimeSummaryWasRun = env.visitArchiveDate; core.db.sqlCommandTimeout = 180; using (var csData = new CsModel(core)) { if (csData.openSql(core.db.getSQLSelect("ccVisitSummary", "DateAdded", "(timeduration=1)and(Dateadded>" + DbController.encodeSQLDate(env.visitArchiveDate) + ")", "id Desc", "", 1))) { LastTimeSummaryWasRun = csData.getDate("DateAdded"); LogController.logInfo(core, "Update hourly visit summary, last time summary was run was [" + LastTimeSummaryWasRun + "]"); } else { LogController.logInfo(core, "Update hourly visit summary, no hourly summaries were found, set start to [" + LastTimeSummaryWasRun + "]"); } } DateTime NextSummaryStartDate = LastTimeSummaryWasRun; // // Each hourly entry includes visits that started during that hour, but we do not know when they finished (maybe during last hour) // Find the oldest starttime of all the visits with endtimes after the LastTimeSummaryWasRun. Resummarize all periods // from then to now // // For the past 24 hours, find the oldest visit with the last viewing during the last hour // DateTime StartOfHour = (new DateTime(LastTimeSummaryWasRun.Year, LastTimeSummaryWasRun.Month, LastTimeSummaryWasRun.Day, LastTimeSummaryWasRun.Hour, 1, 1)).AddHours(-1); // (Int(24 * LastTimeSummaryWasRun) / 24) - PeriodStep DateTime OldestDateAdded = StartOfHour; core.db.sqlCommandTimeout = 180; using (var csData = new CsModel(core)) { if (csData.openSql(core.db.getSQLSelect("ccVisits", "DateAdded", "LastVisitTime>" + DbController.encodeSQLDate(StartOfHour), "dateadded", "", 1))) { OldestDateAdded = csData.getDate("DateAdded"); if (OldestDateAdded < NextSummaryStartDate) { NextSummaryStartDate = OldestDateAdded; LogController.logInfo(core, "Update hourly visit summary, found a visit with the last viewing during the past hour. It started [" + OldestDateAdded + "], before the last summary was run."); } } } DateTime PeriodStartDate = core.dateTimeNowMockable.Date.AddDays(-90); double PeriodStep = 1; int HoursPerDay = 0; core.db.sqlCommandTimeout = 180; for (double PeriodDatePtr = PeriodStartDate.ToOADate(); PeriodDatePtr <= OldestDateAdded.ToOADate(); PeriodDatePtr += PeriodStep) { // // Verify there are 24 hour records for every day back the past 90 days // DateTime DateofMissingSummary = DateTime.MinValue; using (var csData = new CsModel(core)) { if (csData.openSql("select count(id) as HoursPerDay from ccVisitSummary where TimeDuration=1 and DateNumber=" + encodeInteger(PeriodDatePtr) + " group by DateNumber")) { HoursPerDay = csData.getInteger("HoursPerDay"); } csData.close(); if (HoursPerDay < 24) { DateofMissingSummary = DateTime.FromOADate(PeriodDatePtr); break; } } if ((DateofMissingSummary != DateTime.MinValue) && (DateofMissingSummary < NextSummaryStartDate)) { LogController.logInfo(core, "Found a missing hourly period in the visit summary table [" + DateofMissingSummary + "], it only has [" + HoursPerDay + "] hourly summaries."); NextSummaryStartDate = DateofMissingSummary; } // // Now summarize all visits during all hourly periods between OldestDateAdded and the previous Hour // LogController.logInfo(core, "Summaryize visits hourly, starting [" + NextSummaryStartDate + "]"); PeriodStep = (double)1 / (double)24; VisitSummaryClass.summarizePeriod(core, env, NextSummaryStartDate, core.dateTimeNowMockable, 1, core.siteProperties.dataBuildVersion, env.oldestVisitSummaryWeCareAbout); } } } catch (Exception ex) { LogController.logError(core, ex); } }
// //======================================================================== // public static string get(CoreController core) { try { // string Button = null; string SQL = null; string RQS = null; int PageSize = 0; int PageNumber = 0; int TopCount = 0; int RowPointer = 0; int DataRowCount = 0; string PreTableCopy = ""; string PostTableCopy = ""; int ColumnPtr = 0; string[] ColCaption = null; string[] ColAlign = null; string[] ColWidth = null; string[,] Cells = null; string AdminURL = null; int RowCnt = 0; int RowPtr = 0; int ContentId = 0; string Format = null; string Name = null; string title = null; string Description = null; string ButtonCommaListLeft = null; string ButtonCommaListRight = null; int ContentPadding = 0; string ContentSummary = ""; StringBuilderLegacyController Tab0 = new StringBuilderLegacyController(); StringBuilderLegacyController Tab1 = new StringBuilderLegacyController(); string Content = ""; string SQLFieldName = null; var adminMenu = new EditTabModel(); // const int ColumnCnt = 4; // Button = core.docProperties.getText(RequestNameButton); ContentId = core.docProperties.getInteger("ContentID"); Format = core.docProperties.getText("Format"); // title = "Custom Report Manager"; Description = "Custom Reports are a way for you to create a snapshot of data to view or download. To request a report, select the Custom Reports tab, check the report(s) you want, and click the [Request Download] Button. When your report is ready, it will be available in the <a href=\"?" + rnAdminForm + "=30\">Download Manager</a>. To create a new custom report, select the Request New Report tab, enter a name and SQL statement, and click the Apply button."; ContentPadding = 0; ButtonCommaListLeft = ButtonCancel + "," + ButtonDelete + "," + ButtonRequestDownload; ButtonCommaListRight = ""; SQLFieldName = "SQLQuery"; // if (!core.session.isAuthenticatedAdmin()) { // // Must be a developer // Description = Description + "You can not access the Custom Report Manager because your account is not configured as an administrator."; } else { // // Process Requests // if (!string.IsNullOrEmpty(Button)) { switch (Button) { case ButtonCancel: return(core.webServer.redirect("/" + core.appConfig.adminRoute, "CustomReports, Cancel Button Pressed")); case ButtonDelete: RowCnt = core.docProperties.getInteger("RowCnt"); if (RowCnt > 0) { for (RowPtr = 0; RowPtr < RowCnt; RowPtr++) { if (core.docProperties.getBoolean("Row" + RowPtr)) { MetadataController.deleteContentRecord(core, "Custom Reports", core.docProperties.getInteger("RowID" + RowPtr)); } } } break; case ButtonRequestDownload: case ButtonApply: // Name = core.docProperties.getText("name"); SQL = core.docProperties.getText(SQLFieldName); if (!string.IsNullOrEmpty(Name) || !string.IsNullOrEmpty(SQL)) { if ((string.IsNullOrEmpty(Name)) || (string.IsNullOrEmpty(SQL))) { Processor.Controllers.ErrorController.addUserError(core, "A name and SQL Query are required to save a new custom report."); } else { int customReportId = 0; using (var csData = new CsModel(core)) { csData.insert("Custom Reports"); if (csData.ok()) { customReportId = csData.getInteger("id"); csData.set("Name", Name); csData.set(SQLFieldName, SQL); } csData.close(); } requestDownload(core, customReportId); } } // RowCnt = core.docProperties.getInteger("RowCnt"); if (RowCnt > 0) { for (RowPtr = 0; RowPtr < RowCnt; RowPtr++) { if (core.docProperties.getBoolean("Row" + RowPtr)) { int customReportId = core.docProperties.getInteger("RowID" + RowPtr); using (var csData = new CsModel(core)) { csData.openRecord("Custom Reports", customReportId); if (csData.ok()) { SQL = csData.getText(SQLFieldName); Name = csData.getText("Name"); } } requestDownload(core, customReportId); } } } break; } } // // Build Tab0 // Tab0.add("<p>The following is a list of available custom reports.</p>"); // RQS = core.doc.refreshQueryString; PageSize = core.docProperties.getInteger(RequestNamePageSize); if (PageSize == 0) { PageSize = 50; } PageNumber = core.docProperties.getInteger(RequestNamePageNumber); if (PageNumber == 0) { PageNumber = 1; } AdminURL = "/" + core.appConfig.adminRoute; TopCount = PageNumber * PageSize; // // Setup Headings // ColCaption = new string[ColumnCnt + 1]; ColAlign = new string[ColumnCnt + 1]; ColWidth = new string[ColumnCnt + 1]; Cells = new string[PageSize + 1, ColumnCnt + 1]; // ColCaption[ColumnPtr] = "Select<br><img alt=\"space\" src=\"" + cdnPrefix + "images/spacer.gif\" width=10 height=1>"; ColAlign[ColumnPtr] = "center"; ColWidth[ColumnPtr] = "10"; ColumnPtr = ColumnPtr + 1; // ColCaption[ColumnPtr] = "Name"; ColAlign[ColumnPtr] = "left"; ColWidth[ColumnPtr] = "100%"; ColumnPtr = ColumnPtr + 1; // ColCaption[ColumnPtr] = "Created By<br><img alt=\"space\" src=\"" + cdnPrefix + "images/spacer.gif\" width=100 height=1>"; ColAlign[ColumnPtr] = "left"; ColWidth[ColumnPtr] = "100"; ColumnPtr = ColumnPtr + 1; // ColCaption[ColumnPtr] = "Date Created<br><img alt=\"space\" src=\"" + cdnPrefix + "images/spacer.gif\" width=150 height=1>"; ColAlign[ColumnPtr] = "left"; ColWidth[ColumnPtr] = "150"; ColumnPtr = ColumnPtr + 1; // // Get Data // using (var csData = new CsModel(core)) { RowPointer = 0; if (!csData.open("Custom Reports")) { Cells[0, 1] = "There are no custom reports defined"; RowPointer = 1; } else { DataRowCount = csData.getRowCount(); while (csData.ok() && (RowPointer < PageSize)) { int customReportId = csData.getInteger("ID"); Cells[RowPointer, 0] = HtmlController.checkbox("Row" + RowPointer) + HtmlController.inputHidden("RowID" + RowPointer, customReportId); Cells[RowPointer, 1] = csData.getText("name"); Cells[RowPointer, 2] = csData.getText("CreatedBy"); Cells[RowPointer, 3] = csData.getDate("DateAdded").ToShortDateString(); RowPointer = RowPointer + 1; csData.goNext(); } } csData.close(); } string Cell = null; Tab0.add(HtmlController.inputHidden("RowCnt", RowPointer)); Cell = AdminUIController.getReport(core, RowPointer, ColCaption, ColAlign, ColWidth, Cells, PageSize, PageNumber, PreTableCopy, PostTableCopy, DataRowCount, "ccPanel"); Tab0.add("<div>" + Cell + "</div>"); // // Build RequestContent Form // Tab1.add("<p>Use this form to create a new custom report. Enter the SQL Query for the report, and a name that will be used as a caption.</p>"); // Tab1.add("<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" width=\"100%\">"); // Tab1.add("<tr>"); Tab1.add("<td align=right>Name</td>"); Tab1.add("<td>" + HtmlController.inputText_Legacy(core, "Name", "", 1, 40) + "</td>"); Tab1.add("</tr>"); // Tab1.add("<tr>"); Tab1.add("<td align=right>SQL Query</td>"); Tab1.add("<td>" + HtmlController.inputText_Legacy(core, SQLFieldName, "", 8, 40) + "</td>"); Tab1.add("</tr>"); // Tab1.add("<tr><td width=\"120\"><img alt=\"space\" src=\"" + cdnPrefix + "images/spacer.gif\" width=\"120\" height=\"1\"></td><td width=\"100%\"> </td></tr></table>"); // // Build and add tabs // adminMenu.addEntry("Custom Reports", Tab0.text, "ccAdminTab"); adminMenu.addEntry("Request New Report", Tab1.text, "ccAdminTab"); Content = adminMenu.getTabs(core); // } // core.html.addTitle("Custom Reports"); // return(AdminUIController.getToolBody(core, title, ButtonCommaListLeft, ButtonCommaListRight, true, true, Description, ContentSummary, ContentPadding, Content)); } catch (Exception ex) { LogController.logError(core, ex); return(toolExceptionMessage); } }
// //==================================================================================================== /// <summary> /// Send the Member his username and password /// </summary> /// <param name="Email"></param> /// <returns></returns> public static bool sendPassword(CoreController core, string Email, ref string returnUserMessage) { bool result = false; returnUserMessage = ""; try { const string passwordChrs = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678999999"; const int passwordChrsLength = 62; // string workingEmail = GenericController.encodeText(Email); // string Message = ""; string FromAddress = ""; string subject = ""; if (string.IsNullOrEmpty(workingEmail)) { ErrorController.addUserError(core, "Please enter your email address before requesting your username and password."); } else { int atPtr = GenericController.strInstr(1, workingEmail, "@"); if (atPtr < 2) { // // email not valid // ErrorController.addUserError(core, "Please enter a valid email address before requesting your username and password."); } else { string EMailName = strMid(workingEmail, 1, atPtr - 1); // LogController.addSiteActivity(core, "password request for email " + workingEmail, core.session.user.id, core.session.user.organizationId); // bool allowEmailLogin = core.siteProperties.getBoolean("allowEmailLogin", false); int recordCnt = 0; using (var csData = new CsModel(core)) { string sqlCriteria = "(email=" + DbController.encodeSQLText(workingEmail) + ")"; sqlCriteria = sqlCriteria + "and((dateExpires is null)or(dateExpires>" + DbController.encodeSQLDate(core.dateTimeNowMockable) + "))"; csData.open("People", sqlCriteria, "ID", true, core.session.user.id, "username,password", 1); if (!csData.ok()) { // // valid login account for this email not found // if (encodeText(strMid(workingEmail, atPtr + 1)).ToLowerInvariant() == "contensive.com") { // // look for expired account to renew // csData.close(); csData.open("People", "((email=" + DbController.encodeSQLText(workingEmail) + "))", "ID"); if (csData.ok()) { // // renew this old record // csData.set("developer", "1"); csData.set("admin", "1"); if (csData.getDate("dateExpires") > DateTime.MinValue) { csData.set("dateExpires", core.dateTimeNowMockable.AddDays(7).Date.ToString()); } } else { // // inject support record // csData.close(); csData.insert("people"); csData.set("name", "Contensive Support"); csData.set("email", workingEmail); csData.set("developer", "1"); csData.set("admin", "1"); csData.set("dateExpires", core.dateTimeNowMockable.AddDays(7).Date.ToString()); } } else { ErrorController.addUserError(core, "No current user was found matching this email address. Please try again. "); } } if (csData.ok()) { FromAddress = core.siteProperties.getText("EmailFromAddress", "info@" + core.webServer.requestDomain); subject = "Password Request at " + core.webServer.requestDomain; Message = ""; while (csData.ok()) { bool updateUser = false; if (string.IsNullOrEmpty(Message)) { Message = "This email was sent in reply to a request at " + core.webServer.requestDomain + " for the username and password associated with this email address. "; Message += "If this request was made by you, please return to the login screen and use the following:\r\n"; Message += Environment.NewLine; } else { Message += Environment.NewLine; Message += "Additional user accounts with the same email address: \r\n"; } // // username // string Username = csData.getText("Username"); bool usernameOK = true; int Ptr = 0; if (!allowEmailLogin) { if (Username != Username.Trim()) { Username = Username.Trim(); updateUser = true; } if (string.IsNullOrEmpty(Username)) { usernameOK = false; Ptr = 0; while (!usernameOK && (Ptr < 100)) { Username = EMailName + encodeInteger(Math.Floor(encodeNumber(Microsoft.VisualBasic.VBMath.Rnd() * 9999))); usernameOK = !core.session.isLoginOK(Username, "test"); Ptr = Ptr + 1; } if (usernameOK) { updateUser = true; } } Message += " username: "******"Password"); if (Password.Trim() != Password) { Password = Password.Trim(); updateUser = true; } if (string.IsNullOrEmpty(Password)) { for (Ptr = 0; Ptr <= 8; Ptr++) { int Index = encodeInteger(Microsoft.VisualBasic.VBMath.Rnd() * passwordChrsLength); Password = Password + strMid(passwordChrs, Index, 1); } updateUser = true; } Message += " password: "******"username", Username); csData.set("password", Password); } recordCnt = recordCnt + 1; } csData.goNext(); } } } } } if (result) { string sendStatus = ""; EmailController.queueAdHocEmail(core, "Password Email", core.session.user.id, workingEmail, FromAddress, subject, Message, "", "", "", true, false, 0, ref sendStatus); } } catch (Exception ex) { LogController.logError(core, ex); throw; } return(result); }
// //==================================================================================================== // 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); }
public static void housekeep(CoreController core, HouseKeepEnvironmentModel env) { try { // LogController.logInfo(core, "Housekeep, visits"); { // LogController.logInfo(core, "Deleting visits with no DateAdded"); // core.db.sqlCommandTimeout = 180; core.db.executeNonQuery("delete from ccvisits where (DateAdded is null)or(DateAdded<DATEADD(year,-10,CAST(GETDATE() AS DATE)))"); } { // LogController.logInfo(core, "Deleting visits with no visitor"); // core.db.executeNonQuery("delete from ccvisits from ccvisits v left join ccvisitors r on r.id=v.visitorid where (r.id is null)"); } if (env.archiveDeleteNoCookie) { // LogController.logInfo(core, "Deleting visits with no cookie support older than Midnight, Two Days Ago"); // core.db.sqlCommandTimeout = 180; core.db.executeNonQuery("delete from ccvisits where (CookieSupport=0)and(LastVisitTime<DATEADD(day,-2,CAST(GETDATE() AS DATE)))"); } DateTime OldestVisitDate = default(DateTime); // // Get Oldest Visit using (var csData = new CsModel(core)) { if (csData.openSql(core.db.getSQLSelect("ccVisits", "DateAdded", "", "dateadded", "", 1))) { OldestVisitDate = csData.getDate("DateAdded").Date; } } // // Remove old visit records // if > 30 days in visit table, limit one pass to just 30 days // this is to prevent the entire server from being bogged down for one site change // if (OldestVisitDate == DateTime.MinValue) { LogController.logInfo(core, "No visit records were removed because no visit records were found while requesting the oldest visit."); } else { DateTime ArchiveDate = core.dateTimeNowMockable.AddDays(-env.visitArchiveAgeDays).Date; int DaystoRemove = encodeInteger(ArchiveDate.Subtract(OldestVisitDate).TotalDays); if (DaystoRemove > 30) { ArchiveDate = OldestVisitDate.AddDays(30); } if (OldestVisitDate >= ArchiveDate) { LogController.logInfo(core, "No records were removed because Oldest Visit Date [" + OldestVisitDate + "] >= ArchiveDate [" + ArchiveDate + "]."); } else { LogController.logInfo(core, "Removing records from [" + OldestVisitDate + "] to [" + ArchiveDate + "]."); DateTime SingleDate = default(DateTime); SingleDate = OldestVisitDate; do { houseKeep_App_Daily_RemoveVisitRecords(core, SingleDate); SingleDate = SingleDate.AddDays(1); } while (SingleDate < ArchiveDate); } } } catch (Exception ex) { LogController.logError(core, ex); } }