<% '------ Class oLocking ------ Class oLocking Public lockTableName Public TableObj Public ConfirmTime Public UnlockTime Public ConfirmAdmin Public ConfirmUser Public LockAdmin Public LockUser Public UserID Public Function init_oLocking() DoAssignmentByRef init_oLocking,method_oLocking_oLocking(me) End Function Public Function LockRecord_p2(ByVal strtable,ByVal keys) DoAssignmentByRef LockRecord_p2,method_oLocking_LockRecord(me,strtable,keys) End Function Public Function UnlockRecord_p3(ByVal strtable,ByVal keys,ByVal sid) DoAssignmentByRef UnlockRecord_p3,method_oLocking_UnlockRecord(me,strtable,keys,sid) End Function Public Function ConfirmLock_p3(ByVal strtable,ByVal keys,ByRef message) DoAssignmentByRef ConfirmLock_p3,method_oLocking_ConfirmLock(me,strtable,keys,message) End Function Public Function GetLockInfo_p4(ByVal strtable,ByVal keys,ByVal links,ByVal pageid) DoAssignmentByRef GetLockInfo_p4,method_oLocking_GetLockInfo(me,strtable,keys,links,pageid) End Function Public Function UnlockAdmin_p3(ByVal strtable,ByVal keys,ByVal startEdit) DoAssignmentByRef UnlockAdmin_p3,method_oLocking_UnlockAdmin(me,strtable,keys,startEdit) End Function ' serialize stuff Public Function ASPserialize dim out set out=CreateDictionary() setArrElement out,"lockTableName", lockTableName setArrElement out,"TableObj", TableObj setArrElement out,"ConfirmTime", ConfirmTime setArrElement out,"UnlockTime", UnlockTime setArrElement out,"ConfirmAdmin", ConfirmAdmin setArrElement out,"ConfirmUser", ConfirmUser setArrElement out,"LockAdmin", LockAdmin setArrElement out,"LockUser", LockUser setArrElement out,"UserID", UserID set ASPserialize = out End Function Public Sub ASPunserialize(dict) DoAssignment lockTableName, dict("lockTableName") DoAssignment TableObj, dict("TableObj") DoAssignment ConfirmTime, dict("ConfirmTime") DoAssignment UnlockTime, dict("UnlockTime") DoAssignment ConfirmAdmin, dict("ConfirmAdmin") DoAssignment ConfirmUser, dict("ConfirmUser") DoAssignment LockAdmin, dict("LockAdmin") DoAssignment LockUser, dict("LockUser") DoAssignment UserID, dict("UserID") End Sub ' end serialize End Class ' oLocking implementation Function method_oLocking_oLocking(byref this_object) this_object.lockTableName = "" this_object.ConfirmTime = 250 this_object.UnlockTime = 300 Dim var_SESSION this_object.ConfirmAdmin = "Administrator %s aborted your edit session" this_object.ConfirmUser = "Your edit session timed out" this_object.LockAdmin = "Record is edited by %s during %s minutes" this_object.LockUser = "Record is edited by another user" doClassAssignmentByRef this_object,"TableObj",dal.Table(this_object.lockTableName) if not IsEmpty(Session("UserID")) and not bValue(isnull(Session("UserID"))) then doClassAssignment this_object,"UserID",Session("UserID") else this_object.UserID = "Guest" end if End Function Function method_oLocking_LockRecord(byref this_object,ByVal strtable,ByVal keys) Dim skeys,val,sdate,arrDelete,rstmp,data skeys = "" GetCollectionBounds keys,i_locking_loopIdx2,i_locking_loopMax2 do while i_locking_loopIdx2<=i_locking_loopMax2 ind = GetCollectionKey(keys,i_locking_loopIdx2) doAssignment val,ArrayElement(keys,ind) if bValue(asp_strlen(skeys)) then skeys = CSmartStr(skeys) & "&" end if skeys = CSmartStr(skeys) & CSmartStr(asp_rawurlencode(val)) i_locking_loopIdx2=i_locking_loopIdx2+1 loop doAssignmentByRef sdate,now() doClassAssignment this_object.TableObj,"startdatetime",sdate doClassAssignment this_object.TableObj,"confirmdatetime",sdate doClassAssignment this_object.TableObj,"sessionid",session_id() doClassAssignment this_object.TableObj,"table",strtable doClassAssignment this_object.TableObj,"keys",skeys doClassAssignment this_object.TableObj,"userid",this_object.UserID this_object.TableObj.action = 1 this_object.TableObj.Add Set arrDelete = (CreateDictionary()) doAssignmentByRef rstmp,this_object.TableObj.Query_p2(((((((((CSmartStr(AddFieldWrappers("table")) & "='") & CSmartStr(db_addslashes(strtable))) & "' and ") & CSmartStr(AddFieldWrappers("keys"))) & "='") & CSmartStr(db_addslashes(skeys))) & "' and ") & CSmartStr(AddFieldWrappers("action"))) & "=1",CSmartStr(AddFieldWrappers("id")) & " asc") do while bValue(doAssignmentByRef(data,db_fetch_array(rstmp))) if IsLess(this_object.UnlockTime,secondsPassedFrom(ArrayElement(data,"confirmdatetime"))) then setArrElement arrDelete,asp_count(arrDelete),ArrayElement(data,"id") else GetCollectionBounds arrDelete,i_locking_loopIdx4,i_locking_loopMax4 do while i_locking_loopIdx4<=i_locking_loopMax4 ind = GetCollectionKey(arrDelete,i_locking_loopIdx4) doAssignment val,ArrayElement(arrDelete,ind) doClassAssignment this_object.TableObj,"id",val this_object.TableObj.Delete i_locking_loopIdx4=i_locking_loopIdx4+1 loop if IsEqual(ArrayElement(data,"sessionid"),session_id()) then method_oLocking_LockRecord = true Exit Function else doClassAssignment this_object.TableObj,"sessionid",session_id() this_object.TableObj.action = 1 doClassAssignment this_object.TableObj,"table",strtable doClassAssignment this_object.TableObj,"keys",skeys this_object.TableObj.Delete method_oLocking_LockRecord = false Exit Function end if end if loop method_oLocking_LockRecord = false Exit Function End Function Function method_oLocking_UnlockRecord(byref this_object,ByVal strtable,ByVal keys,ByVal sid) Dim skeys,val if IsEqual(sid,"") then doAssignmentByRef sid,session_id() end if skeys = "" GetCollectionBounds keys,i_locking_loopIdx5,i_locking_loopMax5 do while i_locking_loopIdx5<=i_locking_loopMax5 ind = GetCollectionKey(keys,i_locking_loopIdx5) doAssignment val,ArrayElement(keys,ind) if bValue(asp_strlen(skeys)) then skeys = CSmartStr(skeys) & "&" end if skeys = CSmartStr(skeys) & CSmartStr(asp_rawurlencode(val)) i_locking_loopIdx5=i_locking_loopIdx5+1 loop doClassAssignment this_object.TableObj,"table",strtable doClassAssignment this_object.TableObj,"keys",skeys doClassAssignment this_object.TableObj,"sessionid",sid this_object.TableObj.action = 1 this_object.TableObj.Delete End Function Function method_oLocking_ConfirmLock(byref this_object,ByVal strtable,ByVal keys,ByRef message) Dim skeys,val,sdate,rstmp,myfound,newid,oldid,newdate,olddate,otherfound,tempfound,data,this skeys = "" GetCollectionBounds keys,i_locking_loopIdx6,i_locking_loopMax6 do while i_locking_loopIdx6<=i_locking_loopMax6 ind = GetCollectionKey(keys,i_locking_loopIdx6) doAssignment val,ArrayElement(keys,ind) if bValue(asp_strlen(skeys)) then skeys = CSmartStr(skeys) & "&" end if skeys = CSmartStr(skeys) & CSmartStr(asp_rawurlencode(val)) i_locking_loopIdx6=i_locking_loopIdx6+1 loop doAssignmentByRef sdate,now() doClassAssignment this_object.TableObj,"startdatetime",sdate doClassAssignment this_object.TableObj,"confirmdatetime",sdate doClassAssignment this_object.TableObj,"sessionid",session_id() doClassAssignment this_object.TableObj,"table",strtable doClassAssignment this_object.TableObj,"keys",skeys doClassAssignment this_object.TableObj,"userid",this_object.UserID this_object.TableObj.action = 1 this_object.TableObj.Add doAssignmentByRef rstmp,this_object.TableObj.Query_p2(((((((((CSmartStr(AddFieldWrappers("table")) & "='") & CSmartStr(db_addslashes(strtable))) & "' and ") & CSmartStr(AddFieldWrappers("keys"))) & "='") & CSmartStr(db_addslashes(skeys))) & "' and ") & CSmartStr(AddFieldWrappers("action"))) & "=1",CSmartStr(AddFieldWrappers("id")) & " asc") myfound = 0 newid = 0 oldid = 0 newdate = "" olddate = "" otherfound = 0 tempfound = 0 i_locking_exitLoop7=false do while bValue(doAssignmentByRef(data,db_fetch_array(rstmp))) i_locking_exitLoop7=false do if IsEqual(ArrayElement(data,"sessionid"),session_id()) then doAssignment oldid,newid doAssignment newid,ArrayElement(data,"id") doAssignment newdate,ArrayElement(data,"confirmdatetime") doAssignment olddate,newdate myfound = CSmartDbl(myfound)+1 doAssignment otherfound,tempfound tempfound = 0 exit do end if tempfound = CSmartDbl(tempfound)+1 loop while false if i_locking_exitLoop7 then _ exit do loop if IsLess(1,myfound) and not bValue(otherfound) then doClassAssignment this_object.TableObj,"id",oldid doClassAssignment this_object.TableObj,"confirmdatetime",now() this_object.TableObj.Update doClassAssignment this_object.TableObj,"id",newid this_object.TableObj.Delete method_oLocking_ConfirmLock = true Exit Function else if IsLess(1,myfound) and bValue(otherfound) then if IsLess(CSmartDbl(this_object.UnlockTime)-5,secondsPassedFrom(olddate)) then this_object.UnlockRecord_p3 strtable,keys,session_id() doAssignment message,this_object.ConfirmUser method_oLocking_ConfirmLock = false Exit Function else doClassAssignment this_object.TableObj,"id",oldid doClassAssignment this_object.TableObj,"confirmdatetime",now() this_object.TableObj.Update doClassAssignment this_object.TableObj,"id",newid this_object.TableObj.Delete method_oLocking_ConfirmLock = true Exit Function end if else this_object.UnlockRecord_p3 strtable,keys,session_id() doAssignmentByRef rstmp,this_object.TableObj.Query_p2(((((((((((((CSmartStr(AddFieldWrappers("table")) & "='") & CSmartStr(db_addslashes(strtable))) & "' and ") & CSmartStr(AddFieldWrappers("keys"))) & "='") & CSmartStr(db_addslashes(skeys))) & "' and ") & CSmartStr(AddFieldWrappers("sessionid"))) & "<>'") & CSmartStr(session_id())) & "' and ") & CSmartStr(AddFieldWrappers("action"))) & "=2",CSmartStr(AddFieldWrappers("id")) & " asc") if bValue(doAssignmentByRef(data,db_fetch_array(rstmp))) then doAssignmentByRef message,mysprintf(this_object.ConfirmAdmin,CreateDictionary1(Empty,ArrayElement(data,"userid"))) else doAssignment message,this_object.ConfirmUser end if doClassAssignment this_object.TableObj,"table",strtable doClassAssignment this_object.TableObj,"keys",skeys this_object.TableObj.action = 2 this_object.TableObj.Delete method_oLocking_ConfirmLock = false Exit Function end if end if End Function Function method_oLocking_GetLockInfo(byref this_object,ByVal strtable,ByVal keys,ByVal links,ByVal pageid) Dim page,skeys,val,rstmp,data,sdate,arrDateTime,str page = CSmartStr(GetTableURL(strtable)) & "_edit.asp" skeys = "" GetCollectionBounds keys,i_locking_loopIdx8,i_locking_loopMax8 do while i_locking_loopIdx8<=i_locking_loopMax8 ind = GetCollectionKey(keys,i_locking_loopIdx8) doAssignment val,ArrayElement(keys,ind) if bValue(asp_strlen(skeys)) then skeys = CSmartStr(skeys) & "&" end if skeys = CSmartStr(skeys) & CSmartStr(asp_rawurlencode(val)) i_locking_loopIdx8=i_locking_loopIdx8+1 loop doAssignmentByRef rstmp,this_object.TableObj.Query_p2(((((((((((((CSmartStr(AddFieldWrappers("table")) & "='") & CSmartStr(db_addslashes(strtable))) & "' and ") & CSmartStr(AddFieldWrappers("keys"))) & "='") & CSmartStr(db_addslashes(skeys))) & "' and ") & CSmartStr(AddFieldWrappers("sessionid"))) & "<>'") & CSmartStr(session_id())) & "' and ") & CSmartStr(AddFieldWrappers("action"))) & "=1",CSmartStr(AddFieldWrappers("id")) & " asc") if bValue(doAssignmentByRef(data,db_fetch_array(rstmp))) then doAssignmentByRef sdate,now() doAssignmentByRef arrDateTime,db2time(ArrayElement(data,"startdatetime")) doAssignmentByRef str,mysprintf(this_object.LockAdmin,CreateDictionary2(Empty,ArrayElement(data,"userid"),Empty,round(CSmartDbl(secondsPassedFrom(ArrayElement(data,"startdatetime")))/60,2))) if bValue(links) then str = CSmartStr(str) & "     " str = CSmartStr(str) & (((((((((((("") & CSmartStr("Unlock record")) & "") str = CSmartStr(str) & (((((((((((("     ") & CSmartStr("Edit record")) & "") end if doAssignmentByRef method_oLocking_GetLockInfo,str Exit Function else method_oLocking_GetLockInfo = "" Exit Function end if End Function Function method_oLocking_UnlockAdmin(byref this_object,ByVal strtable,ByVal keys,ByVal startEdit) Dim skeys,val,sdate,rstmp skeys = "" GetCollectionBounds keys,i_locking_loopIdx9,i_locking_loopMax9 do while i_locking_loopIdx9<=i_locking_loopMax9 ind = GetCollectionKey(keys,i_locking_loopIdx9) doAssignment val,ArrayElement(keys,ind) if bValue(asp_strlen(skeys)) then skeys = CSmartStr(skeys) & "&" end if skeys = CSmartStr(skeys) & CSmartStr(asp_rawurlencode(val)) i_locking_loopIdx9=i_locking_loopIdx9+1 loop doAssignmentByRef sdate,now() if bValue(startEdit) then doClassAssignment this_object.TableObj,"startdatetime",sdate doClassAssignment this_object.TableObj,"confirmdatetime",sdate doClassAssignment this_object.TableObj,"sessionid",session_id() doClassAssignment this_object.TableObj,"table",strtable doClassAssignment this_object.TableObj,"keys",skeys doClassAssignment this_object.TableObj,"userid",this_object.UserID this_object.TableObj.action = 1 this_object.TableObj.Add end if doAssignmentByRef rstmp,CustomQuery(((((((((((((((("delete from " & CSmartStr(AddTableWrappers(this_object.lockTableName))) & " where ") & CSmartStr(AddFieldWrappers("table"))) & "='") & CSmartStr(db_addslashes(strtable))) & "' and ") & CSmartStr(AddFieldWrappers("keys"))) & "='") & CSmartStr(db_addslashes(skeys))) & "' and ") & CSmartStr(AddFieldWrappers("action"))) & "=1 and ") & CSmartStr(AddFieldWrappers("sessionid"))) & "<>'") & CSmartStr(session_id())) & "' ") doAssignmentByRef rstmp,CustomQuery(((((((("delete from " & CSmartStr(AddTableWrappers(this_object.lockTableName))) & " where ") & CSmartStr(AddFieldWrappers("startdatetime"))) & "<'") & CSmartStr(format_datetime_custom(adddays(db2time(now()),-2),"yyyy-MM-dd HH:mm:ss"))) & "' and ") & CSmartStr(AddFieldWrappers("action"))) & "=2") doClassAssignment this_object.TableObj,"startdatetime",sdate doClassAssignment this_object.TableObj,"confirmdatetime",sdate doClassAssignment this_object.TableObj,"sessionid",session_id() doClassAssignment this_object.TableObj,"table",strtable doClassAssignment this_object.TableObj,"keys",skeys doClassAssignment this_object.TableObj,"userid",this_object.UserID this_object.TableObj.action = 2 this_object.TableObj.Add End Function %>