<% sHEImagePath = "common/htmleditor2/" %> <% ' Generic Table Manager (GTM) : gtm.asp ' ' The GTM is a powerful tool that dramatically reduces the time spent in building CREATE, ' UPDATE, DELETE and RETRIEVE screens for database catalogues. Programmers usually don't ' need to work with this file. They need to edit the tabledef.inc file and GTM will do the ' rest. ' ' I will post a Programmer's Reference document of this tool later. ' ' HISTORY AND BUG REVISION ' ------------------------ ' ' I added support of images to GTM. ' ' 1.1.5 (11/12/2002) ' Carlos A. Madrigal ' ' I added the F_UNIQUE flag to control fields with unique values. This enhancement was needed ' to correct an IMM bug. ' ' If you are using this version of GTM with IMM, please add the following line to your IMM ' tabledef.inc file: ' ' ****** SetFieldFlag "mmSubscribers", "Email", F_UNIQUE, True ' ' 1.1.4 (11/06/2002) ' Carlos A. Madrigal ' ' I fixed a bug on the ONE TO MANY control. That caused that some values were marked by ' default even though there weren't records on the table. I also enhaced the error mechanism. ' ' 1.1.3 (11/06/2002) ' Carlos A. Madrigal ' ' I made modifications to GTM to be able to integrate to SBIIA 1.1. ' ' 1.1.2 (07/20/2002) ' Carlos A. Madrigal ' ' NO HISTORY AVAILABLE ' ' 1.1.1 (05/15/2002) ' Carlos A. Madrigal ' ' NO HISTORY AVAILABLE ' ' 1.1.0 (04/24/2002) ' Julio César Martínez ' ' NO HISTORY AVAILABLE ' ' 1.0.0 (11/27/2001) ' Carlos A. Madrigal ' ' Copyright © 1999-2003 Infolink Aplicaciones, S.A. de C.V. ' All rights reserved ' Derechos de Autor © 1999-2003 Infolink Aplicaciones, S.A. de C.V. ' Derechos Reservados. ' '**Start Encode** ' Constants Const F_FIELD_NAME = "FieldName" Const F_VALUE = "Value" Const F_DESC = "Description" Const F_ISKEY = "IsKey?" Const F_USEQUOTES = "UseQuotes?" Const F_INLIST = "InList?" Const F_UPDATABLE = "CanBeUpdated?" Const F_HIDDEN = "IsHidden?" Const F_SEARCHABLE = "IsSearchable?" Const F_NULLABLE = "Nullable" Const F_TYPE = "Type" Const F_TEXT = "Text" Const F_MEMO = "Memo" Const F_NUMBER = "Number" Const F_SELECT = "Select" Const F_VALUESELECT = "ComboFromValue" Const F_VALUEOPTIONS = "OptionsFromValue" Const F_VALUEEMPTY = "SelectNullOrEmpty" Const F_INT = "Integer" Const F_EMAIL = "EMail" Const F_SIZEW = "SizeW" Const F_SIZEH = "SizeH" Const F_SOURCE = "Source" Const F_NEWMSG = "NewMsg" Const F_EDITMSG = "EditMsg" Const F_FILE = "File" Const F_DATE_MMDDYYYY = "Date" Const F_US_PHONE = "USPhone" Const F_BOOL = "Bool" Const F_FILEPATH = "FilePath" Const F_DATAFORMAT = "DataFormat" Const F_TIME_HHMM = "Time" Const F_AUTOGEN = "AutoGenerated" Const F_HTML_FORMAT ="HTMLFormat" Const F_HINTTEXT = "HintText" Const F_TABLELISTTEXT = "TableListText" Const F_RECORDLISTTEXT = "RecordListText" Const F_RECORDEDITTEXT = "RecordEditText" Const F_RECORDLISTORDER = "RecordListOrder" Const F_FILTERBYLANG = "FilterByLang" Const F_ACTIONSALLOWED = "ActionsAllowed" Const F_SECADD = "A" Const F_SECDEL = "D" Const F_SECEDIT = "E" Const F_SECRETR = "R" Const F_SECPICK = "P" Const F_SECALL = "ADERP" Const F_ONETOMANY = "OneToManyRelationship" Const F_MANYVALUES = "ManyValues" Const F_FIELDLEN = "FieldLength" Const F_UNIQUE = "IsThisValueUnique" Const IMAGE_FOLDER = "../images/" Const IMAGE_FOLDER_TRANSFORMED = "images/" ' User-defined variables Dim sGTMMailTo, sGTMSolution, sGTMFontFace, sGTMFontSize, sGTMFieldBG, sGTMSizeW, sGTMSizeH Dim lGTMRecsPerPage Dim sCmd, sPage, sBTUFieldBG Dim dicTables, dicField, sTable, cmdIsSafeToDelete, sQuery, rsStoringDate Dim sProgrammer, sSolution, sData, bIsImage, sFileLookup, sFieldLookup, sFilePath, bShowSearchForm, sDataFormat Dim sTableName, sFieldName, sFields, dicKeyFields, dicWorkFields, lPage, bBOF, bEOF, lRecIndex, iHTMLCounter Dim bEnableErrors %> <% Sub RaiseGTMError(sFunction, sError) If Err.Number <> 0 Then %>

A GTM error has occured

The following function failed: <%=sFunction%>.

The reported error is:

<%=sError%>

<% SendError Err.Number, Err.Description, sError, "" Response.End End If Err.Clear End Sub Sub AddTable(sTableName, sTableDesc) Dim dicTable, dicFields Set dicTable = Server.CreateObject("Scripting.Dictionary") Set dicFields = Server.CreateObject("Scripting.Dictionary") If Len(Trim(sTableDesc))=0 Then sTableDesc = sTableName dicTables.Add sTableName, dicTable dicTable.Add "Fields", dicFields dicTable.Add F_DESC, sTableDesc dicTable.Add F_ACTIONSALLOWED, F_SECALL End Sub Sub AddField(sTableName, sFieldName, sFieldDesc, bUseQuotes, bIncludeInList) Dim dicField Set dicField = Server.CreateObject("Scripting.Dictionary") If Len(sFieldDesc) > 0 Then dicField.Add GTM_DESCRIPTION_CAPTION, sFieldDesc Else dicField.Add GTM_DESCRIPTION_CAPTION, sFieldName End If dicField.Add F_FIELD_NAME, sFieldName dicField.Add F_VALUE, vbNullString dicField.Add F_ISKEY, False dicField.Add F_UNIQUE, False dicField.Add F_NULLABLE, True dicField.Add F_SEARCHABLE, False dicField.Add F_USEQUOTES, bUseQuotes dicField.Add F_INLIST, bIncludeInList dicField.Add F_VALUEEMPTY, vbNullString dicField.Add F_UPDATABLE, True dicField.Add F_HIDDEN, False dicField.Add F_TYPE, F_TEXT dicField.Add F_SIZEW, sGTMSizeW dicField.Add F_SIZEH, sGTMSizeH dicField.Add F_DATAFORMAT, sDataFormat dicField.Add F_HINTTEXT, vbNullString dicField.Add F_TABLELISTTEXT, vbNullString dicField.Add F_RECORDLISTTEXT, vbNullString dicField.Add F_RECORDEDITTEXT, vbNullString dicField.Add F_FIELDLENGTH, vbNullString dicTables(sTableName)("Fields").Add sFieldName, dicField End Sub Sub SetTableFlag(sTableName, sFlagName, bFlag) Dim dicTable Set dicTable = dicTables(sTableName) If dicTable.Exists(sFlagName) Then dicTable(sFlagName) = bFlag Else dicTable.Add CStr(sFlagName), bFlag End If End Sub Sub SetFieldFlag(sTableName, sFieldName, sFlagName, bFlag) Dim dicField On Error Resume Next Set dicField = dicTables(sTableName)("Fields")(sFieldName) RaiseGTMError "SetFieldFlag", "You didn't add this field first: " & sTableName & "." & sFieldName If dicField.Exists(CStr(sFlagName)) Then dicField(CStr(sFlagName)) = bFlag RaiseGTMError "SetFieldFlag", "Cannot set value to flag: " & sTableName & "." & sFieldName & "!" & sFlagName & " = " & bFlag Else dicField.Add CStr(sFlagName), bFlag RaiseGTMError "SetFieldFlag", "Cannot set value to flag: " & sTableName & "." & sFieldName & "!" & sFlagName & " = " & bFlag End If If sFlagName = F_TYPE Then ' Select Case bFlag Case F_NUMBER, F_INT SetFieldFlag sTableName, sFieldName, F_SIZEW, 8 Case F_DATE_MMDDYYYY SetFieldFlag sTableName, sFieldName, F_SIZEW, 12 SetFieldFlag sTableName, sFieldName, F_HINTTEXT, "(mm/dd/yyyy)" End Select ElseIf sFlagName = F_FILEPATH Then If Len( bFlag )= 0 Then dicField(F_FILEPATH) = "./" End If End If If VarType(bFlag) = vbBoolean Then If sFlagName = F_ISKEY And bFlag Then SetFieldFlag sTableName, sFieldName, F_UPDATABLE, False SetFieldFlag sTableName, sFieldName, F_NULLABLE, False End If End If End Sub Sub PaintField(sFieldName, dicField) Dim sFldType, sOneToManySQL, rsOneToMany, sComboSQL, rsComboSQL, sSelected, sCheckedTrue, sCheckedFalse Dim sRow, asRows, asCols Dim obFSO, obFiles, obFile Dim asSource, sSourceSQL, rsSource, sChecked Dim iCount sFldType = dicField(F_TYPE) If sFldType = F_HTML_FORMAT Then sImageSource = dicField(F_SOURCE) iControlHt = dicField(F_SIZEH) If iControlHt = 0 Or iControlHt = "" Or iControlHt < 100 Then iControlHt = 300 'If Len(sImageSource) = 0 Then %>
<% If bolDisplayNewEditor Then %> <%Else HTMLEdit sFieldName, "htmlContent" & iHTMLCounter, iControlHt End If%>
<% 'Else ' Restore image paths ' Set re = New RegExp ' re.Global = True ' re.Pattern = dicField(F_SOURCE) + "/" ' sFieldValue = re.Replace(dicField(F_VALUE), "../" + dicField(F_SOURCE) + "/") %> <% 'End If Exit Sub End If If sFldType = F_ONETOMANY Then If sCmd = "E" Then asSource = Split(dicField(F_SOURCE), ";") sSourceSQL = "SELECT " + asSource(2) + " FROM " + asSource(0) + " WHERE " + KeyCriteria Set rsSource = conDB.Execute(sSourceSQL) dicField(F_VALUE) = " " While Not rsSource.EOF dicField(F_VALUE) = dicField(F_VALUE) & rsSource(0) & " " rsSource.MoveNext Wend rsSource.Close End If sOneToManySQL = dicField(F_MANYVALUES) Set rsOneToMany = conDB.Execute(sOneToManySQL) Response.Write "" iCount = 0 With rsOneToMany While Not .EOF If iCount Mod 2 = 0 Then Response.Write "" Response.Write "" If iCount Mod 2 = 1 Then Response.Write "" iCount = iCount + 1 Wend End With Response.Write "
" If InStr(1, dicField(F_VALUE), " " & CStr(.Fields(0).Value) & " ") > 0 Then sChecked = " checked" Else sChecked = "" Response.Write " " & AddFontTag(.Fields(1)) & "
" .MoveNext Response.Write "
" Exit Sub End If If sFldType = F_MEMO Then Response.Write "" Exit Sub End If If sFldType = F_SELECT Then sComboSQL = dicField(F_SOURCE) If Len(sComboSQL) > 0 Then Set rsComboSQL = conDB.Execute(sComboSQL) Response.Write vbCrLf + "" + vbCrLf Response.Write "" + vbCrLf Exit Sub End If End If If sFldType = F_VALUESELECT Then asRows = Split(dicField(F_SOURCE), ";") Response.Write "" Exit Sub End If If sFldType = F_VALUEOPTIONS Then asRows = Split(dicField(F_SOURCE), ";") If Len(dicField(F_VALUEEMPTY)) > 0 Then asCols = Split(dicField(F_VALUEEMPTY), ";") Else asCols = Split(";N/A", ";") End If If dicField(F_NULLABLE) Then If CStr(dicField(F_VALUE)) = asCols(0) Then sSelected = " CHECKED" Else sSelected = vbNullString End If Response.Write _ "" _ & AddFontTag(asCols(1)) & "
" + vbCrLf End If For Each sRow In asRows asCols = Split(sRow, ":") If asCols(0) = CStr(dicField(F_VALUE)) Then sSelected = " CHECKED" Else sSelected = vbNullString End If Response.Write "" & _ AddFontTag(asCols(1)) & "
" + vbCrLf Next Exit Sub End If If sFldType = F_BOOL Then If CStr( dicField(F_VALUE) ) = "True" Then sCheckedTrue = " CHECKED" sCheckedFalse = vbNullString Else sCheckedTrue = vbNullString sCheckedFalse = " CHECKED" End If Response.Write " " & AddFontTag("Yes") & vbCrlf _ & " " & AddFontTag("No") Exit Sub End If If sFldType = F_DATE_MMDDYYYY Then dicField(F_VALUE) = GetCorrectDate( dicField(F_VALUE) ) Response.Write "" Exit Sub End If If sFldType = F_TIME_HHMM Then Response.Write "CDate("12:00")," pm"," am") & """>" Exit Sub End If If sFldType = F_FILE Then Set obFSO = Server.CreateObject ( "Scripting.FileSystemObject" ) If Not obFSO.FolderExists( Server.MapPath ( dicField(F_FILEPATH) ) ) Then If Not bEnableErrors Then On Error Resume Next If Not obFSO.CreateFolder ( Server.MapPath( dicField(F_FILEPATH) ) ) Then SendError Err.number, GTM_FOLDER_ERROR , "The Folder '" & dicField(F_FILEPATH) & "'" & GTM_FOLDER_DESCRIPTION, "" Response.End End If On Error GoTo 0 Else Set obFiles = obFSO.GetFolder ( Server.MapPath ( dicField(F_FILEPATH) ) ).Files Response.Write "" & vbCrlf _ & "  " & vbCrlf _ & " " _ & " " Exit Sub End If End If If Len(dicField(F_FIELDLENGTH)) > 0 Then iFieldLength = dicField(F_FIELDLENGTH) Else iFieldLength = dicField(F_SIZEW) End If Response.Write "" End Sub Sub PaintViewField(sFieldName, dicField) Dim sFldType, sComboSQL, rsComboSQL, sSelected, sCheckedTrue, sCheckedFalse Dim sRow, asRows, asCols Dim obFSO, obFiles, obFile sFldType = dicField(F_TYPE) If sFldType = F_HTML_FORMAT Then %>
<%HTMLEdit sFieldName, "htmlContent" & iHTMLCounter, 300%>
<% Exit Sub End If If sFldType = F_SELECT Then sComboSQL = dicField(F_SOURCE) If Len(sComboSQL) > 0 Then Set rsComboSQL = conDB.Execute(sComboSQL) Response.Write vbCrLf + "" + vbCrLf Response.Write "" + vbCrLf Exit Sub End If End If If sFldType = F_VALUESELECT Then asRows = Split(dicField(F_SOURCE), ";") Response.Write "" Exit Sub End If If sFldType = F_VALUEOPTIONS Then asRows = Split(dicField(F_SOURCE), ";") If Len(dicField(F_VALUEEMPTY)) > 0 Then asCols = Split(dicField(F_VALUEEMPTY), ";") Else asCols = Split(";N/A", ";") End If If dicField(F_NULLABLE) Then If CStr(dicField(F_VALUE)) = asCols(0) Then sSelected = " CHECKED" Else sSelected = vbNullString End If Response.Write _ "" _ & AddFontTag(asCols(1)) & "
" + vbCrLf End If For Each sRow In asRows asCols = Split(sRow, ":") If asCols(0) = CStr(dicField(F_VALUE)) Then sSelected = " CHECKED" Else sSelected = vbNullString End If Response.Write "" & _ AddFontTag(asCols(1)) & "
" + vbCrLf Next Exit Sub End If If sFldType = F_BOOL Then If CStr( dicField(F_VALUE) ) = "True" Then sCheckedTrue = " CHECKED" sCheckedFalse = vbNullString Else sCheckedTrue = vbNullString sCheckedFalse = " CHECKED" End If Response.Write "Yes" & vbCrlf _ & "No" Exit Sub End If Response.Write "
" & AddFontTag(dicField(F_VALUE)) & "
" End Sub Sub PrintCurrentFields( dicFields ) Dim sFieldName For Each sFieldName In dicFields Response.Write "" & AddFontTag(dicFields(sFieldName)(F_DESC)) & "" Next End Sub Sub SearchData( dicFields ) Dim sKeyword, asKeywords, sSearchCriteria, rsSearch, sAlign, sFieldName, bDoSearch, sFileLookup sSearchCriteria = Request( "txtSearch" ) bDoSearch = False 'Build SQL for query sSQL = "" _ + "SELECT * " _ + "FROM [" + sTable + "] WHERE ( " asKeywords = Split(sSearchCriteria, " ") For Each sFieldName In dicFields If dicTables( sTable )( "Fields" )( sFieldName )( F_SEARCHABLE ) Then bDoSearch = True End If Next If Not bDoSearch Then SendError Err.Number, GTM_NO_SEARCH_FIELDS_SPECIFIED, GTM_NO_SEARCH_FIELDS_MESSAGE, "" Exit Sub Else For Each sKeyword In asKeywords sKeyword = Trim(sKeyword) If Len(sKeyword) > 0 Then For Each sFieldName In dicTables( sTable )( "Fields" ) If dicTables( sTable )( "Fields" )( sFieldName )( F_SEARCHABLE ) Then Select Case dicTables( sTable )( "Fields" )( sFieldName )(F_TYPE) Case F_TEXT, F_FILE, F_EMAIL, F_US_PHONE sSQL = sSQL + "(" + sFieldName +" LIKE '%" + sKeyword + "%') OR " Case F_DATE_MMDDYYYY If InStr( sKeyword , "/" ) Then If IsDate( sKeyword ) Then sSQL = sSQL + "(" + sFieldName +" LIKE #" + sKeyword + "#) OR " End If End If Case F_NUMBER, F_BOOL, F_INT sSQL = sSQL + "(" + sFieldName +" =" + sKeyword + ") OR " End Select End If Next Else Response.Write "" + AddFontTag(GTM_HTML_NO_RECS_FOUND) + "" & vbCrLf End If Next End If sSQL = Left(sSQL, Len(sSQL)-3) + " ) " If Len(dicTables(sTable)(F_RECORDLISTORDER)) > 0 Then sSQL = sSQL + " ORDER BY " + dicTables(sTable)(F_RECORDLISTORDER) End If Set rsSearch = Server.CreateObject ( "ADODB.Recordset" ) rsSearch.ActiveConnection = conDB If Not bEnableErrors Then On Error Resume Next With rsSearch .Open sSQL, , 2,3, &H001 If .BOF And .EOF Then Response.Write "" + AddFontTag(GTM_HTML_NO_RECS_FOUND) + "" & vbCrLf Else Response.Write "" + vbCrLf PrintCurrentFields( dicFields ) Response.Write "" & vbCrlf _ & "" & vbCrlf While Not .EOF For Each sFieldName In dicFields If dicTables( sTable )( "Fields" )( sFieldName )(F_TYPE) = F_FILE Then sFieldLookup = sFieldName sFileLookup = .Fields (sFieldName) End If Response.Write "" & AddFontTag(.Fields (sFieldName)) & "" & vbCrlf Next Response.Write "" & _ AddFontTag( " " + _ "") + _ "" + vbCrLf + _ " " + vbCrlf .MoveNext Wend End If End With On Error Goto 0 End Sub Function GetCorrectDate(sDate) Dim sDateSeparator, sYear, sCentury If Len( sDate ) > 0 Then If InStr( sDate, "/" ) Then sDateSeparator = "/" Else sDateSeparator = "-" End If sYear = Mid( sDate, InStrRev( sDate, sDateSeparator) + 1 ) If Len( sYear ) = 2 Then If CInt( sYear ) > 69 Then sCentury = "19" Else sCentury = "20" End If sDate = Left( sDate, InStrRev( sDate, sDateSeparator) ) + sCentury + sYear ElseIf Len( sYear ) = 1 Then If CInt( sYear ) > 69 Then sCentury = "190" Else sCentury = "200" End If sDate = Left( sDate, InStrRev( sDate, sDateSeparator) ) + sCentury + sYear End If Else sDate = Date End If GetCorrectDate = CDate( sDate ) End Function Function KeyURL(DataSource) Dim sFieldName, sKeyValue, sKeyURL If DataSource.BOF And DataSource.EOF Then Exit Function For Each sFieldName In dicKeyFields If Not IsNull(DataSource(sFieldName)) Then sKeyValue = DataSource(sFieldName) Else sKeyValue = vbNullString End If sKeyURL = sKeyURL & Server.URLEncode("K_" + sFieldName) & "=" & Server.URLEncode(sKeyValue) & "&" Next If Len(sKeyURL) > 1 Then sKeyURL = Left(sKeyURL, Len(sKeyURL)-1) KeyURL = sKeyURL End Function Function KeyCriteria Dim sFieldName, sKeyCriteria, dicField For Each sFieldName In dicKeyFields Set dicField = dicKeyFields(sFieldName) sKeyCriteria = sKeyCriteria + SQLCriteria(sFieldName, Request("K_" + sFieldName), dicField(F_USEQUOTES), "=") + " AND " Next If Len(sKeyCriteria) > 5 Then sKeyCriteria = Left(sKeyCriteria, Len(sKeyCriteria)-5) KeyCriteria = sKeyCriteria ' TODO Handle Key when a field it's of Date type. ' You need to verify the DB provider that you are using in order to get a valid date format and redefine the KeyCriteria. End Function Function GetLookupData(sFieldName, sFieldData, dicField) Dim sLookupSQL, rsLookup, lFirstSpace, lFirstComma, sFirstField If dicField(F_TYPE) = F_SELECT Then sLookupSQL = dicField(F_SOURCE) If Len(sLookupSQL) > 0 Then lFirstSpace = InStr(1, sLookupSQL, " ") + 1 lFirstComma = InStr(lFirstSpace, sLookupSQL, ",") If lFirstSpace > 1 And lFirstComma > lFirstSpace Then sFirstField = Mid(sLookupSQL, lFirstSpace, lFirstComma-lFirstSpace) If Len(sFirstField) = 0 Then GetLookupData = "N/A" Exit Function End If Set rsLookup = conDB.Execute(sLookupSQL) With rsLookup If IsNull(sFieldData) Or Len(sFieldData) = 0 Then GetLookupData = "N/A" Else On Error Resume Next .Filter = SQLCriteria(sFirstField, sFieldData, dicField(F_USEQUOTES), "=") If Err.Number = 0 Then If Not (.BOF And .EOF) Then GetLookupData = CStr(.Fields(1)) Else GetLookupData = "N/A" End If Else RaiseGTMError "GetLookupData", "Couldn't set filter.

SQL: " & sLookupSQL & "

Filter: " & SQLCriteria(sFirstField, sFieldData, dicField(F_USEQUOTES), "=") & "


" 'Response.Write "'" & sFieldData & "' Err: " & Err.number & " " & Err.Description & "
" 'Response.Write sLookupSQL & "----" & SQLCriteria(sFirstField, sFieldData, dicField(F_USEQUOTES), "=") & "
" 'Response.Flush End If End If End With Else GetLookupData = sFieldData End If If Len(GetLookupData) = 0 Then GetLookupData = "NULL" End Function Sub PrepareToSearch() Response.Write vbCrlf _ & "" & vbCrlf _ & AddFontTag( langMgr.GetContent("GTM_SEARCH_TITLE", "BackEndMessages", iInterfaceLang) ) & vbCrlf _ & "" & vbCrlf _ & "  " & vbCrlf _ & "" & vbCrlf _ & "" & vbCrlf _ & "" & vbCrlf _ & "" & vbCrlf End Sub Function DeleteOldFile( sPath, sFile ) Dim obFSO Set obFSO = Server.CreateObject ( "Scripting.FileSystemObject" ) If obFSO.FileExists( Server.MapPath ( sPath + sFile ) ) Then obFSO.DeleteFile ( Server.MapPath( sPath + sFile ) ) End If Set obFSO = Nothing End Function ' Initialize variables lPage = Request("page") If Len(lPage) > 0 Then If IsNumeric(lPage) Then lPage = CLng(lPage) Else lPage = 0 End If Else lPage = 0 End If sTable = Request("table") sCmd = UCase(Request("cmd")) sPage = Request.ServerVariables("SCRIPT_NAME") sPage = Mid(sPage, InStrRev(sPage, "/")+1) Set dicTables = Server.CreateObject("Scripting.Dictionary") ' Populate table definition %><% ' This flag when activated, does not execute "On Error Resume Next" statements. ' Useful when errors arise but you have no idea why they appear. To activate the ' flag, pass something in the "err" querystring variable. bEnableErrors = Len(Request("err")) > 0 GTMMain Sub GTMMain() Set rsStoringDate = Server.CreateObject ( "ADODB.Recordset" ) rsStoringDate.ActiveConnection = conDB bShowSearchForm = False ' Do some parsing If Len(sCmd) > 0 Then Set dicWorkFields = Server.CreateObject("Scripting.Dictionary") Set dicKeyFields = Server.CreateObject("Scripting.Dictionary") On Error Resume Next For Each sFieldName In dicTables(sTable)("Fields") Set dicField = dicTables(sTable)("Fields")(sFieldName) RaiseGTMError "GTMMain", "Cannot get reference to field: " & sTable & "." & sFieldName If (sCmd="E" Or dicField(F_INLIST)) And (dicField(F_TYPE) <> F_ONETOMANY) Then sFields = sFields + sFieldName + "," dicWorkFields.Add sFieldName, dicField End If If dicField(F_ISKEY) Then dicKeyFields.Add sFieldName, dicField End If dicField(F_VALUE) = Request(sFieldName) Next If Len(sFields) > 1 Then sFields = Left(sFields, Len(sFields)-1) Set dicField = Nothing End If Select Case sCmd Case "A", "E" ' New or edit forms Dim sNextCmd, sButtonCaption Select Case sCmd Case "A" sNextCmd = "C" sButtonCaption = GTM_CREATE_CAPTION Case "E" sNextCmd = "U" sButtonCaption = GTM_EDIT_CAPTION sSQL = "SELECT " + sFields + " FROM [" + sTable + "] WHERE " + KeyCriteria If Not bEnableErrors Then On Error Resume Next rsData.Open sSQL If Err.Number <> 0 Then SendError Err.Number, Err.Description, "Trying to find a record.", sSQL Exit Sub End If On Error Goto 0 If rsData.BOF And rsData.EOF Then Response.Write GTM_HTML_NO_RECS_FOUND + "
" + sSQL Else For Each sFieldName In dicTables(sTable)("Fields") If dicTables(sTable)("Fields")(sFieldName)(F_TYPE) <> F_ONETOMANY Then If Not IsNull(rsData(sFieldName)) Then dicTables(sTable)("Fields")(sFieldName)(F_VALUE) = _ CStr(rsData(sFieldName)) End If End If Next End If End Select %> <% If bolDisplayNewEditor Then %> <% Else%> <% End if%>
<%For Each sFieldName In dicKeyFields%> <%Next If sCmd = "A" Then If Len(Trim(dicTables(sTable)(F_NEWMSG)))>0 Then Response.Write vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf If Len(Trim(dicTables(sTable)(F_RECORDEDITTEXT))) > 0 Then Response.Write "" _ & "" & vbCrLf _ & "" & vbCrLf _ & "" End If Response.Write "" _ & "" & vbCrLf _ & "
" & vbCrLf _ & dicTables(sTable)(F_NEWMSG) & vbCrLf _ & "
" & vbCrLf _ & "
" & dicTables(sTable)(F_RECORDEDITTEXT) & "
" & vbCrLf _ & "
" & vbCrLf End If ElseIf sCmd = "E" Then If Len(Trim(dicTables(sTable)(F_EDITMSG)))>0 Then Response.Write vbCrLf _ & "" & vbCrLF _ & "" & vbCrLf _ & "" & vbCrLf If Len(Trim(dicTables(sTable)(F_RECORDEDITTEXT))) > 0 Then Response.Write "" _ & "" & vbCrLf _ & "" & vbCrLf _ & "" End If Response.Write "" _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "
" & vbCrLf _ & dicTables(sTable)(F_EDITMSG) & vbCrLf _ & "
" & vbCrLf _ & "
" & dicTables(sTable)(F_RECORDEDITTEXT) & "
" & vbCrLf _ & "
" & vbCrLf End If End If Response.Write "" & vbCrLf iHTMLCounter = 1 ' Required for the F_HTML_FORMAT flag For Each sFieldName In dicTables(sTable)("Fields") Set dicField = dicTables(sTable)("Fields")(sFieldName) If Not dicTables( sTable )( "Fields" )( sFieldName )( F_HIDDEN ) Then If dicField(F_ISKEY) And sCmd = "E" Then Response.Write vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf Else Response.Write vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "
" & vbCrLf _ & AddFontTag(dicField(F_DESC) & " " & dicField(F_HINTTEXT) & "") & vbCrLf _ & "" 'CAMP If dicField(F_UPDATABLE) Then PaintField sFieldName, dicField Else If dicField(F_TYPE) = F_SELECT Then 'CAMP Set rsComboLookup = conDB.Execute(dicField(F_SOURCE)) If dicField(F_USEQUOTES) Then rsComboLookup.Filter = rsComboLookup(0).Name & "='" & dicField(F_VALUE) & "'" Else rsComboLookup.Filter = rsComboLookup(0).Name & "=" & dicField(F_VALUE) End If Response.Write "" + AddFontTag(rsComboLookup(1).Value) + "" Else Response.Write "" + AddFontTag(dicField(F_VALUE)) + "" End If End If Response.Write vbCrLf _ & "
" & vbCrLf _ & AddFontTag(dicField(F_DESC) & " " & dicField(F_HINTTEXT) & "") & vbCrLf _ & "" PaintField sFieldName, dicField End If End If iHTMLCounter = iHTMLCounter + 1 Next %>
<% If Len(Trim(dicTables(sTable)(F_NEWMSG)))>0 Or Len(Trim(dicTables(sTable)(F_EDITMSG)))>0 Then Response.Write vbCrLf _ & "
" End If %> <% Case "V" ' View record sSQL = "SELECT * FROM [" + sTable + "] WHERE " + KeyCriteria If Not bEnableErrors Then On Error Resume Next rsData.Open sSQL If Err.Number <> 0 Then SendError Err.Number, Err.Description, "Trying to find a record.", sSQL Exit Sub End If On Error Goto 0 If rsData.BOF And rsData.EOF Then Response.Write GTM_HTML_NO_RECS_FOUND + "
" + sSQL Else For Each sFieldName In dicTables(sTable)("Fields") If Not IsNull(rsData(sFieldName)) Then dicTables(sTable)("Fields")(sFieldName)(F_VALUE) = _ CStr(rsData(sFieldName)) End If Next End If sButtonCaption = GTM_CLOSE_CAPTION Response.Write "" & vbCrLf iHTMLCounter = 1 ' Required for the F_HTML_FORMAT flag For Each sFieldName In dicTables(sTable)("Fields") Set dicField = dicTables(sTable)("Fields")(sFieldName) If Not dicTables( sTable )( "Fields" )( sFieldName )( F_HIDDEN ) Then If dicField(F_ISKEY) And sCmd = "E" Then Response.Write vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf Else Response.Write vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "
" & vbCrLf _ & AddFontTag(dicField(F_DESC) & " " & dicField(F_HINTTEXT) & "") & vbCrLf _ & "" 'CAMP If dicField(F_UPDATABLE) Then PaintViewField sFieldName, dicField Else If dicField(F_TYPE) = F_SELECT Then 'CAMP Set rsComboLookup = conDB.Execute(dicField(F_SOURCE)) If dicField(F_USEQUOTES) Then rsComboLookup.Filter = rsComboLookup(0).Name & "='" & dicField(F_VALUE) & "'" Else rsComboLookup.Filter = rsComboLookup(0).Name & "=" & dicField(F_VALUE) End If Response.Write "" + AddFontTag(rsComboLookup(1).Value) + "" Else Response.Write "" + AddFontTag(dicField(F_VALUE)) + "" End If End If Response.Write vbCrLf _ & "
" & vbCrLf _ & AddFontTag(dicField(F_DESC) & " " & dicField(F_HINTTEXT) & "") & vbCrLf _ & "" PaintViewField sFieldName, dicField End If End If iHTMLCounter = iHTMLCounter + 1 Next %>
<% Case "C", "U" ' Update record Dim bHasOneToMany, asOneToManyValues, sOneToManyValue, asOneToManySource, sInsertKeyValue Dim bUniqueFieldError, sOffendingField, sOperation ' Check unique fields bUniqueFieldError = False sOffendingField = "" sOperation = "" For Each sFieldName In dicTables(sTable)("Fields") If dicTables(sTable)("Fields")(sFieldName)(F_UNIQUE) Then ' Check if this value exists sSQL = "SELECT COUNT(" & sFieldName & ") FROM " & sTable & " WHERE " & sFieldName & "=" If dicTables(sTable)("Fields")(sFieldName)(F_USEQUOTES) Then sSQL = sSQL & "'" & Request(sFieldName) & "'" Else sSQL = sSQL & Request(sFieldName) End If iCount = conDB.Execute(sSQL)(0) sOffendingField = sFieldName If sCmd = "C" And iCount > 0 Then bUniqueFieldError = True sOperation = "add" Exit For ElseIf sCmd = "U" And iCount > 1 Then bUniqueFieldError = False sOperation = "update" Exit For End If End If Next If bUniqueFieldError Then %>

Cannot <%=sOperation%> this record

GTM couldn't not <%=sOperation%> this record because the <%=sOffendingField%> contains [<%=Request(sFieldName)%>] and this table cannot have two records with the same value for this field. Please go back and edit this field and try again.

<% Response.End End If ' Initialize variable that signals that at least one one-to-many field was found bHasOneToMany = False If Not bEnableErrors Then On Error Resume Next With rsData .Open sTable, , 2, 3 ' adOpenDynamic, adLockOptimistic If Err.Number <> 0 Then SendError Err.Number, Err.Description, "Trying to create/update a record.", sTable Exit Sub End If If sCmd = "C" Then .AddNew For Each sFieldName In dicKeyFields If Not dicKeyFields(sFieldName)(F_AUTOGEN) Then .Fields(sFieldName) = dicKeyFields(sFieldName)(F_VALUE) 'CAMP End If Next If dicTables(sTable)(F_FILTERBYLANG) Then .Fields("LangID") = iContentLang End If Else .Filter = KeyCriteria End If ' Prepare regular expression to adjust image paths on HTML fields Set re = New RegExp re.IgnoreCase = True re.Multiline = True re.Global = True For Each sFieldName In dicTables(sTable)("Fields") If dicTables(sTable)("Fields")(sFieldName)(F_UPDATABLE) Then ' Detect HTML fields to adjust image paths sFieldValue = Request(sFieldName) If dicTables(sTable)("Fields")(sFieldName)(F_TYPE) = F_HTML_FORMAT Then re.Pattern = "http:[^>]+/" + dicTables(sTable)("Fields")(sFieldName)(F_SOURCE) + "/" sFieldValue = re.Replace(sFieldValue, dicTables(sTable)("Fields")(sFieldName)(F_SOURCE) + "/") re.Pattern = "\.\./" + dicTables(sTable)("Fields")(sFieldName)(F_SOURCE) + "/" sFieldValue = re.Replace(sFieldValue, dicTables(sTable)("Fields")(sFieldName)(F_SOURCE) + "/") re.Pattern = "http[^""]+/admin/content.asp[^#]+#" sPageContent = re.Replace(sPageContent, "#") re.Pattern = "http[^""]+/admin/" sPageContent = re.Replace(sPageContent, "") re.Pattern = sPathToTrimPattern sPageContent = re.Replace(sPageContent, "") re.Pattern = "admin/" sPageContent = re.Replace(sPageContent, "") sPageContent = Replace(sPageContent, IMAGE_FOLDER, IMAGE_FOLDER_TRANSFORMED) End If If Len(sFieldValue) = 0 Then If dicTables(sTable)("Fields")(sFieldName)(F_TYPE) = F_SELECT And _ dicTables(sTable)("Fields")(sFieldName)(F_NULLABLE) And _ Len(dicTables(sTable)("Fields")(sFieldName)(F_VALUEEMPTY)) > 0 Then rsData(sFieldName) = Split(dicTables(sTable)("Fields")(sFieldName)(F_VALUEEMPTY), ";")(0) Else rsData(sFieldName) = Null End If Else rsData(sFieldName) = sFieldValue End If End If If dicTables(sTable)("Fields")(sFieldName)(F_TYPE) = F_ONETOMANY Then bHasOneToMany = True Next .Update ' Get autogenerated values If sCmd = "C" Then For Each sFieldName In dicKeyFields If dicKeyFields(sFieldName)(F_AUTOGEN) Then dicKeyFields(sFieldName)(F_VALUE) = .Fields(sFieldName) End If Next End If For Each sFieldName In dicTables(sTable)("Fields") If dicTables(sTable)("Fields")(sFieldName)(F_UPDATABLE) Then If dicTables(sTable)("Fields")(sFieldName)(F_TYPE) = F_DATE_MMDDYYYY Then If Len(Request(sFieldName)) > 0 Then sSQL = "SELECT * FROM [" + sTable + "] WHERE " + KeyCriteria rsStoringDate.Open sSQL, , 1, 2, 1 If Not (rsStoringDate.BOF And rsStoringDate.EOF) Then rsStoringDate.Fields(dicTables(sTable)("Fields")(sFieldName)(F_FIELD_NAME)) = GetCorrectDate(Request(sFieldName)) rsStoringDate.Update End If Else rsData(sFieldName) = Date End If End If End If Next ' Process one to many relation ships If bHasOneToMany Then For Each sFieldName In dicTables(sTable)("Fields") If dicTables(sTable)("Fields")(sFieldName)(F_TYPE) = F_ONETOMANY Then asOneToManySource = Split(dicTables(sTable)("Fields")(sFieldName)(F_SOURCE), ";") asOneToManyValues = Split(Trim(dicTables(sTable)("Fields")(sFieldName)(F_VALUE)), ",") If sCmd = "U" Then sSQL = "DELETE FROM [" + asOneToManySource(0) + "] WHERE " + KeyCriteria conDB.Execute sSQL End If For Each sOneToManyValue In asOneToManyValues If sCmd = "C" Then sInsertKeyValue = dicKeyFields(asOneToManySource(1))(F_VALUE) Else sInsertKeyValue = Request("K_" + asOneToManySource(1)) End If sOneToManyValue = Trim(sOneToManyValue) sSQL = "INSERT INTO [" + asOneToManySource(0) + "] (" + asOneToManySource(1) + "," + asOneToManySource(2) + ") VALUES (" & sInsertKeyValue & "," & sOneToManyValue & ")" conDB.Execute sSQL Next End If Next End If Err.Clear If Err.number <> 0 Then SendError Err.number, Err.Description, "Trying to create/update a record.", sTable Exit Sub End If End With On Error Goto 0 Response.Redirect sPage + "?cmd=r&table=" + Server.URLEncode(sTable) Case "D" ' Delete ' Build SQL statement sSQL = "DELETE FROM [" + sTable + "] WHERE " + KeyCriteria If Not bEnableErrors Then On Error Resume Next conDB.Execute sSQL If Len( Request( "oldFile" ) ) > 0 Then ' file storage query sQuery = "SELECT " + Request( "field" ) + " FROM [" + sTable + "] WHERE " + Request( "field" ) + "='" + Request( "oldFile" ) + "'" ' Check if another record uses the old file Set cmdIsSafeToDelete = conDB.Execute( sQuery ) If ( cmdIsSafeToDelete.BOF And cmdIsSafeToDelete.EOF ) Then ' Delete previous file DeleteOldFile Request( "Path" ), Request( "oldFile" ) End If End If If Err.Number <> 0 Then SendError Err.Number, Err.Description, "Trying to delete a record.", sSQL Exit Sub End If Response.Redirect sPage + "?cmd=r&table=" + Server.URLEncode(sTable) Case "R", "S" ' Retrieve, Search Dim sAlign %> <% Response.Write vbCrLf _ & "
" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" If Len(dicTables(sTable)(F_RECORDLISTTEXT)) > 0 Then Response.Write "" _ & "" & vbCrLf _ & "" & vbCrLf _ & "" End If For Each sFieldName In dicTables(sTable)("Fields") If dicTables(sTable)("Fields")(sFieldName)(F_SEARCHABLE) Then bShowSearchForm = True End If Next If bShowSearchForm Then PrepareToSearch Response.Write vbCrlf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "
" & vbCrLf _ & "   " & AddFontTag(dicTables(sTable)(F_DESC)) & "   " & vbCrLf _ & "
" & vbCrLf _ & "
" & AddFontTag(dicTables(sTable)(F_RECORDLISTTEXT)) & "
" & vbCrLf _ & "
" & vbCrLf _ & "" + vbCrLf If sCmd = "S" Then SearchData( dicWorkFields ) Else If dicTables(sTable)(F_FILTERBYLANG) Then sLangFilter = " WHERE LangID = " & iContentLang End If ' Retrieve records from database sSQL = "SELECT " + sFields + " FROM [" + sTable + "]" & sLangFilter If Len(dicTables(sTable)(F_RECORDLISTORDER)) > 0 Then sSQL = sSQL + " ORDER BY " + dicTables(sTable)(F_RECORDLISTORDER) End If With rsData On Error Resume Next .Open sSQL If Err.number <> 0 Then SendError Err.number, Err.Description, "Trying to retrieve records.", sTable Exit Sub End If On Error Goto 0 If .BOF And .EOF Then Response.Write "" & vbCrLf Else Response.Write "" + vbCrLf PrintCurrentFields( dicWorkFields ) ' Initialize counters lRecIndex = 0 If lGTMRecsPerPage > 1 Then If lPage > 0 Then .Move CLng(lPage * lGTMRecsPerPage) End If bBOF = (lPage = 0) End If While (Not .EOF And (lRecIndex < lGTMRecsPerPage)) Response.Write "" + vbCrLf For Each sFieldName In dicWorkFields If Not dicWorkFields(sFieldName)(F_USEQUOTES) And Len(dicWorkFields(sFieldName)(F_SOURCE)) = 0 Then sAlign = " ALIGN=""right""" Else sAlign = "" End If If dicTables( sTable )( "Fields" )( sFieldName )(F_TYPE) = F_FILE Then sFieldLookup = sFieldName sFileLookup = .Fields (sFieldName) sFilePath = dicTables( sTable )( "Fields" )( sFieldName )( F_FILEPATH ) End If Response.Write "" Next Response.Write "" + vbCrLf + "" + vbCrlf + "" + vbCrLf .MoveNext lRecIndex = lRecIndex + 1 bEOF = .EOF Wend End If End With End If Response.Write vbCrLF _ & "
" + AddFontTag(GTM_HTML_NO_RECS_FOUND) + "
" & AddFontTag(GetLookupData(sFieldName, rsData(sFieldName), dicWorkFields(sFieldName))) & "" If CheckAction(sTable, F_SECEDIT) Then Response.Write "" _ + " " '+ """ TITLE=""" + GTM_EDIT_RECORD +""">" + AddFontTag(GTM_EDIT_CAPTION) + " | " ElseIf CheckAction(sTable, F_SECRETR) Then Response.Write "" _ + "" + AddFontTag(GTM_VIEW_CAPTION) + " | " End If If CheckAction(sTable, F_SECDEL) Then Response.Write "" _ + "" '+ "TITLE=""" + GTM_DELETE_RECORD + """>" + AddFontTag(GTM_DELETE_CAPTION) + "" End If Response.Write " 
" & vbCrLf _ & "

" + vbCrLf Case Else ' Put list of tables Response.Write vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "" & vbCrLf _ & "
" _ & AddFontTag(GTM_TABLE_CAPTION) & vbCrLf _ & "
" & vbCrLf _ & "" + vbCrLf For Each sTableName In dicTables If dicTables.Count = 1 Then Response.Redirect sPage + "?cmd=r&table=" + Server.URLEncode(sTableName) If CheckAction(sTableName, F_SECRETR) Then Response.Write "" + vbCrLf End If Next Response.Write vbCrLf _ & "
" + AddFontTag("" + dicTables(sTableName)(F_DESC) + "") + "
" & vbCrLf _ & "
" + vbCrLf End Select Response.Write "
" If sCmd <> "" Then Response.Write vbCrLf _ & "
" & vbCrLf _ & "

" ' Show / Hide links when only a table has been specified If dicTables.Count > 1 Then If CheckAction(sTable, F_SECPICK) Then Response.Write vbCrLf _ & AddFontTag("" + GTM_PICK_TABLE_CAPTION + "") End If End If If CheckAction(sTable, F_SECADD) Then Response.Write vbCrLf _ & AddFontTag( " | " & GTM_ADD_RECORD_CAPTION & "" ) End If If sCmd = "A" Or sCmd = "E" Or sCmd = "S" Then Response.Write AddFontTag(" | " + GTM_LIST_RECORDS_CAPTION + "") End If If sCmd="R" Then If Not bBOF Then Response.Write AddFontTag(" | " + GTM_TABLE_PREV + "") End If If Not bEOF Then Response.Write AddFontTag(" | " + GTM_TABLE_NEXT + "") End If End If Response.Write "

" End If End Sub Function CheckAction(sTableName, sActionName) CheckAction = InStr(dicTables(sTableName)(F_ACTIONSALLOWED), sActionName) > 0 End Function Function IIf( condition, valTrue, valFalse ) If ( condition ) Then IIf = valTrue Else IIf = valFalse End If End Function ' Transforms the HTML string into a valid Javascript string. ' sContent Content to be transformed Function HtmlToJSString(sContent) HtmlToJSString = Replace(sContent, vbCr, "") HtmlToJSString = Replace(HtmlToJSString, vbLf, "") HtmlToJSString = Replace(HtmlToJSString, """", "\""") HtmlToJSString = Replace(HtmlToJSString, "'", "\'") End Function %>