<%@LANGUAGE="JavaScript"%> <% 'use strict'; //*****WORSHIP DB INTERFACE - Don A. Milnor - 2019***** // This will probably be a work in progress for quite some time. // begin global variables var gsConn; // NOTE THE EMPTY STRING PUT IN FRONT OF MOST OF THE STRING SERVER VARIABLES BELOW. // (We would have problems later otherwise.) var gbEditAdmin; var gsAltSongTitle1 = "" + Request.Form("rfAltSongTitle1"); var gsAltSongTitle2 = "" + Request.Form("rfAltSongTitle2"); var gsBookID1 = "" + Request.Form("rfBook1"); var gsBookID2 = "" + Request.Form("rfBook2"); var gsBookID3 = "" + Request.Form("rfBook3"); var gsBookName = "" + Request.Form("rfBookName"); var gsFirstName = "" + Request.Form("rfFirstName"); var gsDemo = "" + Request.Form("rfDemo"); var gsDemoText; var gsDescription = "" + Request.Form("rfDescription"); var gsEditOriginalID = "" + Request.Form("rfEditOriginalID"); var gsEditPassword = "" + Request.Form("rfEditPassword"); var gsEditPersonID = "" + Request.Form("rfEditPersonID"); var gsEditUserName = "" + Request.Form("rfEditUserName"); var gsID = "" + Request.Form("rfID"); var gsInstance = "" + Request.Form("rfInstance"); var gsKey = "" + Request.Form("rfKey"); var gsLastName = "" + Request.Form("rfLastName"); var gsLyrics = "" + Request.Form("rfLyrics"); var gsNotes = "" + Request.Form("rfNotes"); var gsNotForGuests; var gsOnlyForAdmins; var gsPageNo1 = "" + Request.Form("rfPageNo1"); var gsPageNo2 = "" + Request.Form("rfPageNo2"); var gsPageNo3 = "" + Request.Form("rfPageNo3"); var gsPassword = "" + Request.Form("rfPassword"); var gsPassword2 = "" + Request.Form("rfPassword2"); var gsSongbookID = "" + Request.Form("rfSongbookID"); var gsSongbookMaintType = "" + Request.Form("rfSongbookMaintType"); var gsSongID = "" + Request.Form("rfSongID"); var gsSongTitle = "" + Request.Form("rfSongTitle"); var gsUserRecMaintType = "" + Request.Form("rfUserRecMaintType"); var gsUserType = "" + Request.Form("rfUserType"); var gsWorshipDate = "" + Request.Form("rfWorshipDate"); // end global variables // begin main function if(Request.Form("rfEditAdmin") == "on") // checked checkbox gbEditAdmin = true; else gbEditAdmin = false; if(Request.QueryString("Demo") == "Yes") gsDemo = "Yes"; gsConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath() + ";Jet OLEDB:Database Password=''"; // connection string if(gsDemo == "Yes") gsDemoText = " - Demo Version"; else gsDemoText = ""; if(gsUserType == "Guest") gsNotForGuests = " disabled"; else gsNotForGuests = ""; if(gsUserType == "Normal") gsOnlyForAdmins = " disabled"; else gsOnlyForAdmins = ""; switch(gsInstance) { case "iAdminFunctions": AdminFunctions(); break; case "iChangePassword": ChangePassword(); break; case "iCheckAndSaveSong": CheckAndSaveSong(); break; case "iCheckChangedPassword": CheckChangedPassword(); break; case "iCheckPassword": CheckPassword(); break; case "iDisplayWorshipService": DisplayOneWorshipService(); break; case "iDisplaySongUsage": DisplaySongUsage(); break; case "iUserRecordPart2": UserRecordPart2(); break; case "iEditSong": EditSong(); break; case "iEditSongs": EditSongs(); break; case "iListSongUsage": ListSongUsage(); break; case "iMainMenu": MainMenu(); break; case "iUserRecordPart3": UserRecordPart3(); break; case "iSongbookPart1": SongbookPart1(); break; case "iSongbookPart2": SongbookPart2(); break; case "iSongbookPart3": SongbookPart3(); break; case "iSuccessfulChangedPassword": SuccessfulChangedPassword(); break; case "iUserRecordPart1": UserRecordPart1(); break; case "iWorshipServiceByDate": WorshipServiceByDate(); break; default: LogIn(); break; } // end main function // ALL THE FUNCTIONS BELOW ARE IN ALPHABETICAL ORDER function AdminChecked(psAdmin) { var sOut; if(psAdmin == true) sOut = " checked"; else sOut = ""; return sOut; } // AdminChecked function AdminFunctions() { %> Worship DB Interface - <%=EndTitleText()%>

Admin Functions<%=gsDemoText%>

<% } // AdminFunctions function BlankIsNull(psInput) { var sOutput; if(psInput == '') sOutput = "NULL"; else sOutput = psInput; return sOutput; } // BlankIsNull function ChangePassword() { %> Worship DB Interface - <%=EndTitleText()%>

Change Password<%=gsDemoText%>

   Enter Password:       
Re-enter Password:

<% } // ChangePassword function CheckAndSaveSong() { var sErrorMessage; if((gsPageNo1 != "" && gsBookID1 == "") ||(gsPageNo2 != "" && gsBookID2 == "") ||(gsPageNo3 != "" && gsBookID3 == "") ||(gsPageNo1 == "" && gsBookID1 != "") ||(gsPageNo2 == "" && gsBookID2 != "") ||(gsPageNo3 == "" && gsBookID3 != "")) sErrorMessage = "Page number has no book ID, and/or book ID has no page number. Please correct."; else if(gsSongTitle == "") sErrorMessage = "Song title required. Please correct."; else sErrorMessage = "" if(sErrorMessage != "") // if there's an error { %> Worship DB Interface - <%=EndTitleText()%>

<%=sErrorMessage%><%=gsDemoText%>

<% return; } // if we get here, no issues with book ID, page number or title; save... var cn = new ActiveXObject("ADODB.Connection"); cn.Open(gsConn); cn.Execute("UPDATE Songs SET SongTitle = " + Literal(gsSongTitle) + ", AltSongTitle1 = " + Literal(gsAltSongTitle1) + ", AltSongTitle2 = " + Literal(gsAltSongTitle2) + ", Description = " + Literal(gsDescription) + ", [Key] = " + Literal(gsKey) + ", PageNo1 = " + Literal(gsPageNo1) + ", BookID1 = " + BlankIsNull(gsBookID1) + ", PageNo2 = " + Literal(gsPageNo2) + ", BookID2 = " + BlankIsNull(gsBookID2) + ", PageNo3 = " + Literal(gsPageNo3) + ", BookID3 = " + BlankIsNull(gsBookID3) + ", Lyrics = " + Literal(gsLyrics) + " WHERE ID = " + gsSongID); cn.Close; %> Worship DB Interface - <%=EndTitleText()%>

Song "<%=gsSongTitle%>" Updated<%=gsDemoText%>

<% } // CheckAndSaveSong function CheckChangedPassword() { var sErrorMessage; if(gsPassword != gsPassword2) sErrorMessage = "Passwords do not match."; else if(gsPassword == "") sErrorMessage = "Password cannot be blank."; else sErrorMessage = ""; if(sErrorMessage == "") // password fine { var cn = new ActiveXObject("ADODB.Connection"); cn.Open(gsConn); cn.Execute("UPDATE Users SET UserPW = " + Literal(gsPassword) + " WHERE UserName = " + Literal(gsID)); cn.Close; %> Worship DB Interface - <%=EndTitleText()%>

Password Change Successful<%=gsDemoText%>

<% } else // password change unsuccessful { %> Worship DB Interface - <%=EndTitleText()%>

<%=sErrorMessage%><%=gsDemoText%>

<% } } // CheckChangedPassword function CheckPassword() { var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); var sID = "" + Request.Form("rfID"); var sPassword = "" + Request.Form("rfPassword"); cn.Open(gsConn); rs.Open("SELECT p.LastName, p.FirstName, u.Admin" + " FROM Persons AS p" + " INNER JOIN Users AS u" + " ON u.PersonID = p.ID" + " WHERE UserName = " + Literal(sID) + " AND UserPW = " + Literal(sPassword), cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic if(rs.BOF && rs.EOF) // ID/PW not found InvalidIDPassword(); else { rs.MoveFirst; gsFirstName = rs("FirstName"); gsLastName = rs("LastName"); if(rs("Admin")==true) { gsUserType = "Admin"; gsOnlyForAdmins = ""; } else { gsUserType = "Normal"; gsOnlyForAdmins = " disabled"; } MainMenu(); } rs.Close; cn.Close; } // CheckPassword function DBPath() { // This reads in the local path to the .asp file, and calculates a path // to the Access file, which is up one level, then in the folder "DB". // NOTE THE EMPTY STRING PUT IN FRONT OF THE SERVER VARIABLE BELOW. var sInputPath = "" + Request.ServerVariables("PATH_TRANSLATED"); var sOutput; var x = sInputPath.length - 1; // find 2nd to last backslash in input path while (sInputPath.substr(x, 1) != "\\") x--; x--; while (sInputPath.substr(x, 1) != "\\") x--; if(gsDemo == "Yes" || Request.QueryString("Demo") == "Yes") sOutput = sInputPath.substr(0, x + 1) + "db\\worship_demo.mdb"; else sOutput = sInputPath.substr(0, x + 1) + "db\\worship.mdb"; return sOutput; } // DBPath function DisplayOneWorshipService() { %> Worship DB Interface - <%=EndTitleText()%>

Worship Service - <%=gsWorshipDate%><%=gsDemoText%>

<% var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); cn.Open(gsConn); rs.Open("SELECT p.FirstName + ' ' + p.LastName AS LeaderName, wa.Activity," + " IIf(ISNULL(s.SongTitle),'',s.SongTitle) AS SongTitle," + " IIf(ISNULL(s.Key),'',s.Key) AS [Key]," + " IIf(ISNULL(s.PageNo1),'',s.PageNo1) AS PageNo" + " FROM ((WorshipActivityInstances AS wai" + " INNER JOIN WorshipActivities AS wa" + " ON wai.ActivityID = wa.ID)" + " INNER JOIN Persons AS p" + " ON wai.PersonID = p.ID)" + " LEFT JOIN Songs AS s" + " ON wai.SongID = s.ID" + " WHERE Format(wai.ActivityDate,'yyyy-mm-dd') = " + Literal(gsWorshipDate) + " ORDER BY wai.ActivityDate DESC, wai.WorshipOrder", cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic rs.MoveFirst; while(!rs.EOF) { Response.Write(" \n" + " \n" + " \n" + " \n" + " \n" + " \n \n"); rs.MoveNext; } %>
Leader Name Activity Song Title Key Page #
" + rs("LeaderName") + "" + rs("Activity") + "" + rs("SongTitle") + "" + rs("Key") + "" + rs("PageNo") + "

<% } // DisplayOneWorshipService function DisplaySongUsage() { %> Worship DB Interface - <%=EndTitleText()%>

Song Usage - <%=SongTitleOfID(gsSongID)%> (<%=gsSongID%>)<%=gsDemoText%>

<% var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); cn.Open(gsConn); rs.Open("SELECT Format(wai.ActivityDate, 'yyyy-mm-dd') AS ActivityDate_YYYYMMDD," + " p.FirstName + ' ' + p.LastName AS Name" + " FROM WorshipActivityInstances AS wai" + " INNER JOIN Persons AS p" + " ON p.ID = wai.PersonID" + " WHERE wai.SongID = " + gsSongID + " ORDER BY wai.ActivityDate DESC", cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic rs.MoveFirst; while(!rs.EOF) { Response.Write(" \n" + " \n" + " \n \n"); rs.MoveNext; } %>
Date Worship Leader
" + rs("ActivityDate_YYYYMMDD") + "" + rs("Name") + "

<% } // DisplaySongUsage function EditSong() { var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); cn.Open(gsConn); rs.Open("SELECT *" + " FROM Songs" + " WHERE ID = " + gsSongID, cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic} rs.MoveFirst; %> Worship DB Interface - <%=EndTitleText()%>

Edit Song - <%=SongTitleOfID(gsSongID)%> (<%=gsSongID%>)<%=gsDemoText%>

Song ID:                 <%=rs("ID")%>
Song Title:             ">
Alternate Song Title 1: ">
Alternate Song Title 2: ">
Description:            ">
Key:                    ">
Page #-book 1:          "> Book 1:
Page #-book 2:          "> Book 2:
Page #-book 3:          "> Book 3:

Lyrics:

 
<% rs.Close; cn.Close; } // EditSong function EditSongs() { var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); cn.Open(gsConn); rs.Open("SELECT ID, SongTitle" + " FROM Songs" + " ORDER BY SongTitle", cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic} %> Worship DB Interface - <%=EndTitleText()%>

Edit Songs<%=gsDemoText%>

<% } // EditSongs function EndTitleText() { // This function creates the text for the end of the title tag. // If the user is an admin, it will display the name, followed by // admin. Example: "Schmoe, Joe (admin)". If the user is not an // admin, just the name, e.g., "Schmoe, Joe". If the user is a // guest, just "(guest)". var sTextString = ""; if(gsUserType == "Guest") sTextString = "(guest)"; else if(gsUserType == "Admin") sTextString = gsLastName + ", " + gsFirstName + " (admin)"; else sTextString = gsLastName + ", " + gsFirstName; sTextString += gsDemoText; return sTextString; } // EndTitleText function InvalidIDPassword() { %> Worship DB Interface - Invalid ID and/or password<%=gsDemoText%>
Invalid ID and/or password; please try again.

<% } // InvalidIDPassword function LeadingTrailingSpaces(poField, piTotalSpaces) { // This function figures out how many spaces are needed // to put in front of or after psField, so that between the // characters of psField, and the spaces, the total // number of characters will add up to piTotalSpaces. // NOTE: The "spaces" are HTML spaces. One HTML space consists // of the characters " " (not counting the quotation marks). var sOutput = ""; var x = piTotalSpaces - String(poField).length; while(x > 0) { //Alert("Gets here 1; x = " + x); sOutput += " "; x--; } return sOutput; } // LeadingTrailingSpaces function ListSongUsage() { %> Worship DB Interface - <%=EndTitleText()%>

List Song Usage<%=gsDemoText%>

<% } // ListSongUsage function Literal(psInput) { // This function receives a string, and outputs // the same string, except it has single quotes // added to both ends, and also doubles any // single quotes in the text, to make it clear // they are single quote characters, and not // delimiters. Example: "can't" becomes "'can''t'". // It also does the same thing to "irregular" apostrophes // from Word, converting them to "normal" apostrophes. var sOutput = "'"; var x; for (x = 0; x <= psInput.length - 1; x++) switch(psInput.substr(x, 1)) { case "'": // "normal" apostrophe case "’": // "irregular" apostrophe from Word sOutput += "''"; break; default: sOutput += psInput.substr(x, 1); break; } sOutput += "'"; return sOutput; } // Literal function LogIn() { %> Worship DB Interface<%=gsDemoText%>

Worship DB Interface<%=gsDemoText%>

<% if(gsDemo == "Yes") { %> Normal login: ID=normaluser, PW=normaluser
Admin login: ID=adminuser, PW=adminuser

(The names are ficticious, except for Don Milnor, creator of this application.)

<% } %>

 ID:      
 Password:

 

 
<% if(gsDemo != "Yes") { %> Click here for the demo version, test data. <% } else { %> Click here for the production version, real data. <% } %>
<% } // LogIn function MainMenu() { %> Worship DB Interface - <%=EndTitleText()%>

Main Menu<%=gsDemoText%>

>
>
<% } // MainMenu function MatchingPersonID(psUserName) { // This function receives a username, and returns // the matching person ID. var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); var sPersonID; cn.Open(gsConn); rs.Open("SELECT PersonID" + " FROM Users" + " WHERE UserName = " + Literal(psUserName), cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic} rs.MoveFirst; sPersonID = "" + rs("PersonID"); rs.Close; cn.Close; return sPersonID; } // MatchingPersonID function NextAvailableIDNumber(psTableName) { // DO NOT USE THIS WITH TABLE "Users"!! // This function receives a table name, and returns the next // available ID number which should be used. I don't like the way the // default Access AutoNumber process leaves holes in the numbering // if something is removed; this will fill them in. var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); var sPersonID; var bAvailableNumberFound; var iNextIDNumber; cn.Open(gsConn); rs.Open("SELECT ID FROM " + psTableName, cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic} rs.MoveFirst; iNextIDNumber = 1; // if no records, it will stay at 1, else code below if(!rs.BOF || !rs.EOF) // find first hole, if any, or tack to end { bAvailableNumberFound = false; rs.MoveFirst; while(!rs.EOF && !bAvailableNumberFound) { if (rs("ID") > iNextIDNumber) // found a hole bAvailableNumberFound = true; else { iNextIDNumber++; rs.MoveNext; } } } rs.Close; return iNextIDNumber; } // NextAvailableIDNumber function RecordSelected(piID, piCurrentID) { // This function reads in piID (the ID we're looking for), // and piCurrentID (the current ID we're on as we're looping // through them all). If they're the same, this function // will output " Selected". Otherwise, it will output "". // (an empty string). This will determine whether or not the // current record is selected in the HTML world. var sReturnText; if(String(piID) == String(piCurrentID)) sReturnText = " Selected"; else sReturnText = ""; return sReturnText; } // RecordSelected function SongbookNameOfID(piID) { // This function returns the songbook name // matching the ID entered. var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); var sSongbookName; cn.Open(gsConn); rs.Open("SELECT BookName" + " FROM Songbooks" + " WHERE ID = " + piID, cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic rs.MoveFirst; sSongbookName = "" + rs("BookName"); rs.Close; cn.Close; return sSongbookName; } // SongbookNameOfID function SongbookPart1() { var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); cn.Open(gsConn); rs.Open("SELECT ID, BookName" + " FROM Songbooks" + " ORDER BY ID", cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic} %> Worship DB Interface - <%=EndTitleText()%>

Songbook Maintenance<%=gsDemoText%>

Existing songbooks:

Select a songbook action:


<% } // SongbookPart1 function SongbookPart2() { // First, check data validataion; they need to // have chosen Add, Delete or Edit. If they chosen // Delete or Edit, they need to have chosen // which existing record they want to delete or // edit. var sErrorMessage; if(gsSongbookMaintType == "undefined") sErrorMessage = "Please choose Add, Delete or Edit." else if(gsSongbookMaintType == "delete" && gsSongbookID == "") sErrorMessage = "Please choose a songbook to delete." else if(gsSongbookMaintType == "edit" && gsSongbookID == "") sErrorMessage = "Please choose a songbook to edit." else sErrorMessage = ""; if(sErrorMessage != "") { %> Worship DB Interface - <%=EndTitleText()%>

<%=sErrorMessage%><%=gsDemoText%>

<% return; } // If we get here, no issues with the last screen; the user chose // Add, Delete or Edit, and if they didn't choose Add, they chose // which existing record to delete or edit. Now either have user // add/edit information for Add or Edit, or confirm Delete. switch(gsSongbookMaintType) { case "add": { gsSongbookID = NextAvailableIDNumber("Songbooks"); %> Worship DB Interface - <%=EndTitleText()%>

Add Songbook<%=gsDemoText%>

ID: <%=gsSongbookID%>
Book Name:
    Notes:

<% break; } // add case "delete": { %> Worship DB Interface - <%=EndTitleText()%>

Delete Songbook<%=gsDemoText%>

Are you SURE you want to delete this songbook?

<%=SongbookNameOfID(gsSongbookID)%>

<% break; } // delete case "edit": { var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); cn.Open(gsConn); rs.Open("SELECT BookName, Notes" + " FROM Songbooks" + " WHERE ID = " + gsSongbookID, cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic rs.MoveFirst; %> Worship DB Interface - <%=EndTitleText()%>

Edit Songbook<%=gsDemoText%>

ID: <%=gsSongbookID%>
Book Name: ">
    Notes: ">

<% break; } // edit } // switch } // SongbookPart2 function SongbookPart3() { switch(gsSongbookMaintType) { case "add": { if(gsBookName == "") { %> Worship DB Interface - <%=EndTitleText()%>

Songbook name required. Please correct this.<%=gsDemoText%>

<% return; } // book name empty // if we get this far, go ahead and save var cn = new ActiveXObject("ADODB.Connection"); cn.Open(gsConn); cn.Execute("INSERT INTO Songbooks VALUES (" + gsSongbookID + ", " + Literal(gsBookName) + ", " + Literal(gsNotes) + ")"); cn.Close; %> Worship DB Interface - <%=EndTitleText()%>

Songbook added.<%=gsDemoText%>

<% break; } // add case "delete": { var cn = new ActiveXObject("ADODB.Connection"); cn.Open(gsConn); cn.Execute("DELETE FROM Songbooks" + " WHERE ID = " + gsSongbookID); cn.Close; %> Worship DB Interface - <%=EndTitleText()%>

Songbook deleted.<%=gsDemoText%>

<% break; } // delete case "edit": { if(gsBookName == "") { %> Worship DB Interface - <%=EndTitleText()%>

Songbook name required. Please correct this.<%=gsDemoText%>

<% return; } // book name empty // if we get this far, go ahead and save var cn = new ActiveXObject("ADODB.Connection"); cn.Open(gsConn); cn.Execute("UPDATE Songbooks SET" + " BookName = " + Literal(gsBookName) + ", Notes = " + Literal(gsNotes) + " WHERE ID = " + gsSongbookID); cn.Close; %> Worship DB Interface - <%=EndTitleText()%>

Songbook updated.<%=gsDemoText%>

<% break; } // edit } // switch } // SongbookPart3 function SongTitleOfID(piID) { // This function returns the song title matching // the ID entered. var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); var sSongTitle; cn.Open(gsConn); rs.Open("SELECT SongTitle" + " FROM Songs" + " WHERE ID = " + piID, cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic rs.MoveFirst; sSongTitle = "" + rs("SongTitle"); rs.Close; cn.Close; return sSongTitle; } // SongTitleOfID function ThisFileName() { // This function retrieves this file name, extracting it // from Request.ServerVariables("URL"). It's everything // to the right of the last forward slash ("/"). // This file calls itself, and if I ever change the file name, // it will still work, without having to change code in the file, // because of the use of this function. // NOTE THE EMPTY STRING PUT IN FRONT OF THE SERVER VARIABLE BELOW. var sInFilePath = "" + Request.ServerVariables("URL"); var sOutFileName = sInFilePath.substr(sInFilePath.lastIndexOf("/") + 1); return sOutFileName; } // ThisFileName function UserRecordPart1() { var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); cn.Open(gsConn); rs.Open("SELECT UserName" + " FROM Users", cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic %> Worship DB Interface - <%=EndTitleText()%>

User Record Maintenance<%=gsDemoText%>

Existing user records:

Select a user record action:


<% rs.Close; cn.Close; } // UserRecordPart1 function UserRecordPart2() { // First, check data validataion; they need to // have chosen Add, Delete or Edit. If they chosen // Delete or Edit, they need to have chosen // which existing record they want to delete or // edit. var sErrorMessage; if(gsUserRecMaintType == "undefined") sErrorMessage = "Please choose Add, Delete or Edit." else if(gsUserRecMaintType == "delete" && gsEditUserName == "") sErrorMessage = "Please choose a user record to delete." else if(gsUserRecMaintType == "edit" && gsEditUserName == "") sErrorMessage = "Please choose a user record to edit." else sErrorMessage = ""; if(sErrorMessage != "") { %> Worship DB Interface - <%=EndTitleText()%>

<%=sErrorMessage%><%=gsDemoText%>

<% return; } // If we get here, no issues with the last screen; the user chose // Add, Delete or Edit, and if they didn't choose Add, they chose // which existing record to delete or edit. Now either have user // add/edit information for Add or Edit, or confirm Delete. switch(gsUserRecMaintType) { case "add": { %> Worship DB Interface - <%=EndTitleText()%>

Add User Record<%=gsDemoText%>

Person Record (choose one):
  ID  First Name                                           Last Name                              Current Northland

User ID:          
Password:          Display Saved Password
Admin:

 
<% break; } // add case "delete": { %> Worship DB Interface - <%=EndTitleText()%>

Delete User Record<%=gsDemoText%>

Are you SURE you want to delete this user record?

<%=gsEditUserName%>

<% break; } // delete case "edit": { %> Worship DB Interface - <%=EndTitleText()%>

Edit User Record<%=gsDemoText%>

Person Record (choose one):
  ID  First Name                                           Last Name                              Current Northland

User ID:           ">
Password:          "> Display Saved Password
Admin: >
">

 
<% rs.Close; cn.Close; // begin added lines break; } // edit } // switch // end added lines } // UserRecordPart2 function UserRecordPart3() { switch(gsUserRecMaintType) { case "add": { var cn = new ActiveXObject("ADODB.Connection"); cn.Open(gsConn); cn.Execute("INSERT INTO Users VALUES (" + Literal(gsEditUserName) + ", " + Literal(gsEditPassword) + ", " + gsEditPersonID + ", " + gbEditAdmin + ")"); cn.Close; %> Worship DB Interface - <%=EndTitleText()%>

User Record Added<%=gsDemoText%>

<% break; } // add case "delete": { var cn = new ActiveXObject("ADODB.Connection"); cn.Open(gsConn); cn.Execute("DELETE FROM Users" + " WHERE UserName = " + Literal(gsEditUserName)); cn.Close; %> Worship DB Interface - <%=EndTitleText()%>

User Record Deleted<%=gsDemoText%>

<% break; } // delete case "edit": { var cn = new ActiveXObject("ADODB.Connection"); cn.Open(gsConn); cn.Execute("UPDATE Users SET UserName = " + Literal(gsEditUserName) + ", UserPW = " + Literal(gsEditPassword) + ", PersonID = " + gsEditPersonID + ", Admin = " + gbEditAdmin + " WHERE UserName = " + Literal(gsEditOriginalID)); cn.Close; %> Worship DB Interface - <%=EndTitleText()%>

User Record Updated<%=gsDemoText%>

<% break; } // edit } } // UserRecordPart3 function WorshipServiceByDate() { var cn = new ActiveXObject("ADODB.Connection"); var rs = new ActiveXObject("ADODB.Recordset"); cn.Open(gsConn); rs.Open("SELECT DISTINCT Format(ActivityDate, 'yyyy-mm-dd') AS ActivityDateYYYYMMDD" + " FROM WorshipActivityInstances" + " ORDER BY Format(ActivityDate, 'yyyy-mm-dd') DESC", cn, 2, // ADODB.CursorTypeEnum.adOpenDynamic 3); // ADODB.LockTypeEnum.adLockOptimistic %> Worship DB Interface - <%=EndTitleText()%>

Worship Services by Date<%=gsDemoText%>

<% } // WorshipServiceByDate %>