|
|
<% option explicit Response.Buffer = TRUE
Dim AuthUser,pos,FileSys,InStream,BugID,Conn,Comm,RS Dim FldArray,i,FldLinks,dTitle,Desc,fCreate,st,wi,c,fSt Dim mx,mxc,fn,fname,ColTot,ibase,inext,ff,fbase,coln,colh,ColNb
Response.Expires = 0
rem get user name AuthUser = Request.ServerVariables("AUTH_USER") pos=instr(1,AuthUser,"\") if pos>0 then AuthUser = mid(AuthUser,pos+1) end if %> <!--#include virtual="/scripts/raid/cache.asp"--> <!--#include virtual="/aspsamp/samples/adovbs.inc"--> <!-- display detailed view of bug
QueryString : bugid=bug# | CREATE for new bug
--> <html> <head>
<style type="text/css"> .act {color:menutext; background:menu; cursor:default} #bug {font-size:8pt} .vis {} .unvis {display:none} .inp {font-size:8pt; height:18; width:70; color:black; background:menu} .inpenab {font-size:8pt; height:18; width:70;} .titl {background:menu} .titlenab {} .bact {height:23; width:24} </style>
<script language="JavaScript">
// // Globals //
var AuthUser = "<%=AuthUser%>"; var updAct = ""; var updDate = ""; var updState = "";
// // CurrentDate() // // returns current date as string using format MM/DD/YY if year < 2000 otherwise MM/DD/YYYY //
function CurrentDate() { var now = new Date(); m = new String(now.getMonth()+1); if ( m.length == 1 ) m = "0"+ m; d = new String(now.getDate()); if ( d.length == 1 ) d = "0"+ d; v = now.getYear(); if ( v < 100 ) y = new String(v); else y = new String( v + 1900 ); return m + "/" + d + "/" + y; }
// // ckdigit() // // returns true if event.keyCode is digit, otherwise false //
function ckdigit() { if ( event.keyCode<48 || event.keyCode>57 ) { return false; } return true; }
// // ckdotdigit() // // returns true if event.keyCode is digit or '.', otherwise false //
function ckdotdigit() { if ( (event.keyCode<48 || event.keyCode>57) && event.keyCode!=46 ) { return false; } return true; }
// // bsetf() // // Update Status, AssignedTo & date & by fields associated to selected operation // // returns nothing //
function bsetf(aState,aVerb,aDate,aBy,aTo) { bug.Status.value = aState; bug.Status.disabled = false; bug.item(aDate).disabled = false; bug.item(aDate).className = "inpenab"; bug.item(aDate).value = CurrentDate(); bug.item(aBy).disabled = false; bug.item(aBy).className = "inpenab"; bug.item(aBy).value = AuthUser; bug.AssignedTo.disabled = false; bug.AssignedTo.className = "inpenab"; bug.AssignedTo.value = aTo; updState = aState; updAct = aBy; updDate = aDate; updVerb = aVerb; }
// // bchange() // // Enabled specified fields, update Changedxxx fields // // returns nothing //
function bchange( flist ) { for ( i = 0 ; i < bug.length ; ++i ) if ( flist == "" || flist.indexOf(","+bug.elements[i].id+",") != -1 ) { bug.elements[i].disabled = false; bug.elements[i].className = "inpenab";
for ( j = 0 ; j < checkfields.length ; ++j ) {
// // if field is checked ( i.e. has an associated list of allowed values ) // then we have to generate an <option> element and select the current value //
if ( checkfields[j] == bug.elements[i].id ) { s = "<select class=\"inpenab\" name=\"" + checkfields[j] + "\" id=\"" + checkfields[j] + "\">"; for ( k = 0 ; k < checks[j].length ; ++k ) { s = s + "<option value=\"" + checks[j][k] + "\"" if ( bug.elements[i].value == checks[j][k] ) s = s + " SELECTED"; s = s + ">" + checks[j][k]; } s = s + "</select>"; bug.elements[i].parentElement.innerHTML = s; break; } } } bug.upd.disabled = false; bug.ChangedDate.value = CurrentDate(); bug.ChangedBy.value = AuthUser; bug.ChangedBy.disabled = false; bug.desc.className = "vis"; }
// // bresolve() // // handle resolve bug action // // returns nothing //
function bresolve() { bchange(",ResolvedDate,ResolvedBy,Resolution,FixedRev,Cause,CodeChange,"); bsetf( "Resolved", "Resolved", "ResolvedDate", "ResolvedBy", bug.OpenedBy.value ); }
// // bactivate() // // handle activate bug action // // returns nothing //
function bactivate() { bchange(",AssignedTo,IssueType,Severity,Priority,Accessibility,ChangedBy,OpenedBy,Source,SourceID,BetaID,HowFound,Lang,LangSup,Component,SubComp,Owner,Processor,NumCPU,Software,Urgency,Regression,ShowStop,SubStatus,CustPri,TrackingNumber,VendorNm,CCList,IsPerf,"); bsetf( "Active", "Activated", "ChangedDate", "ChangedBy", AuthUser ); bug.Status.value = "Active"; bug.Title.disabled = false; bug.Title.className = "titlenab"; }
// // bclose() // // handle close bug action // // returns nothing //
function bclose() { bchange(",Accessibility,BetaID,ClosedDate,ClosedBy,KBArticle,SR,Component,SubComp,Owner,Processor,NumCPU,Software,Urgency,Regression,SubStatus,CustPri,TrackingNumber,VendorNM,CCList,IsPerf,Class"); bsetf( "Closed", "Closed", "ClosedDate", "ClosedBy", "Closed"); bug.AssignedTo.onkeypress = new Function("return false;"); }
// // bassign() // // handle assign to bug action // // returns nothing //
function bassign() { bchange(",AssignedTo,"); updState = "Assigned"; updAct = AuthUser; updDate = CurrentDate(); updVerb = "Assigned"; }
// // doupd() // // update bug in database // // returns nothing //
function doupd() { // // check for mandatory fields //
for ( i = 0 ; i < bug.length ; ++i ) if ( bug.elements[i].disabled == false && bug.elements[i].value == "" && FldForced.indexOf(","+bug.elements[i].id+",") != -1 ) { alert( "The " + bug.elements[i].id + " field is mandatoy" ); return; }
// // update description // the addition to this field is sent to server in the 'desc' field. The server // will concatenate the content of existing description with this field to update // the description field. //
s = "===== " + updVerb + " by " + bug.item(updAct).value + " on " + bug.item(updDate).value + " ; AssignedTo = " + bug.AssignedTo.value if ( updState == "Opened" ) s = s + "; Priority = " + bug.Priority.value; s = s + " =====\r\n"; bug.desc.value = s + bug.desc.value;
document.all.bug.submit(); }
// // dolink() // // display linked info : attachments, files in a new window // // returns nothing //
function dolink( linktype ) { window.open( "link.asp?BugID=" + bug.bugid.value + "&Type=" + linktype ); } </script> <% rem add content of cached file for possible values of checked fields
IncludeItemCache
if Request.QueryString("BugID") = "" then BugID = Session("BugID") else BugID = Request.QueryString("BugID") end if Response.Write "<title>[Bug " & BugID & " - Windows NT Bugs]</title></head>"
Set Conn = Server.CreateObject("ADODB.Connection") Set Comm = Server.CreateObject("ADODB.Command") Set RS = Server.CreateObject("ADODB.Recordset") Conn.Open Session("DSN") Set Comm.ActiveConnection = Conn RS.CursorType = adOpenStatic Set RS.Source = Comm
FldArray = Application("fld" & Application("dbCache")(Session("DBSOURCE")))
Dim fdict Set fdict = CreateObject("Scripting.Dictionary")
rem generates list of mandatory fields
Response.Write "<script language=" & chr(34) & "JavaScript" & chr(34) & "> var FldForced = " & chr(34) mx = UBound(FldArray,2) for i = 0 to mx if FldArray(7,i) < 12 and FldArray(8,i) then Response.Write "," & FldArray(0,i) end if fdict.Add FldArray(0,i), i next Response.Write "," & chr(34) & ";</script>"
rem check for links ( related bugs, file attachments ) associated with this bug Dim LinkType(10)
mx = UBound(LinkType) for i = 0 to mx LinkType(i) = "loff" next
if BugID<>"CREATE" then Comm.CommandText = "Select Type from links where BugID=" & BugID RS.Open if NOT RS.EOF then FldLinks = RS.GetRows() mx = UBound(FldLinks,2) mxc = UBound(LinkType) for i = 0 to mx if FldLinks(0,i) < mxc then LinkType( FldLinks(0,i) ) = "lon" end if next end if RS.Close end if
coln = Array("Status","Opened","Resolved","Closed","Project") colh = Array(200,200,200,200,200) ColNb = Array(8,9,6,4,16) ColTot = ColNb(0)+ColNb(1)+ColNb(2)+ColNb(3)+ColNb(4)
fname = "Status,AssignedTo,IssueType,Severity,Priority,Accessibility,ChangedDate,ChangedBy," fname = fname & "OpenedDate,OpenedBy,OpenedRev,Source,SourceID,BetaID,HowFound,Lang,LangSup," fname = fname & "ResolvedDate,ResolvedBy,Resolution,FixedRev,Cause,CodeChange," fname = fname & "ClosedDate,ClosedBy,KBArticle,SR," fname = fname & "Component,SubComp,Owner,Processor,NumCPU,Software,Urgency,Regression,ShowStop,SubStatus,CustPri,TrackingNumber,VendorNm,CCList,IsPerf,Class,Title,Description" if BugID <> "CREATE" then Comm.CommandText = "Select " & fname & " from bugs where BugID=" & BugID fname = fname & "," Set RS.Source = Comm RS.CursorType = adOpenStatic RS.Open dTitle = RS(ColTot) Desc = Rs(ColTot+1) fCreate = FALSE else fname = fname & "," dTitle = "" Desc = "" fCreate = TRUE end if Response.Write "<body bgcolor=#c0c0c0>" Response.Write "<form id=" & chr(34) & "bug" & chr(34) & " method=POST action=" & chr(34) & "/scripts/raid/upd.asp" & chr(34) & ">" st = "position:absolute; left:10; top:0" Response.Write "<div style=" & chr(34) & st & chr(34) & ">" if fCreate then Response.Write "<input class= " & chr(34) & "titlenab" & chr(34) else Response.Write "<input class= " & chr(34) & "titl" & chr(34) & " disabled" end if Response.Write " id=" & chr(34) & "Title" & chr(34) & " name=" & chr(34) & "Title" & chr(34) & " size=80 value=" & chr(34) & dTitle & chr(34) & "></input>" Response.Write "<input type=hidden name=" & chr(34) & "action" & chr(34) & " id=" & chr(34) & "action" & chr(34) & "></input>" Response.Write "<input type=hidden name=" & chr(34) & "bugid" & chr(34) & " id=" & chr(34) & "bugid" & chr(34) & " value=" & chr(34) & BugID & chr(34) &"></input>" Response.Write "</div>"
rem iterates through columns, access RAID once for each column because rem ADO can't handle all the fields in RAID at once.
wi=154 mxc = UBound(ColNb) ibase = 1 fbase = 0 for c = 0 to mxc
fSt = TRUE
for ff = 1 to colNb(c)
inext = instr(ibase,fname,",")
i = fdict.Item(mid(fname,ibase,inext-ibase))
if true then if fSt then rem position fieldset st = "position:absolute; left:" & FldArray(2,i)*1.12-4 & "; top:" & FldArray(3,i)*2.4-24 & ";width:" & wi Response.Write "<fieldset style=" & chr(34) & st & chr(34) & ">" Response.Write "<legend>" & coln(c) & "</legend><table width=20 cellpading=0 cellspacing=0 nowrap>" fSt = FALSE end if
rem check if field validation function necessary
if FldArray(0,i) = "Status" then fn = " onkeypress=" & chr(34) & "return false;" & chr(34) ElseIf FldArray(7,i) = 2 then rem numeric fields fn = " onkeypress=" & chr(34) & "return ckdigit();" & chr(34) ElseIf FldArray(7,i) = 9 then rem Rev fields fn = " onkeypress=" & chr(34) & "return ckdotdigit();" & chr(34) else fn = "" end if
rem associate title to each field name rem all fields are initialy disabled
if instr(1,FldArray(6,i),chr(34)) then rem Response.Write "<tr><td>" & FldArray(6,i) & "</td>" Response.Write "<tr><td width=95 nowrap" & ">" & FldArray(1,i) & ":</td>" else Response.Write "<tr><td title=" & chr(34) & FldArray(6,i) & chr(34) & " width=95 nowrap" & ">" & FldArray(1,i) & ":</td>" end if
rem display current value
Response.Write "<td><input " & fn & " type=text name=" & chr(34) & FldArray(0,i) & chr(34) & " id=" & chr(34) & FldArray(0,i) & chr(34) & " value=" & chr(34) if fCreate then if FldArray(0,i) = "OpenedRev" then Response.Write Application("cnfg" & Application("dbCache")(Session("DBSOURCE")))(1,0) & "0000" end if Response.Write chr(34) & "disabled class=" & chr(34) & "inp" & chr(34) else Response.Write RS(fbase) & chr(34) & " disabled class=" & chr(34) & "inp" & chr(34) end if Response.Write "></input></td></tr>"
end if
ibase = inext + 1 fbase = fbase + 1
next
Response.Write "</table></fieldset>"
next
if NOT fCreate then Rs.Close end if %>
<div style="position:absolute; top:360"> <button onclick="bactivate()" title="Activate"><img width=16 height=15 src="doact.gif"></button> <button onclick="bresolve()" title="Resolve"><img width=16 height=15 src="dores.gif"></button> <button onclick="bclose()" title="Close"><img width=16 height=15 src="doclo.gif"></button> <button onclick="bassign()" title="Assign"><img width=16 height=15 src="doass.gif"></button> <button id="upd" onclick="doupd()" title="Save bug" disabled><img width=16 height=15 src="doupd.gif"></button> <table style="position:relative; top:-25; left:140"><tbody> <tr> <td><b>Links:</b></td> <td><button onclick="dolink(6)" title="Dependent bug links"><img src="l1.gif"></button></td> <td><button onclick="dolink(0)" title="Duplicate bug links"><img src="l2.gif"></button></td> <td><button onclick="dolink(1)" title="Related bug links"><img src="l3.gif"></button></td> <td><button onclick="dolink(3)" title="Attached files"><img src="l4.gif"></button></td> <td><button onclick="dolink(4)" title="Linked files"><img src="l5.gif"></button></td> </tr> <tr align=center> <td></td> <td><img src="<%=LinkType(6)%>.gif"></td> <td><img src="<%=LinkType(0)%>.gif"></td> <td><img src="<%=LinkType(1)%>.gif"></td> <td><img src="<%=LinkType(3)%>.gif"></td> <td><img src="<%=LinkType(4)%>.gif"></td> </tr> </tbody></table> </div>
<div style="position:absolute; top:395"> <% rem textarea for existing bug description rem we want to prevent modifications to this filed can't disable it rem because this would also disable scroll bar - we just prevent keypress events
if fCreate then Response.Write "<textarea rows=12" else Response.Write "<textarea cols=90 rows=12 onkeypress=" & chr(34) & "return false;" & chr(34) & ">" Response.Write Desc Response.Write "</textarea>" Response.Write "<textarea rows=4 class=" & chr(34) & "unvis" & chr(34) end if %> name="desc" id="desc" cols=90> </textarea> <script FOR=window EVENT=onload() language="JavaScript"> <% if fCreate then Response.Write "bchange(',IssueType,Severity,Priority,OpenedRev,Source,SourceID,HowFound,Lang,LangSup,Accessibility,BetaID,SR,Component,SubComp,Owner,Processor,NumCPU,Software,Urgency,Regression,SubStatus,CustPri,TrackingNumber,VendorNM,CCList,IsPerf,Class,ShowStop,VendorNm,');" Response.Write "bsetf( 'Active', 'Opened', 'OpenedDate', 'OpenedBy', '" & AuthUser & "' );" end if %> </script> </form> </body> </html>
|