Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4237 dpurdie 1
<%@LANGUAGE="VBSCRIPT"%>
2
<%
3
'=====================================================
4
'       Jira Issues Enquiry
5
'       Designed to be called via AJAX and to return
6
'       JSON formatted data to dynamic page
7
'=====================================================
8
%>
9
<%
10
Option explicit
11
' Good idea to set when using redirect
12
Response.Expires = 0   ' always load the page, dont store
13
%>
14
<!--#include file="common/conf.asp"-->
15
<!--#include file="common/globals.asp"-->
16
<!--#include file="common/qstr.asp"-->
17
<!--#include file="common/common_subs.asp"-->
18
<!--#include file="common/formating.asp"-->
4254 dpurdie 19
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/base64encode.vbs"></SCRIPT> 
20
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT> 
4237 dpurdie 21
<%
22
'------------ Variable Definition -------------
23
Dim parOpr
24
Dim parPv_id
25
Dim result
26
Dim iJSON,jJSON, el, this, post, newitem
27
Dim allIssues
28
 
29
' Basic Parameters
30
parOpr = QStrPar("Opr")
31
parPv_id = QStrPar("pv_id")
32
result = -1
33
post = "None"
34
 
35
' Init the output JSON class
36
'   Operations can add data
37
'   Default data will be added at the end
38
Dim oJSON
39
Set oJSON = New aspJSON
40
 
41
'
42
'   getIssues - Get issues for the current PV_ID and create a hash
43
'
44
Sub getIssues
45
    Set allIssues = CreateObject ("Scripting.Dictionary")
46
    Dim rsTemp, sqlstr, key
47
    sqlstr = "SELECT iss_key FROM JIRA_ISSUES WHERE pv_id="& parPv_id
48
    Set rsTemp = OraDatabase.DbCreateDynaset( sqlstr, cint(0))
49
    While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
50
        key = rsTemp("iss_key")
51
       If NOT allIssues.Exists(key) Then
52
            allIssues.add key, 1
53
       End If
54
        rsTemp.MoveNext
55
    WEnd
56
    rsTemp.Close()
57
    Set rsTemp = nothing
58
End Sub
59
 
60
'
61
'   Determine the operation to be performed
62
'
63
If (parOpr = "getAllKeys") Then
64
 
65
    ' Examine the Jira subsystem and determine ALL available project keys
66
    ' Return an HTML string that is a <select></select> box
67
    ' This is designed to be inserted into an element
68
    '
69
    result = 0
70
 
71
    '
72
    Dim objXML, qry
73
    qry = "/rest/api/2/project"
74
 
75
    Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
76
    objXML.Open "GET", JIRA_URL & qry, false
77
    objXML.setRequestHeader "Authorization", "Basic " & Base64Encode(JIRA_CREDENTAILS)
78
    On Error Resume Next
79
    objXML.Send("")
80
    if Err.Number <> 0 then
81
        result = 1
82
        oJSON.data("emsgSummary") = Err.Description
83
        On Error Goto 0
84
    else
85
        On Error Goto 0
86
        if  objXML.status <> 200 then
87
            result = 1
88
            oJSON.data("emsgSummary") = objXML.responseText
89
 
90
        Else
91
            Set jJSON = New aspJSON
92
            jJSON.loadJSON( objXML.responseText )
93
 
94
            oJSON.data("keyListCount") = jJSON.data.Count
95
 
96
            Dim  str
97
            str = "<select id='keyListSelect'>"
98
            For Each el In jJSON.data
99
                Set this = jJSON.data.item(el)
100
                str = str & "<option value='"&this.item("key")&"'>" &_
101
                            this.item("key") & ":" & this.item("name") &_
102
                      "</option>"
103
                Next
104
            str = str & "</select>"
105
        end if
106
    end if
107
    oJSON.data("keyList") = str
108
'
109
'   getIssues
110
ElseIf (parOpr = "getIssues") Then
111
    Dim project, projectList, issues, issueList, query, order, parCount, parStartAt
112
    getIssues()
113
    project = QStrPar("Project")
114
    issues = QStrPar("Issue")
115
    parStartAt = QStrPar("StartAt")
116
    parCount = QStrPar("Count")
117
 
118
    qry = "/rest/api/2/search"
119
    order = " ORDER BY key DESC"
120
 
121
    projectList = ""
122
    If project = "ALL" Then
123
        projectList = ""
124
    Else
125
        projectList = "project=" & project
126
    End If
127
 
128
     ' Convert comma or space seperated list into and 'IN' query
129
    issueList = ""
130
    Dim aList, entry, del
131
    If issues <> "ALL" AND issues <> "" AND project <> "ALL" Then
132
        issueList = issueList & " AND key in ("
133
        del = ""
134
        issues = Replace(issues ," ",",",1,-1)
135
        aList = Split(issues, ",")
136
            For Each entry in aList
137
                If entry <> "" Then
138
                    issueList = issueList & del & project & "-" & entry
139
                    del = ","
140
                End If
141
            Next
142
        issueList = issueList & ")"
143
    End If
144
 
145
    ' Create the JSON input via code
146
    ' Can do it as a string, as thats all we want
147
    set iJSON = New aspJSON
148
    With iJSON.data
149
    .Add "jql", projectList & issueList & order
150
    .Add "validateQuery", "false"
151
    .Add "startAt", CStr(parStartAt)
152
    .Add "maxResults", CStr(parCount)
153
    .Add "fields", iJSON.Collection()
154
        With .item("fields")
155
            .Add 0, "key"
156
            .Add 1, "summary"
157
            .Add 2, "status"
158
            .Add 3, "priority"
159
            .Add 4, "issuetype"
160
        End With
161
    End With
162
    post = iJSON.JSONoutput()
163
 
164
    Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
165
    objXML.Open "POST", JIRA_URL & qry , false
166
    objXML.setRequestHeader "Authorization", "Basic " & Base64Encode(JIRA_CREDENTAILS)
167
    objXML.setRequestHeader "Content-Type", "application/json"
168
    On Error Resume Next
169
    objXML.Send(post)
170
    if Err.Number <> 0 then
171
        result = 1
172
        oJSON.data("emsgSummary") = Err.Description
173
        On Error Goto 0
174
    else
175
        On Error Goto 0
176
        If  objXML.status = 400 then
177
            result = 1
178
            Set jJSON = New aspJSON
179
            jJSON.loadJSON( objXML.responseText )
180
            oJSON.data("emsgSummary") = jJSON.data("errorMessages").item(0)
181
 
182
        ElseIf  objXML.status <> 200 then
183
            result = 1
184
            oJSON.data("emsgSummary") = objXML.responseText
185
        Else
186
            Set jJSON = New aspJSON
187
            jJSON.loadJSON( objXML.responseText )
188
 
189
'           Response.Write "<br>Pretty JSON display<pre>"
190
'           Response.Write jJSON.JSONoutput()
191
'           Response.Write "</pre>"
192
'
193
 
194
            oJSON.data("issueCount") = jJSON.data("total")
195
            oJSON.data("startAt") = jJSON.data("startAt")
196
            oJSON.data("maxResults") = jJSON.data("maxResults")
197
 
198
            Set oJSON.data("issues") = oJSON.Collection()
199
 
200
            ' Select the fields to be returned
201
            Dim  fields
202
    'On Error Resume Next
203
            For Each el In jJSON.data("issues")
204
               Set this = jJSON.data("issues").item(el)
205
               Set fields = this.item("fields")
206
 
207
                Set newitem = oJSON.AddToCollection(oJSON.data("issues"))
208
                newitem.add "key",this.item("key")
209
                newitem.add "url",JIRA_URL & "/browse/" & this.item("key")
210
                newitem.add "statusIcon",fields.item("status").item("iconUrl")
211
                newitem.add "status",fields.item("status").item("name")
212
                newitem.add "issuetypeIcon",fields.item("issuetype").item("iconUrl")
213
                newitem.add "issuetype",fields.item("issuetype").item("name")
214
                newitem.add "priorityIcon",fields.item("priority").item("iconUrl")
215
                newitem.add "priority",fields.item("priority").item("name")
216
                newitem.add "summary",fields.item("summary")
217
 
218
                If allIssues.Exists(this.item("key")) Then
219
                    newitem.add "inuse",1
220
                End If
221
            Next
222
            result = 0
223
        end if
224
    end if
225
'
226
'   insertIssues
227
'   Insert Issues into the Release Manager entry
228
'
229
ElseIf (parOpr = "insertIssues") Then
230
    issues = QStrPar("Issue")
231
    If parPv_id = "" OR issues = "" Then
232
        result = 1
233
        oJSON.data("emsgSummary") = "Action called with invalid arguments." & parPv_id & issues
234
    Else
235
        Dim SqlQry, issArr , iss_id, rsQry
236
        issArr = Split ( issues, ",")
237
 
238
        objEH.ErrorRedirect = FALSE
239
        objEH.TryORA ( OraSession )
240
        On Error Resume Next
241
 
242
        ' Import issues if they do not already exist
243
        For Each iss_id In issArr
244
            If Err.Number = 0 Then
245
                SqlQry = "SELECT * FROM JIRA_ISSUES WHERE pv_id=" & parPv_id & " AND iss_key='"& LTrim(iss_id) & "'"
246
                Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )
247
                OraDatabase.ExecuteSQL SqlQry
248
                If ((rsQry.BOF) OR (rsQry.EOF)) Then
249
                    SqlQry = " INSERT INTO JIRA_ISSUES ( pv_id, iss_key, date_time_stamp )" &_
250
                             " VALUES ( " & parPv_id & ", '"& LTrim(iss_id) &"', "& ORA_SYSDATETIME &")"
251
                    OraDatabase.ExecuteSQL SqlQry
252
 
253
                    If Err.Number = 0 Then
254
                        SqlQry = "BEGIN  Log_Action ( "& parPv_id &", 'jira_issue_added', "& objAccessControl.UserId &", 'Issue number: "& LTrim(iss_id) &"' );  END;"
255
                        OraDatabase.ExecuteSQL SqlQry
256
                    End If
257
                Set rsQry = nothing
258
                End If
259
            End If
260
        Next
261
 
262
        ' SQL error detection and reporting
263
        objEH.CatchORA ( OraSession )
264
        If objEH.LastOraFailed Then
265
            result = 2
266
            oJSON.data("error") = 1
267
 
268
            oJSON.data("emsgSummary") = objEH.MessageSummary
269
            oJSON.data("emsgDetails") = objEH.MessageDetails
270
            oJSON.data("SqlQry") = SqlQry
271
        Else
272
            result = 0
273
        End If
274
    End If
275
Else
276
        oJSON.data("emsgSummary") = "Unknown operation requested:" & parOpr
277
End If
278
 
279
'
280
'   Create JSON data for the user
281
'   Important fields
282
'       result
283
'
284
'   Debug fields
285
'       Request (Array)
286
'
287
'Write single value
288
oJSON.data("result") = result
289
 
290
' DEBUG: An array of the user provided requests
291
oJSON.data("JiraPost") = post
292
Set oJSON.data("Request") = oJSON.Collection()
293
Set newitem = oJSON.AddToCollection(oJSON.data("Request"))
294
Dim variableName
295
for each variableName in Request.QueryString
296
    newitem.add variableName, Request.QueryString(variableName)
297
next
298
 
299
'Return the object
300
Response.Write oJSON.JSONoutput()
301
%>