Subversion Repositories DevTools

Rev

Blame | Last modification | View Log | RSS feed

<%
'=====================================================
'                                        COMMON SUBs Part 1
'=====================================================
%>
<%
'-----------------------------------------------------------------------------------------------------------------------------
Sub CloseWindow
%>
<SCRIPT language="JavaScript" type="text/javascript">
<!--
self.close();
//-->
</SCRIPT>
<%
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub OpenChildWindow ( SStitle, SSurl, SSH, SSW, BBscroll )
        Dim scrlBar
        If BBscroll Then
                scrlBar = "yes"
        Else
                scrlBar = "no"
        End If
%>
        <script language="JavaScript" type="text/javascript">
        <!--
        window.open('<%=SSurl%>','<%=SStitle%>','scrollbars=<%=scrlBar%>,resizable=yes,width=<%=SSW%>,height=<%=SSH%>')
        //-->
        </script>
<%
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub OpenInParentWindow ( SSurl )
%>
        <script language="JavaScript" type="text/javascript">
        <!--
        window.opener.document.location='<%=SSurl%>';
        //-->
        </script>
<%
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub OpenInWindow ( SSurl )
        Response.Redirect ( SSurl )
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Function GetQuery ( sQryName )
        GetQuery = ReadFile( QUERIES_PATH &"\"& sQryName )
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Sub RaiseMsg ( SSerrFile, SSerrDesc )
        ' Usage: enumERROR, parval1 &"|"& parval2 &"|"& parval3 ...
        Session( enum_RELMGR_ERRDESCRIPTION ) = SSerrDesc
        Response.Redirect ("messages/"& SSerrFile )
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub RaiseMsgInParent ( SSerrFile, SSerrDesc )
        Session( enum_RELMGR_ERRDESCRIPTION ) = SSerrDesc
        Call OpenInParentWindow ("messages/"& SSerrFile )
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Function ReadFile( SSpath )
        Dim filesys, rfile
        Set filesys = CreateObject("Scripting.FileSystemObject")
        Set rfile = filesys.OpenTextFile( SSpath, 1, false)
        ReadFile = rfile.ReadAll
        rfile.close
        Set filesys = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function HighlightSubstring ( SSstr, SSsubstr )
        Dim leftSTR, startPos
        startPos = InStr( 1, SSstr, SSsubstr, 1 )

        If startPos > 0 Then
                leftSTR = Left ( SSstr, startPos - 1 )
                HighlightSubstring = leftSTR &"<SPAN style='background:#ffff99;'>"& Mid( SSstr, startPos, Len(SSsubstr) ) &"</SPAN>"&  Right ( SSstr, Len(SSstr) - Len(leftSTR) - Len(SSsubstr)  )
        Else
                ' Subtring not found
                HighlightSubstring = SSstr
        End If

End Function
'-----------------------------------------------------------------------------------------------------------------------------
Sub DeleteFile( SSpath )
        Dim filesys
        Set filesys = CreateObject("Scripting.FileSystemObject")
        If filesys.FileExists(SSpath) Then
                filesys.DeleteFile SSpath, TRUE
        End If
        Set filesys = nothing
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub DeleteFolder( SSpath )
        Dim  filesys
        Set filesys = CreateObject ("Scripting.FileSystemObject")
        If filesys.FolderExists( SSpath ) Then
                'Set oFolder = filesys.GetFolder( SSpath )
                filesys.DeleteFolder SSpath ,TRUE
        End If
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub Create_Folder ( sCreateIn, sFolderName )
        Dim filesys, currfolder, folcoll, subfol
        Set filesys = CreateObject("Scripting.FileSystemObject")
        If filesys.FolderExists( sCreateIn ) Then
                Set currfolder = filesys.GetFolder( sCreateIn )
                Set folcoll = currfolder.SubFolders
                If NOT filesys.FolderExists( sCreateIn &"\"& sFolderName ) Then
                        folcoll.Add( sFolderName )
                End If
        End If
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Function Folder_Is_Empty ( sPath )
        Dim filesys, oFolder
        Set filesys = CreateObject("Scripting.FileSystemObject")

        If filesys.FolderExists( sPath ) Then
                Set oFolder = filesys.GetFolder( sPath )
                If ( oFolder.Files.Count + oFolder.SubFolders.Count ) > 0 Then
                        Folder_Is_Empty = FALSE
                Else
                        Folder_Is_Empty = TRUE
                End If
        Else
                Folder_Is_Empty = TRUE
        End If

End Function
'-----------------------------------------------------------------------------------------------------------------------------
Sub Destroy_All_Objects
        On Error Resume Next
        set brokenReadyHash = nothing
        set brokenHash = nothing
        set pkgInfoHash = nothing
        set OraDatabase = nothing
        set OraSession = nothing
        set userdetailsHash = nothing
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Function InStrPipes ( SSstr, SSsubstr )
        If InStr( SSstr, "|"& SSsubstr &"|") > 0 Then
                InStrPipes = true
        Else
                InStrPipes = false
        End If
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function RemoveFromStrPipes ( SSstr, SSsubstr )
        RemoveFromStrPipes = Replace( SSstr, "|"& SSsubstr &"|", "" )
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function View_Name_Exists ( SSviewname, NNused_id )
        Dim rsTemp, Query_String
        Query_String = _
        " SELECT view_name"&_
        "  FROM views"&_
        " WHERE UPPER(view_name) = UPPER('"& UCase(SSviewname) &"') AND owner_id = "& NNused_id
        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
        If rsTemp.RecordCount > 0 Then
                View_Name_Exists = TRUE
        Else
                View_Name_Exists = FALSE
        End If
        rsTemp.Close
        Set rsTemp = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function User_Name_Exists ( SSusername )
        Dim rsTemp, Query_String
        Query_String = _
        " SELECT user_name"&_
        "  FROM users"&_
        " WHERE user_name = '"& SSusername &"'"
        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
        If rsTemp.RecordCount > 0 Then
                User_Name_Exists = TRUE
        Else
                User_Name_Exists = FALSE
        End If
        rsTemp.Close
        Set rsTemp = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function This_View_Owner( NNview_id, NNuser_id )
        Dim rsTemp, Query_String
        Query_String = _
        " SELECT owner_id"&_
        "  FROM views"&_
        " WHERE view_id = "& NNview_id
        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
        If rsTemp.RecordCount > 0 Then
                If CInt(rsTemp.Fields("owner_id")) = CInt(NNuser_id) Then
                        This_View_Owner = TRUE
                Else
                        This_View_Owner = FALSE
                End If
        Else
                ' view not found
                Session("AdditionalParams") = "$ADMINEMAIL$,"& adminEmail
                Response.Redirect("message.asp?msg=400-2")
        End If
        rsTemp.Close
        Set rsTemp = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function GetReleaseMode ( NNrtag_id )
        Dim rsTemp, Query_String
        If NNrtag_id = "" Then NNrtag_id = "-1"

        Query_String = _
        " SELECT official FROM release_tags WHERE rtag_id = "& NNrtag_id

        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
        'Response.write "DB"& NNrtag_id
        If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
                GetReleaseMode = rsTemp.Fields("official")

        End If

        rsTemp.Close
        Set rsTemp = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Get_Devl_Envorinment
        If Request.Cookies("RELEASEMANAGER_MEMORY")("devl_environment") <> "" Then
                If Request.Cookies("RELEASEMANAGER_MEMORY")("devl_environment") = "clearcase" Then
                        Get_Devl_Envorinment = "jats"           'clear case does not have import
                Else
                        Get_Devl_Envorinment = Request.Cookies("RELEASEMANAGER_MEMORY")("devl_environment")
                End If
        Else
                Get_Devl_Envorinment = "jats"           'JATS devl environment is set by default
        End If
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Get_From_DUAL ( SSclm )
        Dim rsTemp, Query_String, OraSession2, OraDatabase2
        Set OraSession2 = CreateObject("OracleInProcServer.XOraSession")
        Set OraDatabase2 = OraSession2.OpenDatabase( TNS_NAME, DB_AUTHENTICATION, Cint(0))

        Query_String = _
        " SELECT "& SSclm &" AS result FROM DUAL"
        Set rsTemp = OraDatabase2.DbCreateDynaset( Query_String, cint(0))

        If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
                Get_From_DUAL = (rsTemp.Fields("result"))
        End If

        rsTemp.Close
        Set rsTemp = nothing
        Set OraDatabase2 = nothing
        Set OraSession2 = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Get_Pkg_Base_View ( NNpv_id, NNrtag_id )
        Dim rsTemp, Query_String

        If NNrtag_id = "" Then
                Get_Pkg_Base_View = "N/A"
                Exit Function
        End If

        Query_String = _
        " SELECT vi.view_name"&_
        "  FROM release_content rc,"&_
        "       views vi"&_
        " WHERE vi.view_id = rc.base_view_id"&_
        "   AND rc.rtag_id = "& NNrtag_id &_
        "   AND rc.pv_id = "& NNpv_id

        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

        If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
                Get_Pkg_Base_View = UCase(rsTemp.Fields("view_name"))
        Else
                Get_Pkg_Base_View = "N/A"
        End If

        rsTemp.Close
        Set rsTemp = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Get_Proj_ID ( SSrtag_id )
        Dim rsTemp, Query_String

        Query_String = _
        " SELECT projects.proj_id"&_
        "   FROM projects projects, release_tags rel"&_
        "  WHERE projects.proj_id = rel.proj_id"&_
        "    AND rel.rtag_id = "& SSrtag_id

        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

        If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
                Get_Proj_ID = (rsTemp.Fields("proj_id"))
        End If

        rsTemp.Close
        Set rsTemp = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Get_Proj_Name ( NNproj_id )
        Dim rsTemp, Query_String

        Query_String = _
        " SELECT proj_name "&_
        "   FROM projects pr "&_
  "  WHERE pr.proj_id = "& NNproj_id

        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

        If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
                Get_Proj_Name = (rsTemp.Fields("proj_name"))
        End If

        rsTemp.Close
        Set rsTemp = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Get_Base_URL ( NNproj_id )
        Dim rsTemp, Query_String

        Query_String = _
        " SELECT base_url "&_
        "   FROM projects pr "&_
  "  WHERE pr.proj_id = "& NNproj_id

        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

        Get_Base_URL = rsTemp("base_url")

        rsTemp.Close()
        Set rsTemp = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Get_Categories ( NNrtag_id )
        Get_Categories = _
        " SELECT vi.view_id, vi.view_name"&_
        "  FROM release_content rel,"&_
        "       views vi"&_
        " WHERE rel.base_view_id = vi.view_id"&_
        "   AND rtag_id = "& NNrtag_id &_
        " GROUP BY vi.view_id, vi.view_name   "&_
        " ORDER BY vi.view_name ASC "
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Get_PV_IDs_In_Release ( NNrtag_id )
    Dim rsTemp, Query_String, tempSTR
        tempSTR = "-1"
        Query_String = _
        "SELECT pv_id FROM release_content WHERE rtag_id = "& NNrtag_id

        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

        While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
                tempSTR = tempSTR &","& rsTemp.Fields("pv_id")
                rsTemp.MoveNext
        WEnd
        Get_PV_IDs_In_Release = tempSTR
        rsTemp.Close
        Set rsTemp = nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Sub Get_Pkg_Info ( SSpv_id, NNrtag )
        Dim rsTemp, Query_String
        OraDatabase.Parameters.Add "PV_ID",             SSpv_id,        ORAPARM_INPUT, ORATYPE_NUMBER
        OraDatabase.Parameters.Add "RTAG_ID",           NNrtag,         ORAPARM_INPUT, ORATYPE_NUMBER
        OraDatabase.Parameters.Add "RETURN_NUMBER", NULL,               ORAPARM_OUTPUT, ORATYPE_NUMBER


        pkgInfoHash.Item ("can_unofficial") = "false"

        '/* Get Package Details */
        Set rsTemp = OraDatabase.DbCreateDynaset( GetQuery("PackageDetails.sql"), cint(0))

        If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
                pkgInfoHash.Add "pv_id", (rsTemp.Fields("pv_id"))
                pkgInfoHash.Add "pkg_id", (rsTemp.Fields("pkg_id"))
                pkgInfoHash.Add "pkg_name", (rsTemp.Fields("pkg_name"))
                pkgInfoHash.Add "pkg_version", (rsTemp.Fields("pkg_version"))
                pkgInfoHash.Add "v_ext", (rsTemp.Fields("v_ext"))
                pkgInfoHash.Add "comments", (rsTemp.Fields("comments"))

                pkgInfoHash.Add "modified_stamp", (rsTemp.Fields("modified_stamp"))
                pkgInfoHash.Add "modifier", (rsTemp.Fields("modifier"))
                pkgInfoHash.Add "modifier_id", (rsTemp.Fields("modifier_id"))
                pkgInfoHash.Add "modifier_email", (rsTemp.Fields("modifier_email"))

                pkgInfoHash.Add "created_stamp", (rsTemp.Fields("created_stamp"))
                pkgInfoHash.Add "creator", (rsTemp.Fields("creator"))
                pkgInfoHash.Add "creator_email", (rsTemp.Fields("creator_email"))

                pkgInfoHash.Add "owner", (rsTemp.Fields("owner"))
                pkgInfoHash.Add "owner_email", (rsTemp.Fields("owner_email"))

                pkgInfoHash.Add "dlocked", (rsTemp.Fields("dlocked"))
                pkgInfoHash.Add "proj_id", (rsTemp.Fields("proj_id"))
                pkgInfoHash.Add "rtag_id", (rsTemp.Fields("rtag_id"))
                pkgInfoHash.Add "rtag_name", (rsTemp.Fields("rtag_name"))
                pkgInfoHash.Add "pkg_label", (rsTemp.Fields("pkg_label"))
                pkgInfoHash.Add "src_path", (rsTemp.Fields("src_path"))
                pkgInfoHash.Add "pv_description", (rsTemp.Fields("pv_description"))
                pkgInfoHash.Add "last_pv_id", (rsTemp.Fields("last_pv_id"))
                pkgInfoHash.Add "previous_version", (rsTemp.Fields("previous_version"))
                pkgInfoHash.Add "release_notes_info", (rsTemp.Fields("release_notes_info"))

                pkgInfoHash.Add "is_patch", (rsTemp.Fields("is_patch"))
                pkgInfoHash.Add "is_obsolete", (rsTemp.Fields("is_obsolete"))
                pkgInfoHash.Add "obsolete_comments", (rsTemp.Fields("obsolete_comments"))

                pkgInfoHash.Add "build_type", (rsTemp.Fields("build_type"))
                pkgInfoHash.Add "change_type", (rsTemp.Fields("change_type"))
                pkgInfoHash.Add "bs_id", (rsTemp.Fields("bs_id"))
                pkgInfoHash.Add "is_deployable", (rsTemp.Fields("is_deployable"))
                pkgInfoHash.Add "sbom_priority", (rsTemp.Fields("sbom_priority"))
                pkgInfoHash.Add "ripple_field", (rsTemp.Fields("ripple_field"))

        End If


        '-- Find if package is editable in this project
        OraDatabase.ExecuteSQL "BEGIN  :RETURN_NUMBER := CAN_EDIT_PKG_IN_PROJECT( :PV_ID, :RTAG_ID );  END;"
        pkgInfoHash.Add "can_edit_in_project", CStr( OraDatabase.Parameters("RETURN_NUMBER").Value )


        '/* Get Package Release Details */
        Set rsTemp = OraDatabase.DbCreateDynaset( GetQuery("PackageReleaseDetails.sql"), cint(0))



        If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
                pkgInfoHash.Item ("base_view_id") = (rsTemp.Fields("base_view_id"))
                pkgInfoHash.Add "insert_stamp", (rsTemp.Fields("insert_stamp"))
                pkgInfoHash.Add "insertor", (rsTemp.Fields("insertor"))
                pkgInfoHash.Add "insertor_email", (rsTemp.Fields("insertor_email"))
                pkgInfoHash.Item ("pkg_state") = (rsTemp.Fields("pkg_state"))
                pkgInfoHash.Item ("deprecated_state") = (rsTemp.Fields("deprecated_state"))
                pkgInfoHash.Item ("product_state") = (rsTemp.Fields("product_state"))

                'AND  (rsTemp("used_count") = 0)  _

                If      (pkgInfoHash.Item ("dlocked") = "Y") _
                   AND  (pkgInfoHash.Item ("build_type") = "M") _
                   AND  (CDate( FormatDateTime(pkgInfoHash.Item ("modified_stamp"), 2) ) = Date) _
                   AND  (pkgInfoHash.Item("can_edit_in_project") = "1" ) _
                Then

                   pkgInfoHash.Item ("can_unofficial") = "true"
                End If

        Else

                If (CDate( FormatDateTime(pkgInfoHash.Item ("modified_stamp"), 2) ) = Date) Then
                        ' Must be not older then a day
                        If (pkgInfoHash.Item ("dlocked") = "A")  OR   NOT IsNull(pkgInfoHash.Item("is_patch")) Then
                                pkgInfoHash.Item ("can_unofficial") = "true"

                        End If

                End If

        End If


        '/* Get Patch Parent */
        If pkgInfoHash.Item ("is_patch") = "Y" Then
                Set rsTemp = OraDatabase.DbCreateDynaset( GetQuery("PatchParent.sql"), cint(0))

                If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
                        pkgInfoHash.Add "patch_parent_id", (rsTemp.Fields("pv_id"))
                End If
        End If

        ' DEVI-45275 - Check if version is in the planned table and if so get its planned operation type
        ' which denotes whether it is an existing version being added to a release, an existing version
        ' being removed from a release, or a new version being prepared for a release.
        Set rsTemp = OraDatabase.DbCreateDynaset( GetQuery("PlannedPackageVersionDetails.sql"), cint(0))

        If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
                pkgInfoHash.Add "planned_operation", (rsTemp.Fields("operation"))
        Else
                pkgInfoHash.Add "planned_operation", " "
        End If

        OraDatabase.Parameters.Remove "PV_ID"
        OraDatabase.Parameters.Remove "RTAG_ID"
        OraDatabase.Parameters.Remove "RETURN_NUMBER"


        rsTemp.Close
        Set rsTemp = nothing
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub Get_Pkg_Short_Info( SSparPv_id, SSpkgID, SSpkgName, SSpkgVersion, SSsrc_path, SSpkgDesc, BBdlocked )
        Dim rsTemp, Query_String
        If IsEmpty(SSparPv_id) Then Exit Sub

        Query_String = _
        " SELECT pkg.pkg_id, pkg.pkg_name, pv.pkg_version, pv.src_path, pv.pv_description, pv.dlocked"&_
        "  FROM packages pkg, package_versions pv"&_
        " WHERE pkg.pkg_id = pv.pkg_id  AND pv.pv_id ="& SSparPv_id

        Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

        If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
                SSpkgID = rsTemp.Fields("pkg_id")
                SSpkgName = rsTemp.Fields("pkg_name")
                SSpkgVersion = rsTemp.Fields("pkg_version")
                SSsrc_path = rsTemp.Fields("src_path")
                SSpkgDesc = rsTemp.Fields("pv_description")
                BBdlocked = rsTemp.Fields("dlocked")
        End If

        rsTemp.Close
        Set rsTemp = nothing
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Private Function IsDomainAuthOK( SSusername, SSpassword, SSdomainName )
        Dim objLoginAuth, return, tempSTR
        'Set objWSH = Server.CreateObject("WScript.Shell")
        'On Error Resume Next
        'return = -1
        'return = objWSH.Run("cmd.exe /c perl "& rootPath &"\common\domainauth.pl """&_
        '                                       SSdomainName &""" """& SSusername &""" """& SSpassword &""" "&_
        '                                       "> "& rootPath &"\temp\"& SSusername &".txt", 0, true)

        Set objLoginAuth = Server.CreateObject("LoginAdmin.ImpersonateUser")

        return = -1
        return = objLoginAuth.AuthenticateUser ( SSusername, SSpassword, SSdomainName )

        'Response.write "LOGIN"& SSusername &"-"& SSpassword &"-"& SSdomainName &"-"& return

        If (return = 0) OR (return = 1385) Then
                ' From MSDN System Error Codes
                ' 0 - The operation completed successfully.
                ' 1326 - Logon failure: unknown user name or bad password.
                ' 1385 - Logon failure: the user has not been granted the requested logon type at this computer.
                ' 1909 - The referenced account is currently locked out and may not be used to log on.

                'Login ok
                IsDomainAuthOK = True
        Else
                IsDomainAuthOK = False
        End If

        Set objLoginAuth = Nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function ReadUserPreferences ( SSitem )
        'ReadUserPreferences = Request.Cookies("RELEASEMANAGER_USER_PREFERENCES")( SSitem )
        ReadUserPreferences = "0"
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Requred_Parameters_String ( SScurrent, SSstr )
        'returns "&par1=val1&&parn=valn&"                               must use & as it will not be used on parameter name or value
        Dim tempARR, parameter, tempSTR
        tempARR = Split( SSstr, "," )
        tempSTR = SScurrent

        For Each parameter In tempARR
                tempSTR = tempSTR &"&"& parameter &"="& QStrPar( parameter ) &"&"
        Next

        Requred_Parameters_String = tempSTR
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Quick_Help ( SStipname )
        Quick_Help = "<a href='javascript:;' onMouseOver=""formTips.show('"& SStipname &"')"" onMouseOut=""formTips.hide()""><img src='images/i_help.gif' width='12' height='12' hspace='2' align='absmiddle' border='0' ></a>"
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function LogError ( SSlog, SSstr )
        '|errstr1||errstr2||errstr3|...
        LogError = SSlog &"|"& SSstr &"|"
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Sub Send_Email ( SSfromName, SSfrom, SSto, SSsubject, SSbody, oAttachments )
        Dim Mail, Keys, Key, canSend

        canSend = FALSE
        Set Mail = Server.CreateObject("Persits.MailSender")
        Mail.Host = SMTP_HOST

        Mail.From = SSfrom
        Mail.FromName = SSfromName

        ' Send TO:
        If IsObject( SSto ) Then
                Keys = SSto.Keys
                For Each Key In Keys
                        Mail.AddAddress Key, SSto.Item( Key )
                Next

                If SSto.Count > 0 Then canSend = TRUE
        Else

                Mail.AddAddress SSto
                If SSto <> "" Then canSend = TRUE
        End If

        Mail.Subject = SSsubject
        Mail.IsHTML = True
        Mail.Body = SSbody

        ' Add Attachments     DDDDDDD  Sash, It appears as if AddEmbededImage is premium functionality that costs money, can we just do a normal add attachment?
        'If IsObject( oAttachments ) Then
        '       Keys = oAttachments.Keys
        '       For Each Key In Keys
        '               Mail.AddEmbeddedImage rootPath & Key, oAttachments.Item( Key )
        '       Next
        '
        'End If

        On Error Resume Next
        If canSend Then Mail.Send       ' send message

End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub Iterate_UP_the_tree ( NNrtag_id, HHstart_with, HHresult )
        Dim rsTemp, Query_String
        Dim seekPKGs, seekNOTpkgs

        seekPKGs = Join(HHstart_with.Keys, ",")
        If seekPKGs = "" Then seekPKGs = "-1"
        seekNOTpkgs = "-1"

        Do While seekPKGs <> "-1"
                Query_String = _
                " SELECT DISTINCT dep.pkg_id"&_
                "    FROM package_dependencies dep, release_content rel"&_
                "   WHERE rel.pv_id = dep.pv_id"&_
                "     AND rel.rtag_id = "& NNrtag_id &_
                "     AND dpkg_id IN ( "& seekPKGs &" ) "&_
                "     AND pkg_id NOT IN ( "& seekNOTpkgs &" )"
                '"     AND dep.dpv_id NOT IN ( SELECT iw.iw_id FROM ignore_warnings iw WHERE iw.rtag_id = "& NNrtag_id &" )"
                Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

                If rsTemp.RecordCount < 1 Then Exit Do

                seekPKGs = "-1"
                While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
                        If NOT HHresult.Exists(Cstr(rsTemp.Fields("pkg_id"))) Then HHresult.Add Cstr(rsTemp.Fields("pkg_id")), ""
                        seekPKGs = seekPKGs &","& rsTemp.Fields("pkg_id")
                        rsTemp.MoveNext
                WEnd

                seekNOTpkgs = seekNOTpkgs &","& seekPKGs
        Loop

End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub Iterate_DOWN_the_tree (     NNrtag_id, HHstart_with, HHresult )
        Dim rsTemp, Query_String
        Dim seekPKGs, seekNOTpkgs

        seekPKGs = Join(HHstart_with.Keys, ",")
        If seekPKGs = "" Then seekPKGs = "-1"
        seekNOTpkgs = "-1"

        Do While seekPKGs <> "-1"
                Query_String = _
                " SELECT DISTINCT dep.dpkg_id"&_
                "    FROM package_dependencies dep, release_content rel"&_
                "   WHERE rel.pv_id = dep.pv_id"&_
                "     AND rel.rtag_id = "& NNrtag_id &_
                "     AND pkg_id IN ( "& seekPKGs &" ) "&_
                "     AND dpkg_id NOT IN ( "& seekNOTpkgs &" )"
                Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))

                If rsTemp.RecordCount < 1 Then Exit Do

                seekPKGs = "-1"
                While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
                        If NOT HHresult.Exists(Cstr(rsTemp.Fields("dpkg_id"))) Then HHresult.Add Cstr(rsTemp.Fields("dpkg_id")), ""
                        seekPKGs = seekPKGs &","& rsTemp.Fields("dpkg_id")
                        rsTemp.MoveNext
                WEnd

                seekNOTpkgs = seekNOTpkgs &","& seekPKGs
        Loop

End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Class TempSession
        Function Value ()
                Value = Session("RELEASEMANAGER_temp")
        End Function

        Sub Add ( SSstr )
                Session("RELEASEMANAGER_temp") = Session("RELEASEMANAGER_temp") & SSstr
        End Sub

        Sub Clean ()
                Session("RELEASEMANAGER_temp") = NULL
        End Sub
End Class
'-----------------------------------------------------------------------------------------------------------------------------
Sub DisplayInfo ( SSmsg, SSwidth )
        Dim msg
        If SSmsg = "" Then Exit Sub

        Select Case UCase( SSmsg )
        Case "ISSUES_IMPORTED"
                msg = "Import is complete. <br>Click on Close button if you are finished."
        Case "MAKE_OFFICIAL_WARNING"
                msg = "Note that making a package official will prevent any further change to it."
        Case "APPLY_LABEL_TO_ALL_WARNING"
                msg = "This will overwrite any existing labels on selected packages."
        Case "BLANK_LABEL_WARNING"
                msg = "Some dependencies in the export list above, do not have a label!"
        Case "PERSONAL_VIEW_NOT_SETUP"
                msg = "<span class='err_alert'><b>Your View is not setup!</b></span><span class='sublbox_txt'><br><br>Either set your view using My&nbsp;Account&nbsp;&gt;&nbsp;Views menu<br><br>OR<br><br>switch to Base view (Full view) by clicking on <img src='images/abtn_personal_view.gif' width='25' height='25' border='0'> icon above.</span>"
        Case "EMPTY_RELEASE_CONTENTS"
                msg = "<span class='err_alert'><b>Release content is empty!</b></span><span class='sublbox_txt'><br><br>Use + button to add packages to a release.</span>"
        Case "PKG_NAME_REQUIRED"
                msg = "<span class='err_alert'><b>Package Name required!</b></span><span class='sublbox_txt'><br>You are required to select at least one package name.</span>"
        Case "ADD_PATCH_WARNING"
                msg = "Note that patches cannot be used in your build dependencies."
        Case "NEW_PATCH_AVAILABLE"
                msg = "<b>New Patch is Required</b><br>One or more Build Dependencies have been patched.<br>Please click Add button to create patch for this package."

        Case "GENERATE_RELEASE_NOTES"
                msg = "<a href='_generate_release_notes.asp?pv_id="& Request("pv_id") &"&rtag_id="& Request("rtag_id") &"' class='txt_linked'>Click here</a> to generate full release notes."
        Case "NOT_FOUND_IN_PKG_ARCHIVE_RELEASE_NOTES"
                msg = "<b>This package is not found in dpkg_archive or deploy_archive!</b><br>Release notes are not generated.<br><a href='_generate_release_notes.asp?rfile="& scriptName &"&pv_id="& Request("pv_id") &"&rtag_id="& Request("rtag_id") &"' class='txt_linked'>Click here</a> to try again."
        Case "FAILED_GENERATING_RELEASE_NOTES"
                msg = "<span class='err_alert'><b>Failed generating release notes!</b></span><br>Please contact the <a href='mailto:"& adminEmail&"' class='txt_linked'>Administrator</a>"
        Case "GENERATING_RELEASE_NOTES"
                msg = "<b>Generating release notes...</b><br>It may take a minute. Please try refreshing this page a bit later."
        Case "NO_PREVIOUS_VERSION_RELEASE_NOTES"
            msg = "<b>Previous Version is Unknown</b>!<br>Please specify previous version by clicking on 'Show Details...' above.<br>Release notes are not generated."

        Case "PACKAGE_FOUND_IN_OTHER_LOCATIONS"
                msg = "This package is also found in other locations."
        Case "DOC_NUMBER_NOTFOUND"
                msg = "<span class='err_alert'>Document number "& Request("doc_num") &" does not correspond to any document!</span>"
        Case "DOC_NUMBER_FOUND"
                msg = "Document found. Click &quot;Import&quot; to link the document."
        Case "UNIT_TEST_NOT_DONE"
                msg = "<b>Unit test is Not Done!</b><br><a href='javascript:;' onClick=""MM_openBrWindow('_wform_reason_for_unit_test_not_done.asp?pv_id="& Request("pv_id") &"&rtag_id="& Request("rtag_id") &"','ReasonForNotDone','resizable=yes,width=400,height=250')"" class='txt_linked'>Click here</a> to supply/edit reason."
        Case "PACKAGE_NOT_PART_OF_RELEASE"
                msg = "<b>Package is Not Part of This Release Anymore!</b><br>This package cannot be found in the list on the left-hand side.<br>You can use 'lookup:' on the left-hand side to find the package inside this release. "

        Case "NOT_FOUND_IN_PKG_ARCHIVE_FILE_GENERATE"
                msg = "<b>This package is not found in dpkg_archive or deploy_archive!</b><br>Files and folders are not captured.<br><a href='_generate_files_and_folders.asp?rfile="& scriptName &"&pv_id="& Request("pv_id") &"&rtag_id="& Request("rtag_id") &"' class='txt_linked' onClick=""ProgressBar.style.visibility='visible';"">Click here</a> to try again."
        Case "GENERATE_FILES_AND_FOLDERS"
                msg = "<b>Files and folders not found.</b><br><a href='_generate_files_and_folders.asp?pv_id="& Request("pv_id") &"&rtag_id="& Request("rtag_id") &"' class='txt_linked' onClick=""ProgressBar.style.visibility='visible';"">Click here</a> to try capture them."
        Case "NO_PRODUCT_FILES_CAPTURED"
                msg = "<b>Files and Folders not found for this product!</b><br>Capture of product components can only be done during the build time."

        Case "MASS REF REFERENCE"
                msg = "<span class='err_alert'><b>New Version can only be created in the Release's associated MASS REF: <a href=""dependencies.asp?pv_id="& pkgInfoHash.Item("pv_id") &"&rtag_id="& AssocMASSREFValue &""">"& pkgInfoHash.Item("pkg_name") &" "& pkgInfoHash.Item("pkg_version") &"</a></b></span>"

        Case "REPEAT_SCHEDULE_NOT_SELECTED"
                msg = "<span class='err_alert'><b>YOU MUST SELECT A VALUE FOR REPEAT SCHEDULED DOWNTIME</b></span>"

        Case "PKG_NAME_INVALID"
                msg = "<span class='err_alert'><b>Package Name Invalid!</b></span><span class='sublbox_txt'><br>This package name is invalid. Package names must only consist of alpha-numeric characters, underscores and dashes (A-Z 0-9 _ -), and cannot include spaces or any other symbols.</span>"

        Case "PKG_NAME_EXISTS"
                msg = "<span class='err_alert'><b>Package Name Already Exists!</b></span><span class='sublbox_txt'><br>This package name already exists, please try again.</span>"

        End Select
%>
<table width="<%=SSwidth%>" border="0" cellspacing="0" cellpadding="1">
  <tr>
    <td background="images/bg_bage_dark.gif">
          <table width="100%" border="0" cellspacing="0" cellpadding="3">
        <tr>
          <td width="1%" valign="top" background="images/bg_help.gif"><img src="images/i_qhelp.gif" width="16" height="16"></td>
          <td width="100%" background="images/bg_help.gif" class="form_txt"><%=msg%></td>
        </tr>
      </table></td>
  </tr>
</table>
<br>
<%

End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Sub Messenger ( sMessage, nMessageType, sWidth )
        Dim msgTemplate, Img

        If (sMessage = "") OR IsNull(sMessage) Then Exit Sub

        Select Case CStr(nMessageType)
                Case "1"
                        Img = "s_critical.gif"
                Case "2"
                        Img = "s_warning.gif"
                Case "3"
                        Img = "s_note.gif"
                Case Else
                        Img = nMessageType
        End Select


        msgTemplate = ReadFile( APP_ROOT &"\scripts\message_style.html" )
        msgTemplate = Replace( msgTemplate, "%WIDTH%", sWidth )
        msgTemplate = Replace( msgTemplate, "%IMAGE%", Img )
        msgTemplate = Replace( msgTemplate, "%MESSAGE%", sMessage )

        Response.write msgTemplate
End Sub
'-----------------------------------------------------------------------------------------------------------------------------
Function Default_Label ( SSpkg_name, SSpkg_version, SSv_ext )
        Dim rsTemp, Query_String
        ' Do not do anything is label already exists
        'If Not IsNull(rsPkgInfo("pkg_label")) OR (rsPkgInfo("pkg_label")<>"")Then
        '       Default_Label = rsPkgInfo("pkg_label")
        '       Exit Function
        'End If

        If Request("rtag_id") <> "" Then

                Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT PROJ_ID FROM RELEASE_TAGS WHERE RTAG_ID = "& Request("rtag_id") &"" , cint(0) )

                If InStr(1, SSpkg_name, "ERG") = 1 AND rsTemp("proj_id") <> 202 Then
                        ' For ERG products
                        If IsNull(SSv_ext) OR (SSv_ext = "") Then
                                ' blank extention e.i. MAS
                                Default_Label = "MAS_"& UCase(SSpkg_name) &"_R_"& Format_Version( SSpkg_version, NULL )
                        Else
                                Default_Label = UCase( Replace(SSv_ext, ".", "") ) &"_"& UCase(SSpkg_name) &"_R_"& Format_Version( SSpkg_version, SSv_ext )
                        End If
                Else
                        ' For others
                        Default_Label = SSpkg_name &"_"& SSpkg_version

                End If

                rsTemp.Close()
                Set rsTemp = nothing
        Else
                If InStr(1, SSpkg_name, "ERG") = 1 Then
                        ' For ERG products
                        If IsNull(SSv_ext) OR (SSv_ext = "") Then
                                ' blank extention e.i. MAS
                                Default_Label = "MAS_"& UCase(SSpkg_name) &"_R_"& Format_Version( SSpkg_version, NULL )
                        Else
                                Default_Label = UCase( Replace(SSv_ext, ".", "") ) &"_"& UCase(SSpkg_name) &"_R_"& Format_Version( SSpkg_version, SSv_ext )
                        End If
                Else
                        ' For others
                        Default_Label = SSpkg_name &"_"& SSpkg_version
                End If
        End If
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Format_Version ( SSpkg_version, SSv_ext )
        Dim tempArr, tempVersion, patchArr, seg, myVersion
        myVersion = SSpkg_version

        If NOT IsNull(SSv_ext) Then
                myVersion = Left ( myVersion, Len(myVersion) - Len(SSv_ext) )
        End If

        tempArr = Split (myVersion, ".")
        For Each seg In tempArr
                If Len(seg) < 2 Then
                        ' single digit number
                        tempVersion = tempVersion &"0"& seg

                Else
                        seg = Replace(seg, "_", "-")    ' make sure that there is no _ in segment
                        If InStr( seg, "-" ) > 0 Then
                                ' patch version supplied
                                patchArr = Split(seg, "-")
                                If Len(patchArr(0)) < 2 Then
                                        ' single digit number
                                        tempVersion = tempVersion &"0"& patchArr(0) &"_0"& patchArr(1)
                                Else
                                        ' double digit number
                                        tempVersion = tempVersion & patchArr(0) &"_0"& patchArr(1)
                                End If

                        Else
                                ' double digit no patch
                                tempVersion = tempVersion & seg
                        End If

                End If

        Next

        Format_Version = tempVersion
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function DefineStateIcon ( NNpkg_state, CCdlocked, sIgnoreWarnings, cIsPatchIgnore, cBuildType, bForEnvironment )

        If NOT IsNull(sIgnoreWarnings) Then
                '-- Ignore Warning is on
                If IsNull(cIsPatchIgnore) Then
                        DefineStateIcon = enum_imgIgnoring
                Else
                        DefineStateIcon = enum_imgPatchIgnoring
                End If

        Else
                Select Case CInt( NNpkg_state )
                        Case enumPKG_STATE_OK
                                If (CCdlocked = "N") OR (CCdlocked = "R") OR (CCdlocked = "P") Then
                                        DefineStateIcon = enum_imgBuilding
                                Else
                                        DefineStateIcon = enum_imgBlank
                                End If

                        Case enumPKG_STATE_MAJOR
                                DefineStateIcon = enum_imgCritical

                        Case enumPKG_STATE_MINOR
                                DefineStateIcon = enum_imgWarning

                        Case enumPKG_STATE_MAJOR_READY
                                DefineStateIcon = enum_imgCReady

                        Case enumPKG_STATE_MINOR_READY
                                DefineStateIcon = enum_imgWReady

                        Case enumPKG_NOT_FOUND
                                DefineStateIcon = enum_imgNotFound

                        Case enumPKG_STATE_NEW_PATCH
                                DefineStateIcon = enum_imgPatchAvailable

                        Case enumPKG_STATE_DEPRECATED
                                DefineStateIcon = enum_imgDeprecated

                        Case enumPKG_STATE_DEPRECATED_DEPENDENT
                                DefineStateIcon = enum_imgDeprecatedDependent

                        Case enumPKG_ADVISORY_RIPPLE
                                DefineStateIcon = enum_imgAR

                        Case enumPKG_ADVISORY_RIPPLE_DEPENDENT
                                DefineStateIcon = enum_imgARD


                End Select

                If (NOT bForEnvironment) AND _
                   (cBuildType = "A") AND _
                   (CCdlocked <> "Y") AND _
                   (DefineStateIcon <> enum_imgBlank) AND _
                   (DefineStateIcon <> enum_imgBuilding)  AND  _
                   (DefineStateIcon <> enum_imgNotFound) OR _
                   ( Request("rtag_id") = ""  AND  Request("FRrtag_id") = "")  _
                   Then

                   DefineStateIcon = ""

                 End If


        End If


End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function DefineStateSmallIcon ( NNpkg_state, CCdlocked )
        Select Case CInt( NNpkg_state )
        Case enumPKG_STATE_OK
                If CCdlocked = "N" Then
                        DefineStateSmallIcon = enum_SMALL_imgBuilding
                Else
                        DefineStateSmallIcon = enum_SMALL_imgOK
                End If

        Case enumPKG_STATE_MAJOR
                DefineStateSmallIcon = enum_SMALL_imgCritical

        Case enumPKG_STATE_MINOR
                DefineStateSmallIcon = enum_SMALL_imgWarning

        Case enumPKG_STATE_MAJOR_READY
                DefineStateSmallIcon = enum_SMALL_imgCReady

        Case enumPKG_STATE_MINOR_READY
                DefineStateSmallIcon = enum_SMALL_imgWReady

        End Select
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function PatchIcon ( cIsPatch, cIsPatchObsolete )
        If IsNull(cIsPatch) Then
                PatchIcon = "<img src='images/rex_images/ext_blank.gif' width='16' height='16' border='0' align='absmiddle'>"
        Else
                If IsNull(cIsPatchObsolete) Then
                        PatchIcon = "<img src='images/i_patch_small.gif' width='16' height='16' border='0' align='absmiddle' >"
                Else
                        PatchIcon = "<img src='images/i_patch_small_obsolete.gif' width='16' height='16' border='0' align='absmiddle' title='Patch is obsolete'>"
                End If
        End If
End Function
'-----------------------------------------------------------------------------------------------------------------------------
' Function that returns true of false if the item exists in the array
'-----------------------------------------------------------------------------------------------------------------------------
Function inArray(item, aItems)
        Dim element
        inArray = false
        for each element in aItems
                If element = item Then
                        inArray=true
                End If
        next
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function ProgressBar ()
        ProgressBar = "<DIV name='divProgressBar' id='divProgressBar' style='visibility:hidden;'><img src='icons/i_processing.gif' width='79' height='14'></DIV>"
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function GetCurrentParameters( nProjId, nRtagId, nPvId )
        Dim rsQry,query

        ' Set defaults
        nProjId         = -1
        nRtagId         = -1
        nPvId           = -1


        ' Get parameters from database
        OraDatabase.Parameters.Add "ProjId",            Request("proj_id"),     ORAPARM_INPUT, ORATYPE_VARCHAR2
        OraDatabase.Parameters.Add "Rtag_id",           Request("rtag_id"),     ORAPARM_INPUT, ORATYPE_VARCHAR2
        OraDatabase.Parameters.Add "results",           NULL, ORAPARM_OUTPUT, ORATYPE_CURSOR

        OraDatabase.ExecuteSQL " BEGIN  PK_APP_UTILS.GET_CURRENT_PARAMETERS ( :ProjId, :Rtag_id, :results ); END;"

        Set rsQry = OraDatabase.Parameters("results").Value

        OraDatabase.Parameters.Remove "ProjId"
        OraDatabase.Parameters.Remove "Rtag_id"
        OraDatabase.Parameters.Remove "results"


        If rsQry.RecordCount > 0 Then

                nProjId         = CDbl(rsQry("PROJ_ID"))
                nRtagId         = CDbl(rsQry("RTAG_ID"))

        End If

        rsQry.Close()
        Set rsQry = nothing


        ' Set pv_id parameter
        If Request("pv_id") <> "" Then nPvId = CDbl(Request("pv_id"))


End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function GetEnvName ( nEnvTab )
        Select Case CInt( nEnvTab )
                Case enumENVTAB_WORK_IN_PROGRESS
                        GetEnvName = "Work In Progress"

                Case enumENVTAB_PLANNED
                        GetEnvName = "Pending"

                Case enumENVTAB_RELEASED
                        GetEnvName = "Released"

        End Select

End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function Title (rtagId)

        If rtagId = "" Then
                Title = "Release Manager"
        Else
                Set rsQry = OraDatabase.DbCreateDynaset( "SELECT RT.RTAG_NAME, P.PROJ_NAME FROM PROJECTS P, RELEASE_TAGS RT WHERE RT.PROJ_ID = P.PROJ_ID AND RT.RTAG_ID="& rtagId, ORADYN_DEFAULT )
                Title = rsQry("proj_name")&">"&rsQry("rtag_name")
                rsQry.Close()
                Set rsQry = Nothing
        End If

End Function
'-------------------------------------------------------------------------------------
Function Check_Package_WIP_Already_Exists(NNrtag_id, NNpv_id)
        Dim Query_String, rsQry

        Query_String = _
        "       SELECT * "&_
        "       FROM planned pl, package_versions pv "&_
        "       WHERE pl.rtag_id = "& NNrtag_id &_
        "       AND pv.pv_id = pl.pv_id "&_
        "       AND pv.dlocked = 'A' "&_
        "       AND pv.pkg_id = (SELECT pkg_id "&_
        "                  FROM package_versions "&_
        "                 WHERE pv_id = "& NNpv_id &") "&_
        "       AND pv.v_ext = (SELECT v_ext "&_
        "                  FROM package_versions "&_
        "                 WHERE pv_id = "& NNpv_id &")"


        Set rsQry = OraDatabase.DbCreateDynaset( Query_String , cint(0) )

        Check_Package_WIP_Already_Exists = rsQry.RecordCount

        rsQry.Close()
        Set rsQry = Nothing
End Function
'-----------------------------------------------------------------------------------------------------------------------------
Function ValidateCodeReviewURL ( sCodeReviewURL )
  Dim isValid
  Dim sTempBaseURL
  Dim httpRegEx
        Set httpRegEx = new RegExp

        httpRegEx.Pattern = "^https?:\/\/"

        ' Removes ending slash from project's base URL for ease of comparison.
        sTempBaseURL = Left(baseURL, Len(baseURL)-1)
        ' Removes the project's base URL from the URL specified (if it's present).
        codeReviewURL = Replace(sCodeReviewURL, sTempBaseURL, "")
        ' Removes the slash from the beginning of the resulting URL (if it's present).
        If InStr(codeReviewURL, "/") = 1 Then
          codeReviewURL = Replace(codeReviewURL, "/", "", 1, 1)
        End If

        ' If the URL doesn't contain the http:// prefix, assume that it's correct.
        If NOT httpRegEx.Test(codeReviewURL) AND Len(codeReviewURL) > 0 Then
          isValid = True
        Else
          ' If the URL still contains the http:// prefix and is longer than the base
          ' URL, assume that it is an invalid URL because of a differing base URL.
          If Len(sCodeReviewURL) > Len(baseURL) Then
            Response.Write("<script type='text/javascript'>alert('Incorrect Base URL\n\nMust start with project\'s base url (" & baseURL &") if full URL specified.')</script>")
          Else
          ' If the URL still contains the http:// prefix and is shorter than the base
          ' URL, assume that it is incomplete.
            Response.Write("<script type='text/javascript'>alert('Incomplete Code Review URL')</script>")
          End If
          ' Otherwise, the URL matches the base URL exactly, which is also invalid.
          codeReviewURL = sCodeReviewURL
          isValid = False
        End If
        ValidateCodeReviewURL = isValid
End Function
'----------------------------------------------------------------------------------------------------------------------------------------
Function Is_Page_Editable ( cDlocked )
        ' Editable if (   (unlocked OR rejected)
        '              OR ( NOT released/locked AND EditReleaseNotesInPending allowed)
        '              OR (released/locked AND EditNonCriticalInfoForLockedPackage allowed)
        '             )
        '             AND user logged in
        If (((cDlocked = "N") OR (cDlocked = "R")) OR ((cDlocked <> "Y") AND (objAccessControl.IsActive("EditReleaseNotesInPending"))) OR ((cDlocked = "Y") AND (objAccessControl.IsActive("EditNonCriticalInfoForLockedPackage")))) AND objAccessControl.UserLogedIn Then
                Is_Page_Editable = TRUE
        Else
                Is_Page_Editable = FALSE
        End If
End Function
'----------------------------------------------------------------------------------------------------------------------------------------
Function Is_Section_Editable ( )
        If scriptName = "fixed_issues.asp" AND objAccessControl.UserLogedIn Then
                Is_Section_Editable = TRUE
        Else
                Is_Section_Editable = FALSE
        End If
End Function
'----------------------------------------------------------------------------------------------------------------------------------------
Function Is_Critical_Section_Editable ( cDlocked )
        ' Editable if (   (unlocked OR rejected)
        '              OR ( NOT released/locked AND EditReleaseNotesInPending allowed)
        '              OR (released/locked AND EditCriticalInfoForLockedPackage allowed)
        '             )
        '             AND user logged in
        If (((cDlocked = "N") OR (cDlocked = "R")) OR ((cDlocked <> "Y") AND (objAccessControl.IsActive("EditReleaseNotesInPending"))) OR ((cDlocked = "Y") AND (objAccessControl.IsActive("EditCriticalInfoForLockedPackage")))) AND objAccessControl.UserLogedIn Then
                Is_Critical_Section_Editable = TRUE
        Else
                Is_Critical_Section_Editable = FALSE
        End If
End Function

'---------------------------------------------------------------
' Function: Codestriker_Command
'
' Purpose:   Forms a codestriker differencing command for use when
'            preparing codestriker reviews. This will be used mainly
'            on release notes pages.
'
' Arguments: old_label   : The previous or older label
'            new_label   : The current or newer label
'
Function Codestriker_Command (oldLabel, new_label)

        If ( IsNull(new_label) ) Then
                Codestriker_Command = "Label not defined"
        ElseIf (IsNull(oldLabel) OR oldLabel = "" ) Then
                Codestriker_Command = "jats CCdiff -new=" & new_label
        Else
                Codestriker_Command = "jats CCdiff -old=" & oldLabel & " -new=" & new_label
        End If
End Function

'---------------------------------------------------------------
' Function: BeyondCompare_Command
'
' Purpose:   Forms a beyond compare differencing command for use
'            in visual inspection of code baseline differences.
'            This will be used mainly on release notes pages.
'
' Arguments: old_label   : The previous or older label
'            new_label   : The current or newer label
'
Function BeyondCompare_Command (oldLabel, new_label)

        If ( IsNull(new_label) ) Then
                BeyondCompare_Command = "Label not defined"
        ElseIf (IsNull(oldLabel) OR oldLabel = "" ) Then
                BeyondCompare_Command = "No prior label to compare with"
        Else
                BeyondCompare_Command = "jats CCbc2 -old=" & oldLabel & " -new=" & new_label
        End If
End Function

'---------------------------------------------------------------
' Function: getLastNonRippleVersionPVID
'
' Purpose: returns the last non-ripple version of the package
'
' Arguments: this_pv_id : string
'
' Notes: In the past, users used to manually perform ripple builds.
'        This function does not detect those as ripples. It could be
'        made to do so but it would not be reliable. For example, it
'        could check to see if the word "ripple" appears in the
'        comments field of the record set of the SWL query.  That
'        might catch some of those records, but assumes the user
'        wrote the wor ripple into the comments (reason for version).
'
Function getLastNonRippleVersionPVID( this_pv_id )
        Dim queryResult
        Dim queryString
        Dim finalPVID
        Dim lastPVID

        ' default return value in case we never get into the loop
        finalPVID = this_pv_id

        ' Get record for this PVID
        queryString = "SELECT * FROM package_versions WHERE pv_id = " & this_pv_id

        Set queryResult = OraDatabase.DbCreateDynaset( queryString, cint(0))

        If ((NOT queryResult.BOF) AND (NOT queryResult.EOF)) Then

                ' If this version is a ripple built version, begin the process of finding its ancestral non-ripple built version
                If (queryResult("build_type") = "Y") Then

                        lastPVID = queryResult("last_pv_id")

                        ' We know we have some ripple built versions now, so arm the finalPVID for loop control
                        finalPVID = ""

                        ' Work back through the version history until we hit a record that is not a ripple build version
                        Do While ((NOT queryResult.BOF) AND (NOT queryResult.EOF) AND (NOT IsNull(lastPVID)) AND (finalPVID = ""))

                                queryString = "SELECT * FROM package_versions WHERE pv_id = " & lastPVID

                                Set queryResult = OraDatabase.DbCreateDynaset( queryString, cint(0))

                                ' if the package version is a ripple built one, go round the loop again, else trigger a loop exit
                                If ((NOT queryResult.BOF) AND (NOT queryResult.EOF) AND ( queryResult("build_type") = "Y")) Then
                                        lastPVID  = queryResult("last_pv_id")
                                Else
                                        finalPVID = lastPVID
                                End If
                        Loop
                End If
        End If

        queryResult.Close()
        Set queryResult = nothing

        getLastNonRippleVersionPVID = finalPVID
End Function

'---------------------------------------------------------------
' Function: getPreviousVersionPVID
'
' Purpose: returns the immediate predecssor version of the given
'          package version
'
' Arguments: this_pv_id : string
'
' Notes:
'
Function getPreviousVersionPVID( this_pv_id )
        Dim queryResult
        Dim queryString

        getPreviousVersionPVID = ""

        queryString = "SELECT * FROM package_versions WHERE pv_id = " & this_pv_id

        Set queryResult = OraDatabase.DbCreateDynaset( queryString, cint(0))

        If ((NOT queryResult.BOF) AND (NOT queryResult.EOF)) Then
                getPreviousVersionPVID = queryResult("last_pv_id")
        End If

        queryResult.Close()
        Set queryResult = nothing

End Function

'---------------------------------------------------------------
' Function: getOldLabel
'
' Purpose: Returns the previous label; if none then returns empty string
'
'          Since this operation is designed to fulfil the generation of
'          diff commands, there is no point in considering ripple
'          versions, since the only differences we find there are in
'          the build.pl files (for example). So, this function uses
'          some underlying methods that ignore ripple built versions
'          therefore concentrating on versions that someone has manually
'          gone and labelled, presumably because they changed some
'          source file other than build.pl.
'
' Arguments: pv_id       : Uniquely identifies this package version
'            last_pv_id  : Uniquely identifies the predecssor of this package version
' Notes:
'
Function getOldLabel (pv_id, last_pv_id)
        Dim queryResult
        Dim queryString

        getOldLabel = ""

        If( (NOT IsNull(last_pv_id)) AND (last_pv_id <> pv_id) ) Then

                ' Get the pv_id for the current version, and if necessary, work back through any ripple versions as necessary
                ' to get a non-ripple version ancestor
                pv_id = getLastNonRippleVersionPVID( pv_id )
                If (pv_id <> "") Then
                        ' get the pv_id of the previous version to the non-ripple version ancestor we just found.
                        ' It does not matter if we get a ripple version here. It is good enough to serve the purpose of version diff'ing
                        pv_id = getPreviousVersionPVID( pv_id )
                        If (pv_id <> "") Then
                                ' Get the complete row of data from the package versions table and extract the package label
                                queryString = "SELECT * FROM package_versions WHERE pv_id = " & pv_id
                                Set queryResult = OraDatabase.DbCreateDynaset( queryString, cint(0))
                                If ((NOT queryResult.BOF) AND (NOT queryResult.EOF)) Then
                                        getOldLabel = queryResult("pkg_label")
                                End If
                                queryResult.Close()
                                Set queryResult = nothing
                        End If
                End If

        End If

End Function

%>