Subversion Repositories DevTools

Rev

Rev 6970 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%@LANGUAGE="VBSCRIPT"%>
<%
'=====================================================
'   rep_new_versions_json.asp
'   Ajax support for various operations
'       getData
'
'=====================================================
%>
<%
Option explicit
' Essential to get UTF through all the hoops. ie: VÄSTTRAFIK (VTK)
Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
Response.CodePage = 65001
Response.CharSet = "UTF-8"
%>
<!--#include file="common/conf.asp"-->
<!--#include file="common/globals.asp"-->
<!--#include file="common/qstr.asp"-->
<!--#include file="common/common_subs.asp"-->
<!--#include file="_access_control_general.asp"-->
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT> 
<%
'------------ Variable Definition -------------
Dim parOpr, parRtagId
Dim result
Dim SqlQry
Dim rsQry

parOpr = QStrPar("action")
parRtagId = QStrPar("rtag_id")
result = -1

' Init the output JSON class
'   Operations can add data
'   Default data will be added at the end
Dim oJSON
Set oJSON = New aspJSON
Dim newitem

'   
'   Perform the body of the operations within a Sub and use
'   On Error Resule Next to catch errors that accur in the code
'
On Error Resume Next
If (parOpr = "getData") Then
    getData
ElseIf (parOpr = "mergeVersion") Then
    mergeVersion
ElseIf (parOpr = "getPackageInfo") Then
    getPackageInfo

Else
    oJSON.data("error") = 1
    oJSON.data("emsgSummary") = "Unknown JSON Operation"
    oJSON.data("emsgDetails") = "The Requested JSON operation is not supported: " & parOpr
End If


' SQL error detection and reporting
If objEH.LastOraFailed Then
    oJSON.data("error") = 1
    result = -1

    oJSON.data("emsgSummary") = objEH.MessageSummary
    oJSON.data("emsgDetails") = objEH.MessageDetails
    oJSON.data("SqlQry") = SqlQry
'
'   Detect program errors
ElseIf Err.number <> 0 Then
    result = -3
    oJSON.data("error") = 2
    oJSON.data("errnum") = Err.number
    oJSON.data("errtxt") = Err.description
    oJSON.data("errsrc") = Err.source
    oJSON.data("emsgSummary") = "Internal VBScript Error:" & Err.number &  ":" & Err.description
End If
On error goto 0
'Write single value
oJSON.data("result") = result

'function Sleep(seconds)
'    dim oshell, cmd
'    set oShell = CreateObject("Wscript.Shell")
'    cmd = "cmd.exe /c timeout " & seconds & " /nobreak"
'    oShell.Run cmd,0,1
'End function
'
'Sleep(2)


' DEBUG: A Hash of the user provided requests
<!--oJSON.data("QueryString") = Request.QueryString       -->
<!--                                                      -->
<!--Dim requestSet : Set requestSet = oJSON.Collection()  -->
<!--Set oJSON.data("Request") = requestSet                -->
<!--Dim variableName                                      -->
<!--for each variableName in Request.QueryString          -->
<!--    requestSet.add variableName, Request(variableName)-->
<!--next                                                  -->
<!--for each variableName in Request.Form                 -->
<!--    requestSet.add variableName, Request(variableName)-->
<!--next                                                  -->

'Return the object
Response.Write oJSON.JSONoutput()
Set oJSON = Nothing
Call Destroy_All_Objects
%>
<%
'-------------------------------------------------
' Function:    mergeVersion
' Description: Merge the selected version into the Release
'              rtag_id - The release to process
'              pv_id - Current PVID
'              npv_id - New PVID
'              mode - A (Add), R (Remove)
'
Sub mergeVersion
    Dim OraParameter
    Dim mode : mode =  QStrPar("mode")

    If NOT releaseIsMergable(releaseInfoHash("official")) Then
        result = -4
        If NOT objAccessControl.UserLogedIn Then
            oJSON.data("emsgSummary") = "User not logged in"
        Else
            oJSON.data("emsgSummary") = "Access not allowed"
        End If
        Exit Sub
    End If

    OraDatabase.Parameters.Add "RTAG_ID", parRtagId, ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "NPV_ID",   QStrPar("npv_id"), ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "PV_ID",   QStrPar("pv_id"), ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "VIEW_ID",  NULL, ORAPARM_BOTH, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "USER_ID",  objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER
    OraDatabase.Parameters.Add "OPERATION",NULL, ORAPARM_INPUT, ORATYPE_CHAR
    Set OraParameter = OraDatabase.Parameters

    On Error Resume Next
    objEH.TryORA ( OraSession )

    If mode = "A" Then
        OraParameter("OPERATION").Value = "A"
        OraDatabase.ExecuteSQL _
        "BEGIN  "&_
        "  :VIEW_ID := PK_RELEASE.GET_PACKAGE_VIEW ( :PV_ID, :RTAG_ID ); "&_
        "  PK_PLANNED.MERGE_PACKAGE ( :NPV_ID, :VIEW_ID, :RTAG_ID, :USER_ID, :OPERATION );  "&_
        "END;"

    ElseIf mode = "R" Then
        OraDatabase.ExecuteSQL "BEGIN PK_ENVIRONMENT.MAKE_REJECT ( :NPV_ID, :RTAG_ID, :USER_ID ); END; "
    
    Else
        result = -1
        oJSON.data("emsgSummary") = "Internal: mergeVersion. Unknown mode"
        Exit Sub
    End If

    objEH.CatchORA ( OraSession )
    On Error GoTo 0

    If Err.Number = 0 Then
        result = 0
    End If
    
        OraDatabase.Parameters.Remove "OPERATION"
        OraDatabase.Parameters.Remove "USER_ID"
        OraDatabase.Parameters.Remove "VIEW_ID"
        OraDatabase.Parameters.Remove "PV_ID"
        OraDatabase.Parameters.Remove "NPV_ID"
        OraDatabase.Parameters.Remove "RTAG_ID"

End Sub
'-------------------------------------------------
' Function:    getData
' Description: Get the data for the page - as jason
'              Not used directly by datatables
'              The format is special. Its not a direct result of the sql query
'              Group multiple version-information as an array
'              ie: [ a,b,c,d,e,f, [[ a,b,c],[a,b,c]]
'
Sub getData

    OraDatabase.Parameters.Add "RTAG_ID", parRtagId, ORAPARM_INPUT, ORATYPE_NUMBER

    SqlQry = GetQuery("rep_new_versions.sql")
    objEH.ErrorRedirect = FALSE
    objEH.TryORA ( OraSession )
    On Error Resume Next
    Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )
    objEH.CatchORA ( OraSession )
    On Error GoTo 0

        OraDatabase.Parameters.Remove "RTAG_ID"

    ' Things for oJSON object
    '   Set someVar  = oJSON.Collection()       (Will create an empty collection)
    '   obj(field) = data                       (Will create a hash entry)
    '   newObj = oJSON.AddToCollection( obj )   (Will create an array)

    Dim lastPvid : lastPvid = 0
    Dim pvid, lastItem
    Dim childCount, pType
    Set oJSON.data("aaData") = oJSON.Collection()
    lastItem = null

    While (NOT rsQry.BOF) AND (NOT rsQry.EOF)
        pvid = rsQry("PV_ID") 

        If lastPvid <> pvid Then
            childCount = 0
            pType = 0
        Else 
            childCount = childCount + 1
            pType = 2
        End If

        Set newitem = oJSON.AddToCollection(oJSON.data("aaData"))
        newitem(0)= rsQry("PV_ID") 
        newitem(1)= rsQry("VIEW_NAME")
        newitem(2)= rsQry("PKG_ID")
        newitem(3)= rsQry("PKG_NAME")
        newitem(4)= rsQry("PKG_VERSION") 
        newitem(5)= rsQry("V_EXT")
        newitem(6)= rsQry("CREATED_STAMP") 
        newitem(7)= rsQry("NEW_PV_ID")
        newitem(8)= rsQry("NEW_PKG_VERSION")
        newitem(9)= rsQry("NEW_CREATED_STAMP")
        newitem(10)= pType
        newitem(11)= rsQry("NEW_AGE")
        newitem(12)= rsQry("ETYPE")

        ' Is the last item a parent (Has children)
        '   entry(10)
        '       0 - Is a parent without children
        '       1 - Is a parent with children
        '       2 - Is a child
        '
        If childCount = 1 AND NOT isNULL(lastItem)  Then
            lastItem(10)= 1
        End If

        ' If this is an entry of ETYPE of A, then we skip the next entry.
        ' It will be repeat
        If rsQry("ETYPE") = "A" Then
            rsQry.MoveNext
        End If


       lastPvid = pvid
       Set lastItem = newitem
       rsQry.MoveNext
    Wend

End Sub

'-------------------------------------------------
' Function:    getPackageInfo
' Description: Get basic Package info
'              Requires pvid
'
' Returns:      pkgName
'               pkgVersion
'              
'
Sub getPackageInfo
    Dim entry
    OraDatabase.Parameters.Add "PV_ID", QStrPar("pv_id"), ORAPARM_INPUT, ORATYPE_NUMBER

    SqlQry = "select p.pkg_name, pv.pkg_version from  packages p, package_versions pv where pv.pv_id = :PV_ID and pv.pkg_id = p.pkg_id"
    objEH.ErrorRedirect = FALSE
    objEH.TryORA ( OraSession )
    On Error Resume Next
    Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )
    objEH.CatchORA ( OraSession )
    On Error GoTo 0
    If Err.Number = 0 Then
        result = 0
    End If

    Set entry  = oJSON.Collection()
    Set oJSON.data("aaData") = entry
    entry("pkg_name")= rsQry("PKG_NAME") 
    entry("pkg_version")= rsQry("PKG_VERSION")

        OraDatabase.Parameters.Remove "PV_ID"
End Sub
%>