Subversion Repositories DevTools

Rev

Rev 7289 | Rev 7349 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
119 ghuddy 1
<%
2
'=====================================================
129 ghuddy 3
'                COMMON SUBs Part 1
119 ghuddy 4
'=====================================================
5098 dpurdie 5
Const haveCommonSubs = 1
119 ghuddy 6
%>
7
<%
8
'-----------------------------------------------------------------------------------------------------------------------------
9
Sub CloseWindow
10
%>
11
<SCRIPT language="JavaScript" type="text/javascript">
12
<!--
13
self.close();
14
//-->
15
</SCRIPT>
16
<%
5957 dpurdie 17
Call Destroy_All_Objects
5590 dpurdie 18
Response.End
119 ghuddy 19
End Sub
20
'-----------------------------------------------------------------------------------------------------------------------------
21
Sub OpenChildWindow ( SStitle, SSurl, SSH, SSW, BBscroll )
129 ghuddy 22
   Dim scrlBar
23
   If BBscroll Then
24
      scrlBar = "yes"
25
   Else
26
      scrlBar = "no"
27
   End If
119 ghuddy 28
%>
129 ghuddy 29
   <script language="JavaScript" type="text/javascript">
30
   <!--
31
   window.open('<%=SSurl%>','<%=SStitle%>','scrollbars=<%=scrlBar%>,resizable=yes,width=<%=SSW%>,height=<%=SSH%>')
32
   //-->
33
   </script>
119 ghuddy 34
<%
35
End Sub
36
'-----------------------------------------------------------------------------------------------------------------------------
5590 dpurdie 37
'	Iframes do not have a window.opener
119 ghuddy 38
Sub OpenInParentWindow ( SSurl )
39
%>
129 ghuddy 40
   <script language="JavaScript" type="text/javascript">
41
   <!--
5590 dpurdie 42
	if (window.opener) {
43
	   window.opener.document.location='<%=SSurl%>';
44
   } else {
45
	   window.parent.location.href='<%=SSurl%>';
46
   }
129 ghuddy 47
   //-->
48
   </script>
119 ghuddy 49
<%
50
End Sub
51
'-----------------------------------------------------------------------------------------------------------------------------
5590 dpurdie 52
'	Iframes do not have a window.opener
53
Sub ReloadParentWindow ()
5549 dpurdie 54
%>
55
   <script language="JavaScript" type="text/javascript">
56
   <!--
5590 dpurdie 57
	if (window.opener) {
58
	   window.opener.location.reload(false);
59
   } else {
60
	   window.parent.location.reload(false);
61
   }
5549 dpurdie 62
   //-->
63
   </script>
64
<%
65
End Sub
66
'-----------------------------------------------------------------------------------------------------------------------------
119 ghuddy 67
Sub OpenInWindow ( SSurl )
5957 dpurdie 68
   Call Destroy_All_Objects
129 ghuddy 69
   Response.Redirect ( SSurl )
119 ghuddy 70
End Sub
71
'-----------------------------------------------------------------------------------------------------------------------------
72
Function GetQuery ( sQryName )
129 ghuddy 73
   GetQuery = ReadFile( QUERIES_PATH &"\"& sQryName )
119 ghuddy 74
End Function
75
'-----------------------------------------------------------------------------------------------------------------------------
76
Sub RaiseMsg ( SSerrFile, SSerrDesc )
129 ghuddy 77
   ' Usage: enumERROR, parval1 &"|"& parval2 &"|"& parval3 ...
78
   Session( enum_RELMGR_ERRDESCRIPTION ) = SSerrDesc
5957 dpurdie 79
   Call Destroy_All_Objects
129 ghuddy 80
   Response.Redirect ("messages/"& SSerrFile )
119 ghuddy 81
End Sub
82
'-----------------------------------------------------------------------------------------------------------------------------
83
Sub RaiseMsgInParent ( SSerrFile, SSerrDesc )
129 ghuddy 84
   Session( enum_RELMGR_ERRDESCRIPTION ) = SSerrDesc
85
   Call OpenInParentWindow ("messages/"& SSerrFile )
119 ghuddy 86
End Sub
87
'-----------------------------------------------------------------------------------------------------------------------------
88
Function ReadFile( SSpath )
129 ghuddy 89
   Dim filesys, rfile
90
   Set filesys = CreateObject("Scripting.FileSystemObject")
91
   Set rfile = filesys.OpenTextFile( SSpath, 1, false)
92
   ReadFile = rfile.ReadAll
93
   rfile.close
94
   Set filesys = nothing
119 ghuddy 95
End Function
96
'-----------------------------------------------------------------------------------------------------------------------------
97
Function HighlightSubstring ( SSstr, SSsubstr )
129 ghuddy 98
   Dim leftSTR, startPos
99
   startPos = InStr( 1, SSstr, SSsubstr, 1 )
119 ghuddy 100
 
129 ghuddy 101
   If startPos > 0 Then
102
      leftSTR = Left ( SSstr, startPos - 1 )
103
      HighlightSubstring = leftSTR &"<SPAN style='background:#ffff99;'>"& Mid( SSstr, startPos, Len(SSsubstr) ) &"</SPAN>"&  Right ( SSstr, Len(SSstr) - Len(leftSTR) - Len(SSsubstr)  )
104
   Else
105
      ' Subtring not found
106
      HighlightSubstring = SSstr
107
   End If
119 ghuddy 108
 
109
End Function
110
'-----------------------------------------------------------------------------------------------------------------------------
111
Sub DeleteFile( SSpath )
129 ghuddy 112
   Dim filesys
113
   Set filesys = CreateObject("Scripting.FileSystemObject")
114
   If filesys.FileExists(SSpath) Then
115
         filesys.DeleteFile SSpath, TRUE
116
   End If
117
   Set filesys = nothing
119 ghuddy 118
End Sub
119
'-----------------------------------------------------------------------------------------------------------------------------
120
Sub DeleteFolder( SSpath )
129 ghuddy 121
   Dim  filesys
122
   Set filesys = CreateObject ("Scripting.FileSystemObject")
123
   If filesys.FolderExists( SSpath ) Then
124
      'Set oFolder = filesys.GetFolder( SSpath )
125
      filesys.DeleteFolder SSpath ,TRUE
126
   End If
119 ghuddy 127
End Sub
128
'-----------------------------------------------------------------------------------------------------------------------------
129
Sub Create_Folder ( sCreateIn, sFolderName )
129 ghuddy 130
   Dim filesys, currfolder, folcoll, subfol
131
   Set filesys = CreateObject("Scripting.FileSystemObject")
132
   If filesys.FolderExists( sCreateIn ) Then
133
      Set currfolder = filesys.GetFolder( sCreateIn )
134
      Set folcoll = currfolder.SubFolders
135
      If NOT filesys.FolderExists( sCreateIn &"\"& sFolderName ) Then
136
         folcoll.Add( sFolderName )
137
      End If
138
   End If
119 ghuddy 139
End Sub
140
'-----------------------------------------------------------------------------------------------------------------------------
141
Function Folder_Is_Empty ( sPath )
129 ghuddy 142
   Dim filesys, oFolder
143
   Set filesys = CreateObject("Scripting.FileSystemObject")
119 ghuddy 144
 
129 ghuddy 145
   If filesys.FolderExists( sPath ) Then
146
      Set oFolder = filesys.GetFolder( sPath )
147
      If ( oFolder.Files.Count + oFolder.SubFolders.Count ) > 0 Then
148
         Folder_Is_Empty = FALSE
149
      Else
150
         Folder_Is_Empty = TRUE
151
      End If
152
   Else
153
      Folder_Is_Empty = TRUE
154
   End If
119 ghuddy 155
 
156
End Function
157
'-----------------------------------------------------------------------------------------------------------------------------
158
Function InStrPipes ( SSstr, SSsubstr )
129 ghuddy 159
   If InStr( SSstr, "|"& SSsubstr &"|") > 0 Then
160
      InStrPipes = true
161
   Else
162
      InStrPipes = false
163
   End If
119 ghuddy 164
End Function
165
'-----------------------------------------------------------------------------------------------------------------------------
166
Function RemoveFromStrPipes ( SSstr, SSsubstr )
129 ghuddy 167
   RemoveFromStrPipes = Replace( SSstr, "|"& SSsubstr &"|", "" )
119 ghuddy 168
End Function
169
'-----------------------------------------------------------------------------------------------------------------------------
170
Function View_Name_Exists ( SSviewname, NNused_id )
129 ghuddy 171
   Dim rsTemp, Query_String
172
   Query_String = _
173
   " SELECT view_name"&_
174
   "  FROM views"&_
175
   " WHERE UPPER(view_name) = UPPER('"& UCase(SSviewname) &"') AND owner_id = "& NNused_id
176
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
177
   If rsTemp.RecordCount > 0 Then
178
      View_Name_Exists = TRUE
179
   Else
180
      View_Name_Exists = FALSE
181
   End If
182
   rsTemp.Close
183
   Set rsTemp = nothing
119 ghuddy 184
End Function
185
'-----------------------------------------------------------------------------------------------------------------------------
186
Function User_Name_Exists ( SSusername )
129 ghuddy 187
   Dim rsTemp, Query_String
188
   Query_String = _
189
   " SELECT user_name"&_
190
   "  FROM users"&_
191
   " WHERE user_name = '"& SSusername &"'"
192
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
193
   If rsTemp.RecordCount > 0 Then
194
      User_Name_Exists = TRUE
195
   Else
196
      User_Name_Exists = FALSE
197
   End If
198
   rsTemp.Close
199
   Set rsTemp = nothing
119 ghuddy 200
End Function
201
'-----------------------------------------------------------------------------------------------------------------------------
202
Function This_View_Owner( NNview_id, NNuser_id )
129 ghuddy 203
   Dim rsTemp, Query_String
204
   Query_String = _
205
   " SELECT owner_id"&_
206
   "  FROM views"&_
207
   " WHERE view_id = "& NNview_id
208
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
209
   If rsTemp.RecordCount > 0 Then
210
      If CInt(rsTemp.Fields("owner_id")) = CInt(NNuser_id) Then
211
         This_View_Owner = TRUE
212
      Else
213
         This_View_Owner = FALSE
214
      End If
215
   Else
216
      ' view not found
5357 dpurdie 217
      Session("AdditionalParams") = "$ADMINEMAIL$,"& ADMIN_EMAIL
5957 dpurdie 218
      Call Destroy_All_Objects
129 ghuddy 219
      Response.Redirect("message.asp?msg=400-2")
220
   End If
221
   rsTemp.Close
222
   Set rsTemp = nothing
119 ghuddy 223
End Function
224
'-----------------------------------------------------------------------------------------------------------------------------
225
Function GetReleaseMode ( NNrtag_id )
5207 dpurdie 226
   GetReleaseInfo NNrtag_id
227
   GetReleaseMode = releaseInfoHash("official")
228
End Function
229
'-----------------------------------------------------------------------------------------------------------------------------
5251 dpurdie 230
'   Get basic Release Info on global releaseInfoHash
5207 dpurdie 231
'   List of fields may be extended as required (could use *)
6971 dpurdie 232
'
233
'   Cache the results
234
'       Largely to simplify a code refactor
235
'       Data will be read early, but may need to be changed
236
'
5207 dpurdie 237
Sub GetReleaseInfo ( NNrtag_id )
238
   Dim rsTemp, Query_String, item
129 ghuddy 239
   If NNrtag_id = "" Then NNrtag_id = "-1"
119 ghuddy 240
 
6971 dpurdie 241
   ' Do we already have the data
242
   If NOT (releaseInfoHash is Nothing) Then
243
       If Cdbl(releaseInfoHash("rtag_id") ) = CDbl(NNrtag_id) Then
244
           Exit Sub
245
        End If
246
    End If
247
 
248
 
5207 dpurdie 249
   Set releaseInfoHash = CreateObject("Scripting.Dictionary")
6971 dpurdie 250
   Query_String = " SELECT rt.RTAG_ID ,rt.rtag_name, proj.proj_id, proj.proj_name,rt.lxr, rt.official," &_
5251 dpurdie 251
                  "   NVL(lx.lxrserver, 'N') as lxrserver" &_
6971 dpurdie 252
                  " FROM Release_tags rt, projects proj, lxr_state lx"&_
5251 dpurdie 253
                  " WHERE rt.RTAG_ID = lx.RTAG_ID(+)"&_
6971 dpurdie 254
                  " AND rt.proj_id = proj.proj_id" &_
5251 dpurdie 255
                  " AND rt.RTAG_ID = " & NNrtag_id
256
 
129 ghuddy 257
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
258
   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
5207 dpurdie 259
      For Each item In rsTemp.Fields 
5251 dpurdie 260
        'Response.Write("<br><pre> item:" & Lcase(item.name) & ":" & item & "</pre>")
5207 dpurdie 261
        releaseInfoHash.Add  Lcase(item.name), item.value
262
      Next
129 ghuddy 263
   End If
119 ghuddy 264
 
129 ghuddy 265
   rsTemp.Close
266
   Set rsTemp = nothing
5207 dpurdie 267
End Sub
268
 
119 ghuddy 269
'-----------------------------------------------------------------------------------------------------------------------------
5020 dpurdie 270
Function Get_Devl_Environment
271
   If Request.Cookies(COOKIE_RELEASEMANAGER_MEMORY)("devl_environment") <> "" Then
272
      If Request.Cookies(COOKIE_RELEASEMANAGER_MEMORY)("devl_environment") = "clearcase" Then
273
         Get_Devl_Environment = "jats"      'clear case does not have import
129 ghuddy 274
      Else
5020 dpurdie 275
         Get_Devl_Environment = Request.Cookies(COOKIE_RELEASEMANAGER_MEMORY)("devl_environment")
129 ghuddy 276
      End If
277
   Else
5020 dpurdie 278
      Get_Devl_Environment = "jats"      'JATS devl enviroment is set by default
129 ghuddy 279
   End If
119 ghuddy 280
End Function
281
'-----------------------------------------------------------------------------------------------------------------------------
282
Function Get_From_DUAL ( SSclm )
129 ghuddy 283
   Dim rsTemp, Query_String, OraSession2, OraDatabase2
284
   Set OraSession2 = CreateObject("OracleInProcServer.XOraSession")
285
   Set OraDatabase2 = OraSession2.OpenDatabase( TNS_NAME, DB_AUTHENTICATION, Cint(0))
119 ghuddy 286
 
129 ghuddy 287
   Query_String = _
288
   " SELECT "& SSclm &" AS result FROM DUAL"
289
   Set rsTemp = OraDatabase2.DbCreateDynaset( Query_String, cint(0))
119 ghuddy 290
 
129 ghuddy 291
   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
292
      Get_From_DUAL = (rsTemp.Fields("result"))
293
   End If
119 ghuddy 294
 
129 ghuddy 295
   rsTemp.Close
296
   Set rsTemp = nothing
297
   Set OraDatabase2 = nothing
298
   Set OraSession2 = nothing
119 ghuddy 299
End Function
300
'-----------------------------------------------------------------------------------------------------------------------------
6694 dpurdie 301
' Try to replace usage with : DB_PROJ_ID
119 ghuddy 302
Function Get_Proj_ID ( SSrtag_id )
129 ghuddy 303
   Dim rsTemp, Query_String
119 ghuddy 304
 
129 ghuddy 305
   Query_String = _
306
   " SELECT projects.proj_id"&_
307
   "   FROM projects projects, release_tags rel"&_
308
   "  WHERE projects.proj_id = rel.proj_id"&_
309
   "    AND rel.rtag_id = "& SSrtag_id
119 ghuddy 310
 
129 ghuddy 311
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
119 ghuddy 312
 
129 ghuddy 313
   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
314
      Get_Proj_ID = (rsTemp.Fields("proj_id"))
315
   End If
119 ghuddy 316
 
129 ghuddy 317
   rsTemp.Close
318
   Set rsTemp = nothing
119 ghuddy 319
End Function
320
'-----------------------------------------------------------------------------------------------------------------------------
6694 dpurdie 321
' Try to replace usage with : DB_PROJ_NAME
119 ghuddy 322
Function Get_Proj_Name ( NNproj_id )
129 ghuddy 323
   Dim rsTemp, Query_String
119 ghuddy 324
 
159 ghuddy 325
   Get_Proj_Name = ""
326
 
129 ghuddy 327
   Query_String = _
328
   " SELECT proj_name "&_
329
   "   FROM projects pr "&_
119 ghuddy 330
  "  WHERE pr.proj_id = "& NNproj_id
331
 
129 ghuddy 332
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
119 ghuddy 333
 
129 ghuddy 334
   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
335
      Get_Proj_Name = (rsTemp.Fields("proj_name"))
336
   End If
119 ghuddy 337
 
129 ghuddy 338
   rsTemp.Close
339
   Set rsTemp = nothing
119 ghuddy 340
End Function
341
'-----------------------------------------------------------------------------------------------------------------------------
159 ghuddy 342
Function Get_Release_Name ( NNrtag_id )
343
   Dim rsTemp, Query_String
344
 
345
   Get_Release_Name = ""
346
 
347
   Query_String = _
348
   " SELECT rtag_name "&_
349
   "   FROM release_tags rt "&_
350
  "  WHERE rt.rtag_id = "& NNrtag_id
351
 
352
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
353
 
354
   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
355
      Get_Release_Name = (rsTemp.Fields("rtag_name"))
356
   End If
357
 
358
   rsTemp.Close
359
   Set rsTemp = nothing
360
End Function
361
'-----------------------------------------------------------------------------------------------------------------------------
119 ghuddy 362
Function Get_Base_URL ( NNproj_id )
129 ghuddy 363
   Dim rsTemp, Query_String
119 ghuddy 364
 
129 ghuddy 365
   Query_String = _
366
   " SELECT base_url "&_
367
   "   FROM projects pr "&_
119 ghuddy 368
  "  WHERE pr.proj_id = "& NNproj_id
369
 
129 ghuddy 370
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
119 ghuddy 371
 
129 ghuddy 372
   Get_Base_URL = rsTemp("base_url")
119 ghuddy 373
 
129 ghuddy 374
   rsTemp.Close()
375
   Set rsTemp = nothing
119 ghuddy 376
End Function
377
'-----------------------------------------------------------------------------------------------------------------------------
378
Function Get_Categories ( NNrtag_id )
129 ghuddy 379
   Get_Categories = _
380
   " SELECT vi.view_id, vi.view_name"&_
381
   "  FROM release_content rel,"&_
382
   "       views vi"&_
383
   " WHERE rel.base_view_id = vi.view_id"&_
384
   "   AND rtag_id = "& NNrtag_id &_
385
   " GROUP BY vi.view_id, vi.view_name   "&_
386
   " ORDER BY vi.view_name ASC "
119 ghuddy 387
End Function
388
'-----------------------------------------------------------------------------------------------------------------------------
389
Function Get_PV_IDs_In_Release ( NNrtag_id )
390
    Dim rsTemp, Query_String, tempSTR
129 ghuddy 391
   tempSTR = "-1"
392
   Query_String = _
393
   "SELECT pv_id FROM release_content WHERE rtag_id = "& NNrtag_id
119 ghuddy 394
 
129 ghuddy 395
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
119 ghuddy 396
 
129 ghuddy 397
   While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
398
      tempSTR = tempSTR &","& rsTemp.Fields("pv_id")
399
      rsTemp.MoveNext
400
   WEnd
401
   Get_PV_IDs_In_Release = tempSTR
402
   rsTemp.Close
403
   Set rsTemp = nothing
119 ghuddy 404
End Function
405
'-----------------------------------------------------------------------------------------------------------------------------
406
Sub Get_Pkg_Info ( SSpv_id, NNrtag )
4687 dpurdie 407
   Dim rsTemp, Query_String, isaRelease
6184 dpurdie 408
   Dim opCodeListString, opCodeList, opCodeStr
409
 
4687 dpurdie 410
   OraDatabase.Parameters.Add "PV_ID",         SSpv_id,   ORAPARM_INPUT, ORATYPE_NUMBER
411
   OraDatabase.Parameters.Add "RTAG_ID",       NNrtag,    ORAPARM_INPUT, ORATYPE_NUMBER
183 brianf 412
   OraDatabase.Parameters.Add "RETURN_NUMBER", NULL,      ORAPARM_OUTPUT, ORATYPE_NUMBER   
6184 dpurdie 413
   OraDatabase.Parameters.Add "OP_CODE_LIST",  NULL,      ORAPARM_OUTPUT, ORATYPE_VARCHAR2
119 ghuddy 414
 
6497 dpurdie 415
   isaRelease = NOT ((NNrtag = "") or (IsNull(NNrtag)))
416
   pkgInfoHash.Add "isaRelease", isaRelease
6176 dpurdie 417
 
4767 dpurdie 418
   '-- can_unofficial
419
   '   Limits the ability to unrelease a package version
129 ghuddy 420
   pkgInfoHash.Item ("can_unofficial") = "false"
119 ghuddy 421
 
4767 dpurdie 422
   '--  can_edit_in_project
423
   '    Property of the release, the user and the package
424
   '    Limits the ability to add a package to a release
425
   '        
426
   pkgInfoHash.Item ("can_edit_in_project") = "0"
427
 
4687 dpurdie 428
   '-- Get Package Details
129 ghuddy 429
   Set rsTemp = OraDatabase.DbCreateDynaset( GetQuery("PackageDetails.sql"), cint(0))
119 ghuddy 430
 
129 ghuddy 431
   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
432
      pkgInfoHash.Add "pv_id", (rsTemp.Fields("pv_id"))
433
      pkgInfoHash.Add "pkg_id", (rsTemp.Fields("pkg_id"))
434
      pkgInfoHash.Add "pkg_name", (rsTemp.Fields("pkg_name"))
435
      pkgInfoHash.Add "pkg_version", (rsTemp.Fields("pkg_version"))
436
      pkgInfoHash.Add "v_ext", (rsTemp.Fields("v_ext"))
437
      pkgInfoHash.Add "comments", (rsTemp.Fields("comments"))
119 ghuddy 438
 
129 ghuddy 439
      pkgInfoHash.Add "modified_stamp", (rsTemp.Fields("modified_stamp"))
440
      pkgInfoHash.Add "modifier", (rsTemp.Fields("modifier"))
441
      pkgInfoHash.Add "modifier_id", (rsTemp.Fields("modifier_id"))
442
      pkgInfoHash.Add "modifier_email", (rsTemp.Fields("modifier_email"))
119 ghuddy 443
 
129 ghuddy 444
      pkgInfoHash.Add "created_stamp", (rsTemp.Fields("created_stamp"))
445
      pkgInfoHash.Add "creator", (rsTemp.Fields("creator"))
5929 dpurdie 446
      pkgInfoHash.Add "creator_id", (rsTemp.Fields("creator_id"))
129 ghuddy 447
      pkgInfoHash.Add "creator_email", (rsTemp.Fields("creator_email"))
119 ghuddy 448
 
129 ghuddy 449
      pkgInfoHash.Add "owner", (rsTemp.Fields("owner"))
5929 dpurdie 450
      pkgInfoHash.Add "owner_id", (rsTemp.Fields("owner_id"))
129 ghuddy 451
      pkgInfoHash.Add "owner_email", (rsTemp.Fields("owner_email"))
119 ghuddy 452
 
129 ghuddy 453
      pkgInfoHash.Add "dlocked", (rsTemp.Fields("dlocked"))
4687 dpurdie 454
 
129 ghuddy 455
      pkgInfoHash.Add "pkg_label", (rsTemp.Fields("pkg_label"))
456
      pkgInfoHash.Add "src_path", (rsTemp.Fields("src_path"))
457
      pkgInfoHash.Add "pv_description", (rsTemp.Fields("pv_description"))
458
      pkgInfoHash.Add "last_pv_id", (rsTemp.Fields("last_pv_id"))
459
      pkgInfoHash.Add "previous_version", (rsTemp.Fields("previous_version"))
460
      pkgInfoHash.Add "release_notes_info", (rsTemp.Fields("release_notes_info"))
119 ghuddy 461
 
129 ghuddy 462
      pkgInfoHash.Add "is_patch", (rsTemp.Fields("is_patch"))
463
      pkgInfoHash.Add "is_obsolete", (rsTemp.Fields("is_obsolete"))
464
      pkgInfoHash.Add "obsolete_comments", (rsTemp.Fields("obsolete_comments"))
119 ghuddy 465
 
129 ghuddy 466
      pkgInfoHash.Add "build_type", (rsTemp.Fields("build_type"))
467
      pkgInfoHash.Add "change_type", (rsTemp.Fields("change_type"))
468
      pkgInfoHash.Add "bs_id", (rsTemp.Fields("bs_id"))
469
      pkgInfoHash.Add "is_deployable", (rsTemp.Fields("is_deployable"))
470
      pkgInfoHash.Add "sbom_priority", (rsTemp.Fields("sbom_priority"))
471
      pkgInfoHash.Add "ripple_field", (rsTemp.Fields("ripple_field"))
472
   End If
119 ghuddy 473
 
6176 dpurdie 474
    If (pkgInfoHash.Item ("dlocked") = "Y") OR pkgInfoHash.Item("build_type") = "M" Then
475
        pkgInfoHash.Add "isInArchive", testArchiveAccessPkg(pkgInfoHash.Item ("pkg_name"), pkgInfoHash.Item ("pkg_version"))
476
    End If
477
 
4687 dpurdie 478
   If isaRelease Then
479
      '-- Find if package is editable in this project
4767 dpurdie 480
      '   Not editable if
481
      '     Imported via a Reference Package
5080 dpurdie 482
      '     Imported via an SDK
4767 dpurdie 483
      '     Release is not in Open or Restricted Mode
484
      '     Project extenstion is project specific - and not within the allowed project
485
      '     
4687 dpurdie 486
      OraDatabase.ExecuteSQL "BEGIN  :RETURN_NUMBER := CAN_EDIT_PKG_IN_PROJECT( :PV_ID, :RTAG_ID );  END;"
4767 dpurdie 487
      pkgInfoHash.Item ("can_edit_in_project") = CStr( OraDatabase.Parameters("RETURN_NUMBER").Value )
119 ghuddy 488
 
4687 dpurdie 489
       '-- Get Package Release Details
490
       Set rsTemp = OraDatabase.DbCreateDynaset( GetQuery("PackageReleaseDetails.sql"), cint(0))
119 ghuddy 491
 
4687 dpurdie 492
       If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
493
          pkgInfoHash.Add "insert_stamp", (rsTemp.Fields("insert_stamp"))
494
          pkgInfoHash.Add "insertor", (rsTemp.Fields("insertor"))
495
          pkgInfoHash.Add "insertor_email", (rsTemp.Fields("insertor_email"))
496
          pkgInfoHash.Add "used_count", (rsTemp.Fields("used_count"))
119 ghuddy 497
 
4687 dpurdie 498
          pkgInfoHash.Item ("base_view_id") = (rsTemp.Fields("base_view_id"))
6642 dpurdie 499
          pkgInfoHash.Item ("view_name") = (rsTemp.Fields("view_name"))
4687 dpurdie 500
          pkgInfoHash.Item ("pkg_state") = (rsTemp.Fields("pkg_state"))
501
          pkgInfoHash.Item ("deprecated_state") = (rsTemp.Fields("deprecated_state"))
502
          pkgInfoHash.Item ("product_state") = (rsTemp.Fields("product_state"))
119 ghuddy 503
 
4687 dpurdie 504
          pkgInfoHash.Add "proj_id", (rsTemp.Fields("proj_id"))
505
          pkgInfoHash.Add "rtag_id", (rsTemp.Fields("rtag_id"))
506
          pkgInfoHash.Add "rtag_name", (rsTemp.Fields("rtag_name"))
507
          pkgInfoHash.Add "product_state_used", (rsTemp.Fields("product_state_used"))
5080 dpurdie 508
          pkgInfoHash.Add "sdktag_id", (rsTemp.Fields("sdktag_id"))
509
          pkgInfoHash.Add "is_sdkpkg", (NOT IsNull(rsTemp.Fields("sdktag_id")))
5098 dpurdie 510
          pkgInfoHash.Add "is_pegged", (rsTemp.Fields("pegged") <> 0)
6440 dpurdie 511
          pkgInfoHash.Add "ripple_stop", rsTemp.Fields("ripple_stop")
512
          pkgInfoHash.Add "persist_ripple_stop", rsTemp.Fields("persist_ripple_stop")
6642 dpurdie 513
          pkgInfoHash.Add "advisory_ripple", rsTemp.Fields("advisory_ripple") <> 0
5080 dpurdie 514
 
4764 dpurdie 515
       Else
4767 dpurdie 516
          ' -- Package Version is not a member of the specified release
517
          '    Get Basic Release and Project Details
518
          Query_String = " select pj.PROJ_ID, rt.RTAG_ID,rt.rtag_name " &_
519
                         " from projects pj, release_tags rt" &_
520
                         " where rt.rtag_id=:RTAG_ID" &_
521
                         " and rt.PROJ_ID = pj.PROJ_ID"
522
 
523
          Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
524
 
525
          If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
526
              pkgInfoHash.Add "proj_id",   (rsTemp.Fields("proj_id"))
527
          	  pkgInfoHash.Add "rtag_id",   (rsTemp.Fields("rtag_id"))
528
          	  pkgInfoHash.Add "rtag_name", (rsTemp.Fields("rtag_name"))
529
          End If
4764 dpurdie 530
 
4767 dpurdie 531
          ' -- Determine if package is a member of this release
532
          '    Mark as Not in Release
5964 dpurdie 533
          Query_String = "select pv_id, 0 as env_area from work_in_progress where rtag_id=:RTAG_ID and pv_id=:PV_ID" &_
4767 dpurdie 534
                          " union" &_
5964 dpurdie 535
                          " select pv_id, 1 as env_area from planned where rtag_id=:RTAG_ID and pv_id=:PV_ID" &_
4767 dpurdie 536
                          " union" &_
5964 dpurdie 537
                          " select pv_id, 2 as env_area from RELEASE_CONTENT where rtag_id=:RTAG_ID and pv_id=:PV_ID"
4767 dpurdie 538
          Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
539
          If rsTemp.RecordCount < 1 Then
540
               pkgInfoHash.Item ("notInRelease") = true
5846 dpurdie 541
               '
542
               ' -- Determine related package that is in the release
543
               '    Use pkg_id and v_ext to locate package
5854 dpurdie 544
               If pkgInfoHash.Item ("pkg_id") <> "" Then
545
                   Query_String = "SELECT pv.PV_ID" &_
546
                                  " FROM RELEASE_CONTENT rc, package_versions pv " &_ 
547
                                  " WHERE rc.rtag_id = :RTAG_ID" &_
548
                                  " and rc.PV_ID = pv.pv_id" &_
549
                                  " and pv.pkg_id = " & pkgInfoHash.Item ("pkg_id") &_ 
550
                                  " and NVL(pv.v_ext,'') = NVL('"&pkgInfoHash.Item ("v_ext")&"', '')"
551
                   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
552
                   If rsTemp.RecordCount > 0 Then
553
                    pkgInfoHash.Item ("pv_id_InRelease") = (rsTemp.Fields("pv_id"))
554
                   End If
5846 dpurdie 555
               End If
5964 dpurdie 556
          Else
557
            If rsTemp("env_area") = 0 Then
558
                 pkgInfoHash.Item ("is_wip") = True
559
            End If
4767 dpurdie 560
          End If
4764 dpurdie 561
 
4687 dpurdie 562
       End If
119 ghuddy 563
 
6827 dpurdie 564
       ' Determine if user can make the the package 'unofficial'
4767 dpurdie 565
       If     (pkgInfoHash.Item ("dlocked") = "Y") _
129 ghuddy 566
         AND  (pkgInfoHash.Item ("build_type") = "M") _
567
         AND  (CDate( FormatDateTime(pkgInfoHash.Item ("modified_stamp"), 2) ) = Date) _
568
         AND  (pkgInfoHash.Item("can_edit_in_project") = "1" ) _
6188 dpurdie 569
       Then
570
            pkgInfoHash.Item ("can_unofficial") = "true"
571
       End If
572
 
573
      '
574
      ' Determine if there is a deamon instruction on this package in this release
575
      ' Also: OraDatabase.ExecuteSQL "BEGIN :OP_CODE_LIST := PK_BUILDAPI.daemon_ops_for_rtag("& nRtag_id & "); END;"
576
      objEH.TryORA ( OraSession )
577
      ON ERROR RESUME NEXT
578
      OraDatabase.ExecuteSQL "BEGIN :OP_CODE_LIST := PK_BUILDAPI.daemon_ops_for_rtag_pvid(:RTAG_ID,:PV_ID); END;"
579
      objEH.CatchORA ( OraSession )
580
      ON ERROR GOTO 0
581
      opCodeListString  = OraDatabase.Parameters("OP_CODE_LIST").Value
582
 
583
      If NOT IsNull(opCodeListString) AND opCodeListString <> "" Then
584
         opCodeList = Split(opCodeListString, ",")
585
         For Each opCodeStr In opCodeList
586
            If opCodeStr = OP_CODE_0_RIPPLE_BUILD_PACKAGE  Then
587
                pkgInfoHash.Add "hasRippleInstr", 1
588
            End If
589
            If  opCodeStr = OP_CODE_1_TEST_BUILD_PACKAGE  Then
590
                pkgInfoHash.Add "hasTestInstr", 1
591
            End If
7022 dpurdie 592
            If  opCodeStr = OP_CODE_2_FUTURE_BUILD  Then
593
                pkgInfoHash.Add "hasFutureBuild", 1
594
            End If
6188 dpurdie 595
         Next
129 ghuddy 596
      End If
119 ghuddy 597
 
6184 dpurdie 598
   Else     ' NOT isaRelease
5951 dpurdie 599
      If pkgInfoHash.Exists ("modified_stamp") Then
600
          If NOT IsNull(pkgInfoHash.Item ("modified_stamp").Value) Then
601
              If (CDate( FormatDateTime(pkgInfoHash.Item ("modified_stamp"), 2) ) = Date) Then
602
                 ' Must be not older then a day
603
                 If (pkgInfoHash.Item ("dlocked") = "A")  OR   NOT IsNull(pkgInfoHash.Item("is_patch")) Then
604
                    pkgInfoHash.Item ("can_unofficial") = "true"
605
                 End If
606
              End If
607
          End If
608
     End If
6184 dpurdie 609
   End If   ' End isaRelease
119 ghuddy 610
 
4687 dpurdie 611
   '-- Get Patch Parent
129 ghuddy 612
   If pkgInfoHash.Item ("is_patch") = "Y" Then
613
      Set rsTemp = OraDatabase.DbCreateDynaset( GetQuery("PatchParent.sql"), cint(0))
119 ghuddy 614
 
129 ghuddy 615
      If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
616
         pkgInfoHash.Add "patch_parent_id", (rsTemp.Fields("pv_id"))
617
      End If
618
   End If
119 ghuddy 619
 
129 ghuddy 620
   ' DEVI-45275 - Check if version is in the planned table and if so get its planned operation type
621
   ' which denotes whether it is an existing version being added to a release, an existing version
622
   ' being removed from a release, or a new version being prepared for a release.
623
   Set rsTemp = OraDatabase.DbCreateDynaset( GetQuery("PlannedPackageVersionDetails.sql"), cint(0))
119 ghuddy 624
 
129 ghuddy 625
   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
626
      pkgInfoHash.Add "planned_operation", (rsTemp.Fields("operation"))
627
   Else
628
      pkgInfoHash.Add "planned_operation", " "
629
   End If
119 ghuddy 630
 
7022 dpurdie 631
   ' Determine if we are building this package on any build machine
632
   '
633
   pkgInfoHash.Add "isBuilding", isBuilding(SSpv_id)
634
 
635
 
129 ghuddy 636
   OraDatabase.Parameters.Remove "PV_ID"
637
   OraDatabase.Parameters.Remove "RTAG_ID"
638
   OraDatabase.Parameters.Remove "RETURN_NUMBER"
6184 dpurdie 639
   OraDatabase.Parameters.Remove "OP_CODE_LIST"
640
 
7030 dpurdie 641
   'On Error Resume Next
642
   'On Error Goto 0
119 ghuddy 643
 
183 brianf 644
   ' check if package is released
5964 dpurdie 645
   If NOT isaRelease Then
183 brianf 646
     pkgInfoHash.Add "is_released", False
647
   Else
648
     Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT rc.pv_id FROM release_content rc WHERE rc.rtag_id = " & NNrtag & " AND rc.pv_id = " & SSpv_id, cint(0))
649
     pkgInfoHash.Add "is_released", rsTemp.RecordCount <> 0
650
   End If
651
 
5964 dpurdie 652
   ' check if package is excluded from build
183 brianf 653
   pkgInfoHash.Add "is_excluded", False
654
   pkgInfoHash.Add "has_build_failure", False
5964 dpurdie 655
   If isaRelease Then
7030 dpurdie 656
     Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT dnr.pv_id,dnr.root_pv_id FROM do_not_ripple dnr WHERE dnr.rtag_id = " & NNrtag & " AND dnr.pv_id = " & SSpv_id, cint(0))
183 brianf 657
     If rsTemp.RecordCount <> 0 Then
658
       pkgInfoHash("is_excluded") = True
7030 dpurdie 659
       pkgInfoHash("has_build_failure") = IsNull(rsTemp("root_pv_id"))
183 brianf 660
     End If
661
   End If
662
 
5964 dpurdie 663
   ' Check if Package is deprecated
664
   If isaRelease Then
665
     Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT * FROM DEPRECATED_PACKAGES WHERE RTAG_ID ="& NNrtag &" AND "& EmptyToNullString("V_EXT", pkgInfoHash.Item ("v_ext")) &" AND PKG_ID = "& pkgInfoHash.Item ("pkg_id") &"", cint(0))
666
     If rsTemp.RecordCount > 0 Then
667
        pkgInfoHash.Add "is_deprecated", True
668
     End If
669
   End If
670
 
6497 dpurdie 671
   ' Check if package is a NEW package - only one version in existence
7337 dpurdie 672
   If pkgInfoHash.Item ("pkg_id") <> "" Then
673
       Set rsTemp = OraDatabase.DbCreateDynaset( "select count(*) as count from package_versions pv where pkg_id = " & pkgInfoHash.Item ("pkg_id"), cint(0))
674
       pkgInfoHash.Add "pkg_count" , rsTemp("count")
675
   End If
6497 dpurdie 676
 
7289 dpurdie 677
   ' Does this package have any dependencies
678
   Set rsTemp = OraDatabase.DbCreateDynaset( "select count(*) as depCount from package_dependencies where pv_id = " & SSpv_id, cint(0))
679
   pkgInfoHash.Add "depCount" , rsTemp("depCount")
680
 
681
 
129 ghuddy 682
   rsTemp.Close
683
   Set rsTemp = nothing
183 brianf 684
 
119 ghuddy 685
End Sub
686
'-----------------------------------------------------------------------------------------------------------------------------
4703 dpurdie 687
' Get Package Info - when we don't have a package
688
Sub Get_NoPkg_Info(NNrtag)
689
	Dim rsTemp, Query_String
690
	OraDatabase.Parameters.Add "RTAG_ID", 		NNrtag,		ORAPARM_INPUT, ORATYPE_NUMBER
691
 
692
	pkgInfoHash.Item ("can_unofficial") = "false"
693
	pkgInfoHash.Item ("noPackage") = true
694
 
695
	'/* Get Basic Details */
696
    Query_String = " select pj.PROJ_ID, rt.RTAG_ID,rt.rtag_name " &_
697
                   " from projects pj, release_tags rt" &_
698
                   " where rt.rtag_id=:RTAG_ID" &_
699
                   " and rt.PROJ_ID = pj.PROJ_ID"
700
 
701
	Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
702
 
703
	If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
704
		pkgInfoHash.Add "proj_id", (rsTemp.Fields("proj_id"))
705
		pkgInfoHash.Add "rtag_id", (rsTemp.Fields("rtag_id"))
706
		pkgInfoHash.Add "rtag_name", (rsTemp.Fields("rtag_name"))
707
	End If
708
 
709
   OraDatabase.Parameters.Remove "RTAG_ID"
710
End Sub
711
 
712
'-----------------------------------------------------------------------------------------------------------------------------
119 ghuddy 713
Sub Get_Pkg_Short_Info( SSparPv_id, SSpkgID, SSpkgName, SSpkgVersion, SSsrc_path, SSpkgDesc, BBdlocked )
129 ghuddy 714
   Dim rsTemp, Query_String
715
   If IsEmpty(SSparPv_id) Then Exit Sub
119 ghuddy 716
 
129 ghuddy 717
   Query_String = _
718
   " SELECT pkg.pkg_id, pkg.pkg_name, pv.pkg_version, pv.src_path, pv.pv_description, pv.dlocked"&_
719
   "  FROM packages pkg, package_versions pv"&_
720
   " WHERE pkg.pkg_id = pv.pkg_id  AND pv.pv_id ="& SSparPv_id
119 ghuddy 721
 
129 ghuddy 722
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
119 ghuddy 723
 
129 ghuddy 724
   If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
725
      SSpkgID = rsTemp.Fields("pkg_id")
726
      SSpkgName = rsTemp.Fields("pkg_name")
727
      SSpkgVersion = rsTemp.Fields("pkg_version")
728
      SSsrc_path = rsTemp.Fields("src_path")
729
      SSpkgDesc = rsTemp.Fields("pv_description")
730
      BBdlocked = rsTemp.Fields("dlocked")
731
   End If
119 ghuddy 732
 
129 ghuddy 733
   rsTemp.Close
734
   Set rsTemp = nothing
119 ghuddy 735
End Sub
736
'-----------------------------------------------------------------------------------------------------------------------------
737
Private Function IsDomainAuthOK( SSusername, SSpassword, SSdomainName )
129 ghuddy 738
   Dim objLoginAuth, return, tempSTR
119 ghuddy 739
 
129 ghuddy 740
   Set objLoginAuth = Server.CreateObject("LoginAdmin.ImpersonateUser")
741
   return = objLoginAuth.AuthenticateUser ( SSusername, SSpassword, SSdomainName )
119 ghuddy 742
 
129 ghuddy 743
   'Response.write "LOGIN"& SSusername &"-"& SSpassword &"-"& SSdomainName &"-"& return
119 ghuddy 744
 
129 ghuddy 745
   If (return = 0) OR (return = 1385) Then
746
      ' From MSDN System Error Codes
747
      ' 0 - The operation completed successfully.
748
      ' 1326 - Logon failure: unknown user name or bad password.
749
      ' 1385 - Logon failure: the user has not been granted the requested logon type at this computer.
750
      ' 1909 - The referenced account is currently locked out and may not be used to log on.
119 ghuddy 751
 
129 ghuddy 752
      'Login ok
753
      IsDomainAuthOK = True
754
   Else
755
      IsDomainAuthOK = False
756
   End If
119 ghuddy 757
 
129 ghuddy 758
   Set objLoginAuth = Nothing
119 ghuddy 759
End Function
760
'-----------------------------------------------------------------------------------------------------------------------------
761
Function ReadUserPreferences ( SSitem )
129 ghuddy 762
   'ReadUserPreferences = Request.Cookies("RELEASEMANAGER_USER_PREFERENCES")( SSitem )
763
   ReadUserPreferences = "0"
119 ghuddy 764
End Function
765
'-----------------------------------------------------------------------------------------------------------------------------
766
Function Requred_Parameters_String ( SScurrent, SSstr )
129 ghuddy 767
   'returns "&par1=val1&&parn=valn&"            must use & as it will not be used on parameter name or value
768
   Dim tempARR, parameter, tempSTR
769
   tempARR = Split( SSstr, "," )
770
   tempSTR = SScurrent
119 ghuddy 771
 
129 ghuddy 772
   For Each parameter In tempARR
773
      tempSTR = tempSTR &"&"& parameter &"="& QStrPar( parameter ) &"&"
774
   Next
119 ghuddy 775
 
129 ghuddy 776
   Requred_Parameters_String = tempSTR
119 ghuddy 777
End Function
778
'-----------------------------------------------------------------------------------------------------------------------------
779
Function Quick_Help ( SStipname )
6827 dpurdie 780
   Quick_Help = "<span onMouseOver=""formTips.show('"& SStipname &"')"" onMouseOut=""formTips.hide()""><img src='images/i_help.gif' width='12' height='12' hspace='2' align='absmiddle' border='0' ></span>"
119 ghuddy 781
End Function
6623 dpurdie 782
Function Quick_HelpImg ( SStipname, SSimage )
6827 dpurdie 783
   Quick_HelpImg = "<span onMouseOver=""formTips.show('"& SStipname &"')"" onMouseOut=""formTips.hide()""><img src='"&SSimage&"' width='12' height='12' hspace='2' align='absmiddle' border='0' ></span>"
6623 dpurdie 784
End Function
785
 
119 ghuddy 786
'-----------------------------------------------------------------------------------------------------------------------------
787
Function LogError ( SSlog, SSstr )
129 ghuddy 788
   '|errstr1||errstr2||errstr3|...
789
   LogError = SSlog &"|"& SSstr &"|"
119 ghuddy 790
End Function
791
'-----------------------------------------------------------------------------------------------------------------------------
5168 dpurdie 792
'   Send an email
793
'   Args:   SSfromName      - Text Name of sender
794
'           SSfrom          - email address of sender
6624 dpurdie 795
'           SSto            - email address of receipient. May be comma sep list or a some type of object
5168 dpurdie 796
'           SSsubject       - email subject
797
'           SSbody          - Body of the email. Email is sent as html.
798
'           oAttachments    - email attachments. May be empty, a file or a HashRef of files
799
'
119 ghuddy 800
Sub Send_Email ( SSfromName, SSfrom, SSto, SSsubject, SSbody, oAttachments )
129 ghuddy 801
   Dim Mail, Keys, Key, canSend
4028 dpurdie 802
'Response.write "<pre>Send_Email:SSfromName:" & SSfromName
803
'Response.write "<br>Send_Email:SSfrom:" & SSfrom
804
'Response.write "<br>Send_Email:SSto:" & SSto
805
'Response.write "<br>Send_Email:SSsubject:" & SSsubject
806
'Response.write "<br>Send_Email:SSbody:" & SSbody
119 ghuddy 807
 
129 ghuddy 808
   canSend = FALSE
809
   Set Mail = Server.CreateObject("Persits.MailSender")
3959 dpurdie 810
   Mail.Host = MAIL_SERVER
129 ghuddy 811
   Mail.From = SSfrom
812
   Mail.FromName = SSfromName
119 ghuddy 813
 
129 ghuddy 814
   ' Send TO:
4028 dpurdie 815
   ' Handle a Dictionary of names
816
   If IsObject(SSto) AND (TypeName(SSto) <> "IOraField") Then
129 ghuddy 817
      Keys = SSto.Keys
818
      For Each Key In Keys
819
         Mail.AddAddress Key, SSto.Item( Key )
820
      Next
119 ghuddy 821
 
129 ghuddy 822
      If SSto.Count > 0 Then canSend = TRUE
823
   Else
119 ghuddy 824
 
129 ghuddy 825
      Mail.AddAddress SSto
826
      If SSto <> "" Then canSend = TRUE
827
   End If
119 ghuddy 828
 
129 ghuddy 829
   Mail.Subject = SSsubject
830
   Mail.IsHTML = True
831
   Mail.Body = SSbody
119 ghuddy 832
 
4028 dpurdie 833
   If NOT IsEmpty(oAttachments) AND NOT IsNull(oAttachments) Then
834
       ' Add Attachments     DDDDDDD  Sash,
835
       ' It appears as if AddEmbededImage is premium functionality that costs money, can we just do a normal add attachment?
836
       If IsObject( oAttachments ) Then
837
          Keys = oAttachments.Keys
838
          For Each Key In Keys
839
       '      Mail.AddEmbeddedImage rootPath & Key, oAttachments.Item( Key )
840
              Mail.AddAttachment oAttachments.Item( Key )
841
          Next
842
        Else
843
              Mail.AddAttachment oAttachments
844
       End If
845
    End If
119 ghuddy 846
 
129 ghuddy 847
   On Error Resume Next
848
   If canSend Then   Mail.Send   ' send message
119 ghuddy 849
 
850
End Sub
5168 dpurdie 851
 
852
'-----------------------------------------------------------------------------------------------------------------
853
'   Record and Report a Release Manager event
854
'       Record in the machines Event Log
855
'       Report via email
856
'   Used to report error conditions that need to be bought to the attention of some sys admin
857
'   Args:   eventType       - one of enumEVENT_* ( ie:enumEVENT_ERROR)
858
'           SSlocation      - Indication of location/operation
859
'           SSvalues        - Values. Will be added into the message
860
'           SSerror_message - Error message
861
'
862
Sub Report_Event ( eventType, SSlocation, SSvalues, SSerror_message  )
863
    On Error Resume Next
864
    Dim WshNetwork, SSmsg
865
    Set WshNetwork = Server.CreateObject("WScript.Network")
866
 
867
   ' Compose Message
868
   SSmsg = _
869
   "-- User Info  --"& VBNewLine &_
870
   "Logged In: " & objAccessControl.UserLogedIn & VBNewLine &_
871
   "Domain: " & objAccessControl.Domain & VBNewLine &_
872
   "UserName: " & objAccessControl.UserName & VBNewLine &_
873
   "FullName: " & objAccessControl.FullName & VBNewLine &_
874
   "UserEmail: " & objAccessControl.UserEmail & VBNewLine &_
875
   "UserId: " & objAccessControl.UserId & VBNewLine &_
876
   VBNewLine &_
877
   "-- Script Info  --"& VBNewLine &_
878
   "Host Name: "& Request.ServerVariables("SERVER_NAME") & ":" & Request.ServerVariables("SERVER_PORT") & VBNewLine &_
879
   "Script Name: "& Request.ServerVariables("SCRIPT_NAME") & VBNewLine &_
880
   VBNewLine &_
881
   "-- Error Location --"& VBNewLine &_
882
   SSlocation & VBNewLine &_
883
   VBNewLine &_
884
   "-- Values --"& VBNewLine &_
885
   SSvalues & VBNewLine &_
886
   VBNewLine &_
887
   "-- Error Message --"& VBNewLine &_
888
   SSerror_message & VBNewLine
889
 
890
    '-- Raise this message at these places...
891
    '-- Create an event in the system event log
892
    '-- Send out an email
893
    Call Send_Event( eventType, SSmsg )
894
    Call Send_Email ( "Release Manager Notification", _
5357 dpurdie 895
                       ADMIN_EMAIL, _
5168 dpurdie 896
                       FAULT_EMAIL_LIST, _
897
                       "Release Manager Error", _
898
                       Replace(SSmsg,VBNewLine, "<br>"), _
899
                       null )
900
 
901
    '----------------------------------------
902
   Set WshNetwork = Nothing
903
End Sub
904
 
119 ghuddy 905
'-----------------------------------------------------------------------------------------------------------------------------
5168 dpurdie 906
'   Record Event in OS log
907
'   Create an event in the system event log
908
'
909
'   Args:   eventType       - one of enumEVENT_* ( ie:enumEVENT_ERROR)
910
'           SSmsg           - Message Body
911
Sub Send_Event( eventType, SSmsg )
912
    On Error Resume Next
913
    Dim WshShell
914
    Set WshShell = Server.CreateObject("WScript.Shell")
915
    WshShell.LogEvent eventType, SSmsg
916
    Set WshShell = Nothing
917
End Sub
918
 
919
'-----------------------------------------------------------------------------------------------------------------------------
119 ghuddy 920
Sub Iterate_UP_the_tree ( NNrtag_id, HHstart_with, HHresult )
129 ghuddy 921
   Dim rsTemp, Query_String
922
   Dim seekPKGs, seekNOTpkgs
119 ghuddy 923
 
129 ghuddy 924
   seekPKGs = Join(HHstart_with.Keys, ",")
925
   If seekPKGs = "" Then seekPKGs = "-1"
926
   seekNOTpkgs = "-1"
119 ghuddy 927
 
129 ghuddy 928
   Do While seekPKGs <> "-1"
929
      Query_String = _
930
      " SELECT DISTINCT dep.pkg_id"&_
931
      "    FROM package_dependencies dep, release_content rel"&_
932
      "   WHERE rel.pv_id = dep.pv_id"&_
933
      "     AND rel.rtag_id = "& NNrtag_id &_
934
      "     AND dpkg_id IN ( "& seekPKGs &" ) "&_
935
      "     AND pkg_id NOT IN ( "& seekNOTpkgs &" )"
936
      '"     AND dep.dpv_id NOT IN ( SELECT iw.iw_id FROM ignore_warnings iw WHERE iw.rtag_id = "& NNrtag_id &" )"
937
      Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
119 ghuddy 938
 
129 ghuddy 939
      If rsTemp.RecordCount < 1 Then Exit Do
119 ghuddy 940
 
129 ghuddy 941
      seekPKGs = "-1"
942
      While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
943
         If NOT HHresult.Exists(Cstr(rsTemp.Fields("pkg_id"))) Then HHresult.Add Cstr(rsTemp.Fields("pkg_id")), ""
944
         seekPKGs = seekPKGs &","& rsTemp.Fields("pkg_id")
945
         rsTemp.MoveNext
946
      WEnd
119 ghuddy 947
 
129 ghuddy 948
      seekNOTpkgs = seekNOTpkgs &","& seekPKGs
949
   Loop
119 ghuddy 950
 
951
End Sub
952
'-----------------------------------------------------------------------------------------------------------------------------
129 ghuddy 953
Sub Iterate_DOWN_the_tree (   NNrtag_id, HHstart_with, HHresult )
954
   Dim rsTemp, Query_String
955
   Dim seekPKGs, seekNOTpkgs
119 ghuddy 956
 
129 ghuddy 957
   seekPKGs = Join(HHstart_with.Keys, ",")
958
   If seekPKGs = "" Then seekPKGs = "-1"
959
   seekNOTpkgs = "-1"
119 ghuddy 960
 
129 ghuddy 961
   Do While seekPKGs <> "-1"
962
      Query_String = _
963
      " SELECT DISTINCT dep.dpkg_id"&_
964
      "    FROM package_dependencies dep, release_content rel"&_
965
      "   WHERE rel.pv_id = dep.pv_id"&_
966
      "     AND rel.rtag_id = "& NNrtag_id &_
967
      "     AND pkg_id IN ( "& seekPKGs &" ) "&_
968
      "     AND dpkg_id NOT IN ( "& seekNOTpkgs &" )"
969
      Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
119 ghuddy 970
 
129 ghuddy 971
      If rsTemp.RecordCount < 1 Then Exit Do
119 ghuddy 972
 
129 ghuddy 973
      seekPKGs = "-1"
974
      While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
975
         If NOT HHresult.Exists(Cstr(rsTemp.Fields("dpkg_id"))) Then HHresult.Add Cstr(rsTemp.Fields("dpkg_id")), ""
976
         seekPKGs = seekPKGs &","& rsTemp.Fields("dpkg_id")
977
         rsTemp.MoveNext
978
      WEnd
119 ghuddy 979
 
129 ghuddy 980
      seekNOTpkgs = seekNOTpkgs &","& seekPKGs
981
   Loop
119 ghuddy 982
 
983
End Sub
984
'-----------------------------------------------------------------------------------------------------------------------------
985
Class TempSession
129 ghuddy 986
   Function Value ()
987
      Value = Session("RELEASEMANAGER_temp")
988
   End Function
119 ghuddy 989
 
129 ghuddy 990
   Sub Add ( SSstr )
991
      Session("RELEASEMANAGER_temp") = Session("RELEASEMANAGER_temp") & SSstr
992
   End Sub
119 ghuddy 993
 
129 ghuddy 994
   Sub Clean ()
995
      Session("RELEASEMANAGER_temp") = NULL
996
   End Sub
119 ghuddy 997
End Class
998
'-----------------------------------------------------------------------------------------------------------------------------
999
Sub DisplayInfo ( SSmsg, SSwidth )
129 ghuddy 1000
   Dim msg
1001
   If SSmsg = "" Then Exit Sub
119 ghuddy 1002
 
129 ghuddy 1003
   Select Case UCase( SSmsg )
1004
   Case "ISSUES_IMPORTED"
1005
      msg = "Import is complete. <br>Click on Close button if you are finished."
1006
   Case "MAKE_OFFICIAL_WARNING"
1007
      msg = "Note that making a package official will prevent any further change to it."
1008
   Case "APPLY_LABEL_TO_ALL_WARNING"
1009
      msg = "This will overwrite any existing labels on selected packages."
1010
   Case "BLANK_LABEL_WARNING"
1011
      msg = "Some dependencies in the export list above, do not have a label!"
1012
   Case "PERSONAL_VIEW_NOT_SETUP"
1013
      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>"
1014
   Case "EMPTY_RELEASE_CONTENTS"
1015
      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>"
1016
   Case "PKG_NAME_REQUIRED"
1017
      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>"
1018
   Case "ADD_PATCH_WARNING"
1019
      msg = "Note that patches cannot be used in your build dependencies."
1020
   Case "NEW_PATCH_AVAILABLE"
1021
      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."
119 ghuddy 1022
 
129 ghuddy 1023
   Case "NOT_FOUND_IN_PKG_ARCHIVE_RELEASE_NOTES"
5142 dpurdie 1024
      msg = "<b>Regenerating release notes...</b><br>It may take a minute. Please try refreshing this page a bit later."
129 ghuddy 1025
   Case "FAILED_GENERATING_RELEASE_NOTES"
6610 dpurdie 1026
      msg = "<span class='err_alert'><b>Failed generating release notes!</b></span>"
129 ghuddy 1027
   Case "GENERATING_RELEASE_NOTES"
1028
      msg = "<b>Generating release notes...</b><br>It may take a minute. Please try refreshing this page a bit later."
1029
   Case "NO_PREVIOUS_VERSION_RELEASE_NOTES"
1030
       msg = "<b>Previous Version is Unknown</b>!<br>Please specify previous version by clicking on 'Show Details...' above.<br>Release notes are not generated."
4705 dpurdie 1031
   Case "RELEASE_NOTES_PLACEHOLDER_PACKAGE"
5751 dpurdie 1032
       msg = "<b>Place Holding Package</b>!<br>This package is manually built, does not have a build standard and does not exist in dpkg_archive. It is used as a placeholder.<br>Release notes are not generated."
119 ghuddy 1033
 
129 ghuddy 1034
   Case "PACKAGE_FOUND_IN_OTHER_LOCATIONS"
1035
      msg = "This package is also found in other locations."
1036
   Case "DOC_NUMBER_NOTFOUND"
1037
      msg = "<span class='err_alert'>Document number "& Request("doc_num") &" does not correspond to any document!</span>"
1038
   Case "DOC_NUMBER_FOUND"
1039
      msg = "Document found. Click &quot;Import&quot; to link the document."
1040
   Case "UNIT_TEST_NOT_DONE"
6873 dpurdie 1041
      msg = "<b>Unit test is Not Done!</b><br><span href='_wform_reason_for_unit_test_not_done.asp?pv_id="& Request("pv_id") &"&rtag_id="& Request("rtag_id") &"'class='pointer txt_linked vixIframeDialog' title='Edit Reason'>Click here</span> to supply/edit reason."
129 ghuddy 1042
   Case "PACKAGE_NOT_PART_OF_RELEASE"
1043
      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. "
119 ghuddy 1044
 
129 ghuddy 1045
   Case "NOT_FOUND_IN_PKG_ARCHIVE_FILE_GENERATE"
5172 dpurdie 1046
      msg = "<b>This package is not found in dpkg_archive!</b><br>Files and folders are not captured."
129 ghuddy 1047
   Case "NO_PRODUCT_FILES_CAPTURED"
1048
      msg = "<b>Files and Folders not found for this product!</b><br>Capture of product components can only be done during the build time."
119 ghuddy 1049
 
129 ghuddy 1050
   Case "MASS REF REFERENCE"
1051
      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>"
119 ghuddy 1052
 
129 ghuddy 1053
   Case "REPEAT_SCHEDULE_NOT_SELECTED"
1054
      msg = "<span class='err_alert'><b>YOU MUST SELECT A VALUE FOR REPEAT SCHEDULED DOWNTIME</b></span>"
119 ghuddy 1055
 
129 ghuddy 1056
   Case "PKG_NAME_INVALID"
1057
      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>"
119 ghuddy 1058
 
129 ghuddy 1059
   Case "PKG_NAME_EXISTS"
1060
      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>"
119 ghuddy 1061
 
129 ghuddy 1062
   End Select
119 ghuddy 1063
%>
1064
<table width="<%=SSwidth%>" border="0" cellspacing="0" cellpadding="1">
1065
  <tr>
1066
    <td background="images/bg_bage_dark.gif">
129 ghuddy 1067
     <table width="100%" border="0" cellspacing="0" cellpadding="3">
6874 dpurdie 1068
        <tr class='bg_help'>
1069
          <td width="1%" valign="top"><img src="images/i_qhelp.gif" width="16" height="16"></td>
1070
          <td width="100%" class="form_txt"><%=msg%></td>
119 ghuddy 1071
        </tr>
1072
      </table></td>
1073
  </tr>
1074
</table>
1075
<br>
1076
<%
1077
 
1078
End Sub
1079
'-----------------------------------------------------------------------------------------------------------------------------
1080
Sub Messenger ( sMessage, nMessageType, sWidth )
129 ghuddy 1081
   Dim msgTemplate, Img
119 ghuddy 1082
 
129 ghuddy 1083
   If (sMessage = "") OR IsNull(sMessage) Then Exit Sub
119 ghuddy 1084
 
129 ghuddy 1085
   Select Case CStr(nMessageType)
1086
      Case "1"
1087
         Img = "s_critical.gif"
1088
      Case "2"
1089
         Img = "s_warning.gif"
1090
      Case "3"
1091
         Img = "s_note.gif"
1092
      Case Else
1093
         Img = nMessageType
1094
   End Select
119 ghuddy 1095
 
1096
 
129 ghuddy 1097
   msgTemplate = ReadFile( APP_ROOT &"\scripts\message_style.html" )
1098
   msgTemplate = Replace( msgTemplate, "%WIDTH%", sWidth )
1099
   msgTemplate = Replace( msgTemplate, "%IMAGE%", Img )
1100
   msgTemplate = Replace( msgTemplate, "%MESSAGE%", sMessage )
119 ghuddy 1101
 
129 ghuddy 1102
   Response.write msgTemplate
119 ghuddy 1103
End Sub
1104
'-----------------------------------------------------------------------------------------------------------------------------
4203 dpurdie 1105
Function Default_Label ( SSpv_id, SSbuild_type, SSchange_type, SSpkg_name, SSpkg_version, SSv_ext )
3959 dpurdie 1106
    If SSbuild_type = "A" Then
4203 dpurdie 1107
        If  SSchange_type = "F" Then
1108
            Default_Label = SSpkg_name & "_" & SSpkg_version & ".WIP"
1109
        else
1110
            Default_Label = UCase(SSpkg_name & "." & SSpv_id & SSv_ext) & ".WIP"
1111
        End If
3959 dpurdie 1112
    Else
4203 dpurdie 1113
        Default_Label = SSpkg_name & "_" & SSpkg_version
3959 dpurdie 1114
    End If
119 ghuddy 1115
End Function
1116
'-----------------------------------------------------------------------------------------------------------------------------
1117
Function Format_Version ( SSpkg_version, SSv_ext )
129 ghuddy 1118
   Dim tempArr, tempVersion, patchArr, seg, myVersion
1119
   myVersion = SSpkg_version
119 ghuddy 1120
 
129 ghuddy 1121
   If NOT IsNull(SSv_ext) Then
1122
      myVersion = Left ( myVersion, Len(myVersion) - Len(SSv_ext) )
1123
   End If
119 ghuddy 1124
 
129 ghuddy 1125
   tempArr = Split (myVersion, ".")
1126
   For Each seg In tempArr
1127
      If Len(seg) < 2 Then
1128
         ' single digit number
1129
         tempVersion = tempVersion &"0"& seg
119 ghuddy 1130
 
129 ghuddy 1131
      Else
1132
         seg = Replace(seg, "_", "-")   ' make sure that there is no _ in segment
1133
         If InStr( seg, "-" ) > 0 Then
1134
            ' patch version supplied
1135
            patchArr = Split(seg, "-")
1136
            If Len(patchArr(0)) < 2 Then
1137
               ' single digit number
1138
               tempVersion = tempVersion &"0"& patchArr(0) &"_0"& patchArr(1)
1139
            Else
1140
               ' double digit number
1141
               tempVersion = tempVersion & patchArr(0) &"_0"& patchArr(1)
1142
            End If
119 ghuddy 1143
 
129 ghuddy 1144
         Else
1145
            ' double digit no patch
1146
            tempVersion = tempVersion & seg
1147
         End If
119 ghuddy 1148
 
129 ghuddy 1149
      End If
119 ghuddy 1150
 
129 ghuddy 1151
   Next
119 ghuddy 1152
 
129 ghuddy 1153
   Format_Version = tempVersion
119 ghuddy 1154
End Function
1155
'-----------------------------------------------------------------------------------------------------------------------------
1156
Function DefineStateIcon ( NNpkg_state, CCdlocked, sIgnoreWarnings, cIsPatchIgnore, cBuildType, bForEnvironment )
5175 dpurdie 1157
 
1158
   If IsNull(NNpkg_state) Then
1159
	  DefineStateIcon = ""
1160
	  Exit Function
1161
   End If
119 ghuddy 1162
 
129 ghuddy 1163
   If NOT IsNull(sIgnoreWarnings) Then
1164
      '-- Ignore Warning is on
1165
      If IsNull(cIsPatchIgnore) Then
1166
         DefineStateIcon = enum_imgIgnoring
1167
      Else
1168
         DefineStateIcon = enum_imgPatchIgnoring
1169
      End If
119 ghuddy 1170
 
129 ghuddy 1171
   Else
1172
      Select Case CInt( NNpkg_state )
1173
         Case enumPKG_STATE_OK
183 brianf 1174
            If (CCdlocked = "N") OR (CCdlocked = "R") Then
129 ghuddy 1175
               DefineStateIcon = enum_imgBuilding
183 brianf 1176
            ElseIf (CCdlocked = "P") Then
1177
               DefineStateIcon = enum_imgPending
7029 dpurdie 1178
            ElseIf (CCdlocked = "A") Then
1179
               DefineStateIcon = enum_imgApproved
129 ghuddy 1180
            Else
1181
               DefineStateIcon = enum_imgBlank
1182
            End If
119 ghuddy 1183
 
129 ghuddy 1184
         Case enumPKG_STATE_MAJOR
1185
            DefineStateIcon = enum_imgCritical
119 ghuddy 1186
 
129 ghuddy 1187
         Case enumPKG_STATE_MINOR
1188
            DefineStateIcon = enum_imgWarning
119 ghuddy 1189
 
129 ghuddy 1190
         Case enumPKG_STATE_MAJOR_READY
1191
            DefineStateIcon = enum_imgCReady
119 ghuddy 1192
 
129 ghuddy 1193
         Case enumPKG_STATE_MINOR_READY
1194
            DefineStateIcon = enum_imgWReady
119 ghuddy 1195
 
129 ghuddy 1196
         Case enumPKG_NOT_FOUND
1197
            DefineStateIcon = enum_imgNotFound
119 ghuddy 1198
 
129 ghuddy 1199
         Case enumPKG_STATE_NEW_PATCH
1200
            DefineStateIcon = enum_imgPatchAvailable
119 ghuddy 1201
 
129 ghuddy 1202
         Case enumPKG_STATE_DEPRECATED
1203
            DefineStateIcon = enum_imgDeprecated
119 ghuddy 1204
 
129 ghuddy 1205
         Case enumPKG_STATE_DEPRECATED_DEPENDENT
1206
            DefineStateIcon = enum_imgDeprecatedDependent
119 ghuddy 1207
 
129 ghuddy 1208
         Case enumPKG_ADVISORY_RIPPLE
1209
            DefineStateIcon = enum_imgAR
119 ghuddy 1210
 
129 ghuddy 1211
         Case enumPKG_ADVISORY_RIPPLE_DEPENDENT
1212
            DefineStateIcon = enum_imgARD
119 ghuddy 1213
 
131 ghuddy 1214
         Case enumPKG_PEGGED_VERSION
1215
            DefineStateIcon = enum_imgGreenPin
5080 dpurdie 1216
 
1217
         Case enumPKG_SDK_IMPORT
1218
            DefineStateIcon = enum_imgSdkImport
1219
 
1220
         Case enumPKG_SDK_DEPENDENCY
1221
            DefineStateIcon = enum_imgSdkDep
1222
 
5899 dpurdie 1223
         Case enumPKG_UNBUILDABLE
1224
            DefineStateIcon = enum_imgUnBuildable
1225
 
7029 dpurdie 1226
         Case enumPKG_BUILDING
1227
             DefineStateIcon = enum_imgCompiling
1228
 
1229
         Case enumPKG_SCHEDULED
1230
             DefineStateIcon = enum_imgScheduled
1231
 
1232
        Case enumPKG_BUILDFAIL
1233
             DefineStateIcon = enum_imgBuildFail
1234
 
1235
        Case enumPKG_BUILDEXCLUDE
1236
             DefineStateIcon = enum_imgBuildExclude
1237
 
129 ghuddy 1238
      End Select
119 ghuddy 1239
 
129 ghuddy 1240
      If (NOT bForEnvironment) AND _
1241
         (cBuildType = "A") AND _
1242
         (CCdlocked <> "Y") AND _
1243
         (DefineStateIcon <> enum_imgBlank) AND _
1244
         (DefineStateIcon <> enum_imgBuilding)  AND  _
1245
         (DefineStateIcon <> enum_imgNotFound) OR _
1246
         ( Request("rtag_id") = ""  AND  Request("FRrtag_id") = "")  _
1247
         Then
119 ghuddy 1248
 
129 ghuddy 1249
         DefineStateIcon = ""
119 ghuddy 1250
 
129 ghuddy 1251
       End If
4390 dpurdie 1252
   End If
1253
End Function
1254
'-----------------------------------------------------------------------------------------------------------------------------
1255
Function DefineStateIconSimple ( NNpkg_state, CCdlocked)
119 ghuddy 1256
 
4390 dpurdie 1257
      DefineStateIconSimple = ""
1258
      Select Case CInt( NNpkg_state )
1259
         Case enumPKG_STATE_OK
1260
            If (CCdlocked = "R") OR (CCdlocked = "A") Then
1261
               DefineStateIconSimple = enum_imgBuilding
1262
            ElseIf (CCdlocked = "P") Then
1263
               DefineStateIconSimple = enum_imgPending
1264
            ElseIf (CCdlocked = "Y") Then
1265
               DefineStateIconSimple = enum_imgReleasedLocked
1266
            ElseIf (CCdlocked = "N") Then
1267
               DefineStateIconSimple = enum_imgReleasedUnlocked
1268
            Else
1269
               DefineStateIconSimple = enum_imgBlank
1270
            End If
119 ghuddy 1271
 
4390 dpurdie 1272
         Case enumPKG_STATE_MAJOR
1273
            DefineStateIconSimple = enum_imgCritical
119 ghuddy 1274
 
4390 dpurdie 1275
         Case enumPKG_STATE_MINOR
1276
            DefineStateIconSimple = enum_imgWarning
119 ghuddy 1277
 
4390 dpurdie 1278
         Case enumPKG_STATE_MAJOR_READY
1279
            DefineStateIconSimple = enum_imgCReady
1280
 
1281
         Case enumPKG_STATE_MINOR_READY
1282
            DefineStateIconSimple = enum_imgWReady
1283
 
1284
         Case enumPKG_NOT_FOUND
1285
            DefineStateIconSimple = enum_imgNotFound
1286
 
1287
         Case enumPKG_STATE_NEW_PATCH
1288
            DefineStateIconSimple = enum_imgPatchAvailable
1289
 
1290
         Case enumPKG_STATE_DEPRECATED
1291
            DefineStateIconSimple = enum_imgDeprecated
1292
 
1293
         Case enumPKG_STATE_DEPRECATED_DEPENDENT
1294
            DefineStateIconSimple = enum_imgDeprecatedDependent
1295
 
1296
         Case enumPKG_ADVISORY_RIPPLE
1297
            DefineStateIconSimple = enum_imgAR
1298
 
1299
         Case enumPKG_ADVISORY_RIPPLE_DEPENDENT
1300
            DefineStateIconSimple = enum_imgARD
1301
 
1302
         Case enumPKG_PEGGED_VERSION
1303
            DefineStateIconSimple = enum_imgGreenPin
5080 dpurdie 1304
 
1305
         Case enumPKG_SDK_IMPORT
5085 dpurdie 1306
            DefineStateIconSimple = enum_imgSdkImport
5080 dpurdie 1307
 
1308
         Case enumPKG_SDK_DEPENDENCY
5085 dpurdie 1309
            DefineStateIconSimple = enum_imgSdkDep
5080 dpurdie 1310
 
4390 dpurdie 1311
      End Select
119 ghuddy 1312
End Function
1313
'-----------------------------------------------------------------------------------------------------------------------------
1314
Function DefineStateSmallIcon ( NNpkg_state, CCdlocked )
129 ghuddy 1315
   Select Case CInt( NNpkg_state )
1316
   Case enumPKG_STATE_OK
1317
      If CCdlocked = "N" Then
1318
         DefineStateSmallIcon = enum_SMALL_imgBuilding
1319
      Else
1320
         DefineStateSmallIcon = enum_SMALL_imgOK
1321
      End If
119 ghuddy 1322
 
129 ghuddy 1323
   Case enumPKG_STATE_MAJOR
1324
      DefineStateSmallIcon = enum_SMALL_imgCritical
119 ghuddy 1325
 
129 ghuddy 1326
   Case enumPKG_STATE_MINOR
1327
      DefineStateSmallIcon = enum_SMALL_imgWarning
119 ghuddy 1328
 
129 ghuddy 1329
   Case enumPKG_STATE_MAJOR_READY
1330
      DefineStateSmallIcon = enum_SMALL_imgCReady
119 ghuddy 1331
 
129 ghuddy 1332
   Case enumPKG_STATE_MINOR_READY
1333
      DefineStateSmallIcon = enum_SMALL_imgWReady
119 ghuddy 1334
 
129 ghuddy 1335
   End Select
119 ghuddy 1336
End Function
1337
'-----------------------------------------------------------------------------------------------------------------------------
1338
Function PatchIcon ( cIsPatch, cIsPatchObsolete )
129 ghuddy 1339
   If IsNull(cIsPatch) Then
1340
      PatchIcon = "<img src='images/rex_images/ext_blank.gif' width='16' height='16' border='0' align='absmiddle'>"
1341
   Else
1342
      If IsNull(cIsPatchObsolete) Then
1343
         PatchIcon = "<img src='images/i_patch_small.gif' width='16' height='16' border='0' align='absmiddle' >"
1344
      Else
1345
         PatchIcon = "<img src='images/i_patch_small_obsolete.gif' width='16' height='16' border='0' align='absmiddle' title='Patch is obsolete'>"
1346
      End If
1347
   End If
119 ghuddy 1348
End Function
1349
'-----------------------------------------------------------------------------------------------------------------------------
1350
' Function that returns true of false if the item exists in the array
1351
'-----------------------------------------------------------------------------------------------------------------------------
1352
Function inArray(item, aItems)
129 ghuddy 1353
   Dim element
1354
   inArray = false
1355
   for each element in aItems
1356
      If element = item Then
1357
         inArray=true
1358
      End If
1359
   next
119 ghuddy 1360
End Function
1361
'-----------------------------------------------------------------------------------------------------------------------------
5268 dpurdie 1362
' Function:     GetCurrentParameters    
1363
' Description:  Setup some very basic data that is common to (almost) pages
1364
'               Uses Request("proj_id"), Request("rtag_id") and Request("pv_id")
1365
'
1366
'               Given an rtag_id it will determine the enclosing project
1367
'
6971 dpurdie 1368
'               If a valid Release will also fill in releaseInfoHash
1369
'                   Done here as its info we will need any way and its better to have
1370
'                   one database access than two ( or three )
1371
'
6577 dpurdie 1372
' Returns:      nProjId     proj_id of rtag_id
1373
'               sProjName
5268 dpurdie 1374
'               nRtagId     rtag_id
6577 dpurdie 1375
'               sRtagName
5268 dpurdie 1376
'               nPvid       pv_id
1377
'
6971 dpurdie 1378
'               releaseInfoHash - Populates
5268 dpurdie 1379
'
6577 dpurdie 1380
Function GetCurrentParameters( nProjId, sProjName, nRtagId, sRtagName, nPvId )
129 ghuddy 1381
   Dim rsQry,query
119 ghuddy 1382
 
129 ghuddy 1383
   ' Set defaults
1384
   nProjId    = -1
6577 dpurdie 1385
   sProjName  = ""
129 ghuddy 1386
   nRtagId    = -1
6577 dpurdie 1387
   sRtagName  = ""
5177 dpurdie 1388
   nPvId      = -1
119 ghuddy 1389
 
6577 dpurdie 1390
   ' Set the ID values from the url
1391
   If Request("pv_id") <> ""   Then nPvId   = CDbl(Request("pv_id"))
1392
   If Request("proj_id") <> "" Then nProjId = CDbl(Request("proj_id"))
1393
   If Request("rtag_id") <> "" Then nRtagId = CDbl(Request("rtag_id"))
1394
 
1395
 
129 ghuddy 1396
   ' Get parameters from database
119 ghuddy 1397
 
6577 dpurdie 1398
   If Request("rtag_id") <> "" Then
6971 dpurdie 1399
       GetReleaseInfo (nRtagId)
1400
       sProjName = UCase(releaseInfoHash("proj_name"))
1401
       nProjId = CDbl(releaseInfoHash("proj_id")) 
1402
       sRtagName = releaseInfoHash("rtag_name")
119 ghuddy 1403
 
6971 dpurdie 1404
   ElseIf Request("proj_id") <> "" Then
1405
      OraDatabase.Parameters.Add "PROJ_ID",       Request("proj_id"),   ORAPARM_INPUT, ORATYPE_VARCHAR2
119 ghuddy 1406
 
6577 dpurdie 1407
      query = _
1408
      " SELECT proj.proj_name, proj.proj_id"&_
1409
      " FROM projects proj"&_
1410
      " WHERE proj.proj_id = :PROJ_ID"
119 ghuddy 1411
 
6577 dpurdie 1412
      Set rsQry = OraDatabase.DbCreateDynaset( query, cint(0))
1413
      If ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) Then
1414
         sProjName = UCase(rsQry.Fields("proj_name"))
1415
      End If
1416
      rsQry.Close()
1417
      Set rsQry = nothing
6971 dpurdie 1418
      OraDatabase.Parameters.Remove "PROJ_ID"
6577 dpurdie 1419
 
129 ghuddy 1420
   End If
119 ghuddy 1421
 
1422
 
1423
End Function
1424
'-----------------------------------------------------------------------------------------------------------------------------
1425
Function GetEnvName ( nEnvTab )
129 ghuddy 1426
   Select Case CInt( nEnvTab )
1427
      Case enumENVTAB_WORK_IN_PROGRESS
1428
         GetEnvName = "Work In Progress"
119 ghuddy 1429
 
129 ghuddy 1430
      Case enumENVTAB_PLANNED
1431
         GetEnvName = "Pending"
119 ghuddy 1432
 
129 ghuddy 1433
      Case enumENVTAB_RELEASED
1434
         GetEnvName = "Released"
119 ghuddy 1435
 
129 ghuddy 1436
   End Select
119 ghuddy 1437
 
1438
End Function
1439
'-----------------------------------------------------------------------------------------------------------------------------
1440
Function Title (rtagId)
6770 dpurdie 1441
   Dim rsQry
119 ghuddy 1442
 
129 ghuddy 1443
   If rtagId = "" Then
1444
      Title = "Release Manager"
1445
   Else
1446
      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 )
1447
      Title = rsQry("proj_name")&">"&rsQry("rtag_name")
1448
      rsQry.Close()
1449
      Set rsQry = Nothing
1450
   End If
119 ghuddy 1451
 
1452
End Function
1453
'-------------------------------------------------------------------------------------
1454
Function Check_Package_WIP_Already_Exists(NNrtag_id, NNpv_id)
129 ghuddy 1455
   Dim Query_String, rsQry
119 ghuddy 1456
 
129 ghuddy 1457
   Query_String = _
1458
   "   SELECT * "&_
1459
   "   FROM planned pl, package_versions pv "&_
1460
   "   WHERE pl.rtag_id = "& NNrtag_id &_
1461
   "   AND pv.pv_id = pl.pv_id "&_
1462
   "   AND pv.dlocked = 'A' "&_
1463
   "   AND pv.pkg_id = (SELECT pkg_id "&_
1464
       "                  FROM package_versions "&_
1465
       "                 WHERE pv_id = "& NNpv_id &") "&_
1466
   "   AND pv.v_ext = (SELECT v_ext "&_
1467
   "                  FROM package_versions "&_
1468
       "                 WHERE pv_id = "& NNpv_id &")"
119 ghuddy 1469
 
1470
 
129 ghuddy 1471
   Set rsQry = OraDatabase.DbCreateDynaset( Query_String , cint(0) )
119 ghuddy 1472
 
129 ghuddy 1473
   Check_Package_WIP_Already_Exists = rsQry.RecordCount
119 ghuddy 1474
 
129 ghuddy 1475
   rsQry.Close()
1476
   Set rsQry = Nothing
119 ghuddy 1477
End Function
1478
'-----------------------------------------------------------------------------------------------------------------------------
1479
Function ValidateCodeReviewURL ( sCodeReviewURL )
1480
  Dim isValid
1481
  Dim sTempBaseURL
1482
  Dim httpRegEx
129 ghuddy 1483
   Set httpRegEx = new RegExp
119 ghuddy 1484
 
129 ghuddy 1485
   httpRegEx.Pattern = "^https?:\/\/"
119 ghuddy 1486
 
129 ghuddy 1487
   ' Removes ending slash from project's base URL for ease of comparison.
1488
   sTempBaseURL = Left(baseURL, Len(baseURL)-1)
1489
   ' Removes the project's base URL from the URL specified (if it's present).
1490
   codeReviewURL = Replace(sCodeReviewURL, sTempBaseURL, "")
1491
   ' Removes the slash from the beginning of the resulting URL (if it's present).
1492
   If InStr(codeReviewURL, "/") = 1 Then
1493
     codeReviewURL = Replace(codeReviewURL, "/", "", 1, 1)
1494
   End If
119 ghuddy 1495
 
129 ghuddy 1496
   ' If the URL doesn't contain the http:// prefix, assume that it's correct.
1497
   If NOT httpRegEx.Test(codeReviewURL) AND Len(codeReviewURL) > 0 Then
1498
     isValid = True
1499
   Else
1500
     ' If the URL still contains the http:// prefix and is longer than the base
1501
     ' URL, assume that it is an invalid URL because of a differing base URL.
1502
     If Len(sCodeReviewURL) > Len(baseURL) Then
1503
       Response.Write("<script type='text/javascript'>alert('Incorrect Base URL\n\nMust start with project\'s base url (" & baseURL &") if full URL specified.')</script>")
1504
     Else
1505
     ' If the URL still contains the http:// prefix and is shorter than the base
1506
     ' URL, assume that it is incomplete.
1507
       Response.Write("<script type='text/javascript'>alert('Incomplete Code Review URL')</script>")
1508
     End If
1509
     ' Otherwise, the URL matches the base URL exactly, which is also invalid.
1510
     codeReviewURL = sCodeReviewURL
1511
     isValid = False
1512
   End If
1513
   ValidateCodeReviewURL = isValid
119 ghuddy 1514
End Function
1515
'----------------------------------------------------------------------------------------------------------------------------------------
1516
Function Is_Page_Editable ( cDlocked )
129 ghuddy 1517
   ' Editable if (   (unlocked OR rejected)
1518
   '              OR ( NOT released/locked AND EditReleaseNotesInPending allowed)
1519
   '              OR (released/locked AND EditNonCriticalInfoForLockedPackage allowed)
1520
   '             )
1521
   '             AND user logged in
5061 dpurdie 1522
   If (((cDlocked = "N") OR (cDlocked = "R")) OR ((cDlocked <> "Y") AND (canActionControlInProject("EditReleaseNotesInPending"))) OR ((cDlocked = "Y") AND (canActionControlInProject("EditNonCriticalInfoForLockedPackage")))) AND objAccessControl.UserLogedIn Then
129 ghuddy 1523
      Is_Page_Editable = TRUE
1524
   Else
1525
      Is_Page_Editable = FALSE
1526
   End If
119 ghuddy 1527
End Function
1528
'----------------------------------------------------------------------------------------------------------------------------------------
1529
Function Is_Section_Editable ( )
129 ghuddy 1530
   If scriptName = "fixed_issues.asp" AND objAccessControl.UserLogedIn Then
1531
      Is_Section_Editable = TRUE
1532
   Else
1533
      Is_Section_Editable = FALSE
1534
   End If
119 ghuddy 1535
End Function
1536
'----------------------------------------------------------------------------------------------------------------------------------------
1537
Function Is_Critical_Section_Editable ( cDlocked )
129 ghuddy 1538
   ' Editable if (   (unlocked OR rejected)
1539
   '              OR ( NOT released/locked AND EditReleaseNotesInPending allowed)
1540
   '              OR (released/locked AND EditCriticalInfoForLockedPackage allowed)
1541
   '             )
1542
   '             AND user logged in
5061 dpurdie 1543
   If (((cDlocked = "N") OR (cDlocked = "R")) OR ((cDlocked <> "Y") AND (canActionControlInProject("EditReleaseNotesInPending"))) OR ((cDlocked = "Y") AND (canActionControlInProject("EditCriticalInfoForLockedPackage")))) AND objAccessControl.UserLogedIn Then
129 ghuddy 1544
      Is_Critical_Section_Editable = TRUE
1545
   Else
1546
      Is_Critical_Section_Editable = FALSE
1547
   End If
119 ghuddy 1548
End Function
1549
 
1550
'---------------------------------------------------------------
1551
' Function: getLastNonRippleVersionPVID
1552
'
1553
' Purpose: returns the last non-ripple version of the package
1554
'
1555
' Arguments: this_pv_id : string
1556
'
1557
' Notes: In the past, users used to manually perform ripple builds.
1558
'        This function does not detect those as ripples. It could be
1559
'        made to do so but it would not be reliable. For example, it
1560
'        could check to see if the word "ripple" appears in the
1561
'        comments field of the record set of the SWL query.  That
1562
'        might catch some of those records, but assumes the user
1563
'        wrote the wor ripple into the comments (reason for version).
1564
'
6480 dpurdie 1565
Function getLastNonRippleVersionPVID( this_pv_id, ByRef rippleBasePvid, ByRef lastNonRipplePvid )
129 ghuddy 1566
   Dim queryResult
1567
   Dim queryString
6480 dpurdie 1568
   Dim lastNonRipple
119 ghuddy 1569
 
5442 dpurdie 1570
   ' default return value in case don't find anything
1571
   getLastNonRippleVersionPVID = this_pv_id
6480 dpurdie 1572
   lastNonRipple = this_pv_id
119 ghuddy 1573
 
5503 dpurdie 1574
   ' Get a list of all previous non-ripple builds starting with the current pvid
5442 dpurdie 1575
   '    The first entry will be the base entry of the current ripple
1576
   '    The second entry will be the previous significant entry
1577
   queryString = _
5503 dpurdie 1578
        "SELECT pv_id,last_pv_id,pkg_version,v_ext,build_type " &_
1579
        "FROM " &_
1580
        "  (SELECT build_type,last_pv_id,pv_id,pkg_version,v_ext " &_
1581
        "  FROM " &_
1582
        "    (SELECT pv.build_type,pv.last_pv_id AS raw_last_pvid ,pv_id,pv.pkg_version,pv.v_ext,DECODE(pv.pv_id, pv.last_pv_id, NULL, pv.last_pv_id) AS last_pv_id " &_
1583
        "    FROM release_manager.package_versions pv " &_
1584
        "    WHERE pv.PKG_ID IN " &_
1585
        "      (SELECT pkg_id " &_
1586
        "      FROM release_manager.package_versions pv " &_
1587
        "      WHERE pv.pv_id = " & this_pv_id &_
1588
        "      ) " &_
1589
        "    ) " &_
1590
        "    START WITH pv_id                    = " & this_pv_id &_
1591
        "    CONNECT BY nocycle prior last_pv_id = pv_id " &_
1592
        "  ) " &_
1593
        "WHERE build_type != 'Y' "
119 ghuddy 1594
 
5503 dpurdie 1595
 
129 ghuddy 1596
   Set queryResult = OraDatabase.DbCreateDynaset( queryString, cint(0))
119 ghuddy 1597
 
5442 dpurdie 1598
   ' First entry - Base of the current ripple (may be myself)
1599
   If ((NOT queryResult.BOF) AND (NOT queryResult.EOF)) Then
1600
         getLastNonRippleVersionPVID = queryResult("pv_id")
6480 dpurdie 1601
         lastNonRipple = queryResult("pv_id")
119 ghuddy 1602
 
5442 dpurdie 1603
        ' Second entry - Previous Non Ripple Entry
1604
        queryResult.MoveNext
1605
        If ((NOT queryResult.BOF) AND (NOT queryResult.EOF)) Then
1606
            getLastNonRippleVersionPVID = queryResult("pv_id")
1607
        End If
129 ghuddy 1608
   End If
119 ghuddy 1609
 
129 ghuddy 1610
   queryResult.Close()
1611
   Set queryResult = nothing
6480 dpurdie 1612
 
1613
   If Not isNull(rippleBasePvid) Then rippleBasePvid = lastNonRipple 
1614
   If Not isNull(lastNonRipplePvid) Then lastNonRipplePvid = getLastNonRippleVersionPVID
1615
 
119 ghuddy 1616
End Function
1617
 
5442 dpurdie 1618
 
159 ghuddy 1619
Function getLastNonRippleVersionPVIDLimitedByDate( this_pv_id, limitDate )
1620
   Dim queryResult
1621
   Dim queryString
1622
 
5442 dpurdie 1623
   ' default return value in case don't find anything
1624
   getLastNonRippleVersionPVIDLimitedByDate = this_pv_id
159 ghuddy 1625
 
5442 dpurdie 1626
   ' Get a list of all previous non-ripple builds starting with the cuurent pvid
1627
   '    The first entry will be the base entry of the current ripple
1628
   '    The second entry will be the previous significant entry
1629
   queryString = _
1630
            "SELECT last_pv_id, pv_id, pkg_version, v_ext,MODIFIED_STAMP " &_
1631
            "FROM " &_
1632
            "  (SELECT pv.build_type, pv.last_pv_id, pv_id, pv.pkg_version, pv.v_ext, pv.MODIFIED_STAMP" &_
1633
            "  FROM release_manager.package_versions pv" &_
1634
            "    START WITH pv.pv_id = " + this_pv_id &_
1635
            "    CONNECT BY nocycle prior pv.last_pv_id = pv.pv_id" &_
1636
            "  ) where build_type != 'Y' " &_
5639 dpurdie 1637
            "    AND MODIFIED_STAMP >= TO_DATE('" & limitDate & "','DY DD-MON-YYYY')"
159 ghuddy 1638
 
1639
   Set queryResult = OraDatabase.DbCreateDynaset( queryString, cint(0))
1640
 
5442 dpurdie 1641
   ' First entry - Base of the current ripple (may be myself)
159 ghuddy 1642
   If ((NOT queryResult.BOF) AND (NOT queryResult.EOF)) Then
5442 dpurdie 1643
         getLastNonRippleVersionPVIDLimitedByDate = queryResult("pv_id")
159 ghuddy 1644
 
5442 dpurdie 1645
        ' Second entry - Previous Non Ripple Entry
1646
        queryResult.MoveNext
1647
        If ((NOT queryResult.BOF) AND (NOT queryResult.EOF)) Then
1648
            getLastNonRippleVersionPVIDLimitedByDate = queryResult("pv_id")
1649
        End If
159 ghuddy 1650
   End If
1651
 
1652
   queryResult.Close()
1653
   Set queryResult = nothing
1654
End Function
1655
 
119 ghuddy 1656
'---------------------------------------------------------------
1657
' Function: getPreviousVersionPVID
1658
'
1659
' Purpose: returns the immediate predecssor version of the given
1660
'          package version
1661
'
1662
' Arguments: this_pv_id : string
1663
'
1664
' Notes:
1665
'
1666
Function getPreviousVersionPVID( this_pv_id )
129 ghuddy 1667
   Dim queryResult
1668
   Dim queryString
119 ghuddy 1669
 
129 ghuddy 1670
   getPreviousVersionPVID = ""
119 ghuddy 1671
 
157 ghuddy 1672
   queryString = "SELECT last_pv_id FROM package_versions WHERE pv_id = " & this_pv_id
119 ghuddy 1673
 
129 ghuddy 1674
   Set queryResult = OraDatabase.DbCreateDynaset( queryString, cint(0))
119 ghuddy 1675
 
129 ghuddy 1676
    If ((NOT queryResult.BOF) AND (NOT queryResult.EOF)) Then
1677
      getPreviousVersionPVID = queryResult("last_pv_id")
1678
   End If
119 ghuddy 1679
 
129 ghuddy 1680
   queryResult.Close()
1681
   Set queryResult = nothing
119 ghuddy 1682
 
1683
End Function
1684
 
1685
'---------------------------------------------------------------
129 ghuddy 1686
' Function: getLastSignificantPVID
1687
'
1688
' Purpose: Returns the last significant (man-made) version (PV_ID) that
1689
'          is a predecessor to the specified pv_id
1690
'
1691
' Arguments: pv_id       : Uniquely identifies this package version
1692
'            last_pv_id  : Uniquely identifies the predecssor of this package version
1693
' Notes:
1694
'
1695
Function getLastSignificantPVID (pv_id, last_pv_id)
1696
 
1697
   getLastSignificantPVID = ""
1698
 
1699
   If( (NOT IsNull(last_pv_id)) AND (last_pv_id <> pv_id) ) Then
1700
 
1701
      ' Get the pv_id for the current version, and if necessary, work back through any ripple versions as necessary
1702
      ' to get a non-ripple version ancestor
6480 dpurdie 1703
        pv_id = getLastNonRippleVersionPVID( pv_id , NULL, NULL)
5442 dpurdie 1704
        If (pv_id <> "") Then
129 ghuddy 1705
            getLastSignificantPVID = pv_id
5442 dpurdie 1706
        End If
129 ghuddy 1707
   End If
1708
 
1709
End Function
6480 dpurdie 1710
 
129 ghuddy 1711
'---------------------------------------------------------------
6480 dpurdie 1712
' Function: getLastSignificantVersions
1713
'
1714
' Purpose: Returns the last significant (man-made) version (PV_ID) that
1715
'          is a predecessor to the specified pv_id
1716
'
1717
' Arguments: pv_id              : Uniquely identifies this package version
1718
'            RefRippleBase      : Ref to store riple base PVID
1719
'            RefPrevNonRipple   : Ref to store previous non ripple PVID
1720
' Notes:
1721
'
1722
Sub getLastSignificantVersions (pv_id, ByRef RefRippleBase, ByRef RefPrevNonRipple)
1723
    Dim rv
1724
        rv = getLastNonRippleVersionPVID( pv_id , RefRippleBase, RefPrevNonRipple)
1725
End Sub
1726
 
1727
'---------------------------------------------------------------
129 ghuddy 1728
' Function: get_Pkg_Label
1729
'
1730
' Purpose: Returns the package label for the specified pv_id
1731
'
1732
' Arguments: pv_id       : Uniquely identifies this package version
1733
'
1734
Function get_Pkg_Label (pv_id)
1735
   Dim queryResult
1736
   Dim queryString
1737
 
1738
   get_Pkg_Label = ""
1739
 
1740
   ' Get the package label from the package versions table
1741
   queryString = "SELECT pkg_label FROM package_versions WHERE pv_id = " & pv_id
1742
   Set queryResult = OraDatabase.DbCreateDynaset( queryString, cint(0))
1743
   If ((NOT queryResult.BOF) AND (NOT queryResult.EOF)) Then
1744
      get_Pkg_Label = queryResult("pkg_label")
1745
   End If
1746
   queryResult.Close()
1747
   Set queryResult = nothing
1748
End Function
1749
'---------------------------------------------------------------
1750
' Function: get_Src_Path
1751
'
1752
' Purpose: Returns the source path for the specified pv_id
1753
'
1754
' Arguments: pv_id       : Uniquely identifies this package version
1755
'
1756
Function get_Src_Path (pv_id)
1757
   Dim queryResult
1758
   Dim queryString
1759
 
1760
   get_Src_Path = ""
1761
 
1762
   ' Get the source path from package versions table
1763
   queryString = "SELECT src_path FROM package_versions WHERE pv_id = " & pv_id
1764
   Set queryResult = OraDatabase.DbCreateDynaset( queryString, cint(0))
1765
   If ((NOT queryResult.BOF) AND (NOT queryResult.EOF)) Then
1766
      get_Src_Path = queryResult("src_path")
1767
   End If
1768
   queryResult.Close()
1769
   Set queryResult = nothing
1770
End Function
1771
 
1772
'---------------------------------------------------------------
119 ghuddy 1773
' Function: getOldLabel
1774
'
1775
' Purpose: Returns the previous label; if none then returns empty string
1776
'
1777
'          Since this operation is designed to fulfil the generation of
1778
'          diff commands, there is no point in considering ripple
1779
'          versions, since the only differences we find there are in
1780
'          the build.pl files (for example). So, this function uses
1781
'          some underlying methods that ignore ripple built versions
1782
'          therefore concentrating on versions that someone has manually
1783
'          gone and labelled, presumably because they changed some
1784
'          source file other than build.pl.
1785
'
1786
' Arguments: pv_id       : Uniquely identifies this package version
1787
'            last_pv_id  : Uniquely identifies the predecssor of this package version
1788
' Notes:
1789
'
1790
Function getOldLabel (pv_id, last_pv_id)
129 ghuddy 1791
   Dim lastSignificantPVID
119 ghuddy 1792
 
129 ghuddy 1793
   getOldLabel = ""
119 ghuddy 1794
 
129 ghuddy 1795
   lastSignificantPVID = getLastSignificantPVID(pv_id, last_pv_id)
1796
   If (lastSignificantPVID <> "") Then
1797
      getOldLabel = get_Pkg_Label(lastSignificantPVID)
1798
   End If
1799
End Function
1800
'---------------------------------------------------------------
1801
' Function: getOldSrcPath
1802
'
1803
' Purpose: Returns the previous src path; if none then returns empty string
1804
'
1805
'          Since this operation is designed to fulfil the generation of
1806
'          diff commands, there is no point in considering ripple
1807
'          versions, since the only differences we find there are in
1808
'          the build.pl files (for example). So, this function uses
1809
'          some underlying methods that ignore ripple built versions
1810
'          therefore concentrating on versions that someone has manually
1811
'          gone and labelled, presumably because they changed some
1812
'          source file other than build.pl.
1813
'
1814
'          NOTE: With SubVersion, the src_path column in the package_versions
1815
'                table will be used to hold the Subversion tag. This function
1816
'                will therefore be used mostly when a package version is
1817
'                controlled under subversion.
1818
'
1819
' Arguments: pv_id       : Uniquely identifies this package version
1820
'            last_pv_id  : Uniquely identifies the predecssor of this package version
1821
' Notes:
1822
'
1823
Function getOldSrcPath (pv_id, last_pv_id)
1824
   Dim lastSignificantPVID
119 ghuddy 1825
 
129 ghuddy 1826
   getOldSrcPath = ""
119 ghuddy 1827
 
129 ghuddy 1828
   lastSignificantPVID = getLastSignificantPVID(pv_id, last_pv_id)
1829
   If (lastSignificantPVID <> "") Then
1830
      getOldSrcPath = get_Src_Path(lastSignificantPVID)
1831
   End If
1832
End Function
1833
'----------------------------------------------------------------------------------------------------------------------
1834
Sub vcs_info_from_vcs_tag( nVcs_tag, ByRef objDetails )
1835
   Dim rsTemp, Query_String
119 ghuddy 1836
 
129 ghuddy 1837
   Query_String = " SELECT * FROM vcs_type WHERE tag = '"& nVcs_tag &"'"
1838
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
1839
   If (NOT rsTemp.BOF ) AND (NOT rsTemp.EOF) Then
1840
      objDetails.Item("vcs_type_id") = rsTemp("vcs_type_id")
1841
      objDetails.Item("vcs_name") = rsTemp("name")
1842
      objDetails.Item("vcs_tag") = rsTemp("tag")
1843
   Else
141 ghuddy 1844
      Call RaiseMsg(enum_MSG_ERROR, "Database does not contain a record of the VCS tag : " & nVcs_tag )
129 ghuddy 1845
   End If
1846
   rsTemp.Close()
1847
   set rsTemp = nothing
1848
End Sub
1849
'----------------------------------------------------------------------------------------------------------------------
1850
Sub vcs_info_from_vcs_type_id( nVcs_type_id, ByRef objDetails )
1851
   Dim rsTemp, Query_String
1852
 
1853
   If NOT IsNull(nVcs_type_id) Then
1854
      Query_String = " SELECT * FROM vcs_type WHERE vcs_type_id = "& nVcs_type_id
1855
      Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
1856
      If (NOT rsTemp.BOF ) AND (NOT rsTemp.EOF) Then
1857
         objDetails.Item("vcs_type_id") = rsTemp("vcs_type_id")
1858
         objDetails.Item("vcs_name") = rsTemp("name")
1859
         objDetails.Item("vcs_tag") = rsTemp("tag")
1860
      Else
141 ghuddy 1861
         Call RaiseMsg(enum_MSG_ERROR, "Database does not contain a record of the VCS type ID : " & nVcs_type_id )
129 ghuddy 1862
      End If
1863
      rsTemp.Close()
1864
      set rsTemp = nothing
1865
   Else
3616 dpurdie 1866
      ' default to returning Subversion info, assuming it exists in the data
1867
      Call vcs_info_from_vcs_tag( enum_VCS_SUBVERSION_TAG, objDetails )
129 ghuddy 1868
   End If
1869
End Sub
1870
'----------------------------------------------------------------------------------------------------------------------
137 ghuddy 1871
Sub get_vcs_info_for_package( nPkgLabel, nBuildType, nVcsTypeId, nDLocked, ByRef objDetails )
129 ghuddy 1872
   ' lots of patch versions exist with N/A as their pkg_label and null as vcs_type_id. These are all uncontrolled
1873
   ' packages published directly into dpkg_archive with no controlled source under clearcase, so we want to treat
1874
   ' them as uncontrolled if possible.
137 ghuddy 1875
   If nDLocked = "Y" AND ((nPkgLabel = "N/A") OR IsNull(nPkgLabel)) AND nBuildType = "M" AND IsNull(nVcsTypeId) Then
129 ghuddy 1876
      Call vcs_info_from_vcs_tag( enum_VCS_UNCONTROLLED_TAG, objDetails )
1877
   Else
1878
      ' Otherwise, try and decode the VCS from the package's vcs_type_id entry from the package version table
1879
      ' NOTE: A null vcs_type_id entry will default to ClearCase. That is all we have been using up til now so
1880
      ' it should be safe.
1881
      Call vcs_info_from_vcs_type_id( nVcsTypeId, objDetails )
1882
   End If
1883
End Sub
1884
'----------------------------------------------------------------------------------------------------------------------
1885
Sub get_vcs_info_for_pv_id( nPv_id, ByRef objDetails )
1886
   Dim rsTemp, Query_String
1887
 
1888
   Query_String = _
137 ghuddy 1889
   " SELECT pv.pkg_label, pv.build_type, pv.vcs_type_id, pv.dlocked "&_
129 ghuddy 1890
   "   FROM PACKAGE_VERSIONS pv"&_
1891
   "  WHERE pv.pv_id = "& nPv_id
1892
 
1893
   Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
1894
   If (NOT rsTemp.BOF ) AND (NOT rsTemp.EOF) Then
137 ghuddy 1895
      Call get_vcs_info_for_package( rsTemp("pkg_label"), rsTemp("build_type"), rsTemp("vcs_type_id"), rsTemp("dlocked"), objDetails )
129 ghuddy 1896
   Else
1897
      Call RaiseMsg(enum_MSG_ERROR, "PV_ID (" & nPv_id & ") Not Found")
1898
   End If
1899
   rsTemp.Close()
1900
   set rsTemp = nothing
1901
End Sub
1902
'----------------------------------------------------------------------------------------------------------------------
1903
Function get_vcs_tag( nPv_id )
1904
   Dim tempVcsInfoCollector
1905
   Set tempVcsInfoCollector = CreateObject("Scripting.Dictionary")
1906
 
1907
   Call get_vcs_info_for_pv_id( nPv_id, tempVcsInfoCollector )
1908
   get_vcs_tag = tempVcsInfoCollector.Item("vcs_tag")
1909
 
1910
   Set tempVcsInfoCollector = nothing
119 ghuddy 1911
End Function
129 ghuddy 1912
'----------------------------------------------------------------------------------------------------------------------
143 ghuddy 1913
Function isInDoNotRippleTable( NNrtag_id, NNpv_id )
1914
   Dim rsTemp, Query_String
119 ghuddy 1915
 
143 ghuddy 1916
   isInDoNotRippleTable = FALSE
1917
 
1918
   If NNrtag_id <> "" AND NNpv_id <> "" Then
1919
      Query_String = " SELECT dnr.pv_id FROM DO_NOT_RIPPLE dnr WHERE dnr.RTAG_ID ="& NNrtag_id &" AND dnr.PV_ID ="& NNpv_id
1920
 
1921
      Set rsTemp = OraDatabase.DbCreateDynaset(Query_String, cint(0))
1922
      If rsTemp.RecordCount <> 0  Then
1923
         isInDoNotRippleTable = TRUE
1924
      End If
1925
      rsTemp.Close()
1926
      set rsTemp = nothing
1927
   End If
1928
End Function
145 ghuddy 1929
'----------------------------------------------------------------------------------------------------------------------
6176 dpurdie 1930
' Number of active (Not paused, Not Disabled) daemon configured for a given Release 
1931
Function activeDaemonCount ( NNrtag_id )
1932
   Dim rsTemp, Query_String
1933
 
1934
   activeDaemonCount = 0
1935
 
1936
   If NNrtag_id <> ""  Then
6873 dpurdie 1937
      Query_String = "SELECT count(*) as Count FROM release_config rc, run_level rl WHERE rc.rtag_id = " & NNrtag_id &  " AND rc.RCON_ID = rl.rcon_id(+) AND NVL(rl.pause, 0 ) = 0"
6176 dpurdie 1938
 
1939
      Set rsTemp = OraDatabase.DbCreateDynaset(Query_String, cint(0))
1940
      If rsTemp.RecordCount <> 0  Then
1941
         activeDaemonCount = rsTemp("Count")
1942
      End If
1943
      rsTemp.Close()
1944
      set rsTemp = nothing
1945
   End If
7022 dpurdie 1946
End Function
1947
'----------------------------------------------------------------------------------------------------------------------
1948
Function hasFutureBuild( NNrtag_id, NNpv_id )
1949
   Dim rsTemp, Query_String
6176 dpurdie 1950
 
7022 dpurdie 1951
   hasFutureBuild = FALSE
1952
 
1953
   If NNrtag_id <> "" AND NNpv_id <> "" Then
1954
 
1955
      Query_String = " SELECT * FROM DAEMON_INSTRUCTIONS di WHERE di.RTAG_ID ="& NNrtag_id &" AND di.PV_ID ="& NNpv_id & " AND OP_CODE = " & OP_CODE_2_FUTURE_BUILD
1956
 
1957
      Set rsTemp = OraDatabase.DbCreateDynaset(Query_String, cint(0))
1958
      If rsTemp.RecordCount <> 0  Then
1959
         hasFutureBuild = TRUE
1960
      End If
1961
      rsTemp.Close()
1962
      set rsTemp = nothing
1963
   End If
6176 dpurdie 1964
End Function
7022 dpurdie 1965
 
6176 dpurdie 1966
'----------------------------------------------------------------------------------------------------------------------
7022 dpurdie 1967
Function isBuilding( NNpv_id )
1968
   Dim rsTemp, Query_String
1969
 
1970
   isBuilding = FALSE
1971
 
1972
   If  NNpv_id <> "" Then
1973
      Query_String = _
1974
            "SELECT unique rl.CURRENT_PV_ID" &_
1975
            " FROM RELEASE_CONFIG rc, RELEASE_TAGS rt, RUN_LEVEL rl " &_
1976
            " WHERE rt.RTAG_ID = rc.RTAG_ID " &_
1977
            "   AND rc.bmcon_id is not null" &_
1978
            "   AND rt.OFFICIAL in ( 'N', 'R', 'C')" &_
1979
            "   AND rl.RCON_ID(+) = rc.RCON_ID" &_
1980
            "   AND rl.CURRENT_PKG_ID_BEING_BUILT is not null" &_
1981
            "   AND NVL(rl.PAUSE,0) < 2" &_
1982
            "   AND rl.CURRENT_PV_ID = " & NNpv_id 
1983
 
1984
      Set rsTemp = OraDatabase.DbCreateDynaset(Query_String, cint(0))
1985
      If rsTemp.RecordCount <> 0  Then
1986
         isBuilding = TRUE
1987
      End If
1988
      rsTemp.Close()
1989
      set rsTemp = nothing
1990
   End If
1991
End Function
1992
 
1993
'----------------------------------------------------------------------------------------------------------------------
145 ghuddy 1994
Function pv_id_exists( nPv_id )
1995
   Dim rsTemp, Query_String
143 ghuddy 1996
 
145 ghuddy 1997
   If NOT IsNull( nPv_id ) AND nPv_id <> "" Then
1998
      Query_String = _
1999
      " SELECT pv.pv_id "&_
2000
      "   FROM PACKAGE_VERSIONS pv"&_
2001
      "  WHERE pv.pv_id = "& nPv_id
2002
      Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
2003
      If (NOT rsTemp.BOF ) AND (NOT rsTemp.EOF) Then
2004
         pv_id_exists = TRUE
2005
      Else
2006
         pv_id_exists = FALSE
2007
      End If
2008
      rsTemp.Close()
2009
      set rsTemp = nothing
2010
   Else
2011
      pv_id_exists = FALSE
2012
   End If
2013
End Function
2014
'----------------------------------------------------------------------------------------------------------------------
2015
Function is_daemon_enabled_release( NNrtag_id, defaultReturnValue )
2016
   Dim rsTemp, Query_String
143 ghuddy 2017
 
145 ghuddy 2018
   If NOT IsNull( NNrtag_id ) AND NNrtag_id <> "" Then
143 ghuddy 2019
 
145 ghuddy 2020
      Query_String = _
4293 dpurdie 2021
      " SELECT rc.bmcon_id "&_
145 ghuddy 2022
      "   FROM RELEASE_CONFIG rc"&_
2023
      "  WHERE rc.rtag_id = "& NNrtag_id
2024
      Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
2025
 
2026
      is_daemon_enabled_release = FALSE
2027
      While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF) AND (is_daemon_enabled_release = FALSE))
4293 dpurdie 2028
         If (NOT IsNull(rsTemp("bmcon_id"))) AND (rsTemp("bmcon_id") <> "") Then
145 ghuddy 2029
            is_daemon_enabled_release = TRUE
2030
         End If
2031
         rsTemp.MoveNext
2032
      WEnd
2033
 
2034
      rsTemp.Close()
2035
      set rsTemp = nothing
2036
   Else
2037
      is_daemon_enabled_release = defaultReturnValue
2038
   End If
2039
End Function
147 ghuddy 2040
'--------------------------------------------------------------------------------------------------------------------------
2041
' Convert release state into a meaningful string
2042
Function Get_Official( nOfficial )
2043
   If nOfficial = "N" Then
2044
      Get_Official = "Open"
2045
   ElseIf nOfficial = "A" Then
2046
      Get_Official = "Archive"
2047
   ElseIf nOfficial = "C" Then
2048
      Get_Official = "CCB"
2049
   ElseIf nOfficial = "R" Then
2050
      Get_Official = "Restricted"
2051
   ElseIf nOfficial = "Y" Then
2052
      Get_Official = "Closed"
5623 dpurdie 2053
   ElseIf nOfficial = "P" Then
2054
      Get_Official = "Preserved"
147 ghuddy 2055
   Else
2056
      Get_Official = "?"
2057
   End If
2058
End Function
151 ghuddy 2059
'-----------------------------------------------------------------------------------------------------------------------------
2060
Function Get_Pkg_Id_For_Pv_Id ( NNpv_id )
2061
   Dim rsTemp, Query_String
145 ghuddy 2062
 
151 ghuddy 2063
   Get_Pkg_Id_For_Pv_Id = ""
145 ghuddy 2064
 
151 ghuddy 2065
   If NOT IsNull(NNpv_id) AND NNpv_id <> "" Then
2066
      Query_String = _
2067
      "SELECT pkg_id FROM package_versions WHERE pv_id = "& NNpv_id
2068
 
2069
      Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))
2070
 
2071
      If ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) Then
2072
         Get_Pkg_Id_For_Pv_Id = rsTemp("pkg_id")
2073
      End If
2074
      rsTemp.Close
2075
      Set rsTemp = nothing
2076
   End If
2077
 
2078
End Function
2079
 
171 brianf 2080
'-----------------------------------------------------------------------------------------------------------------------------
161 iaugusti 2081
Function iif(bFlag, sTrueStr, sFalseStr)
2082
  if bFlag then
2083
    iif = sTrueStr
2084
  else 
2085
    iif = sFalseStr
2086
  end if
2087
End Function
151 ghuddy 2088
 
5939 dpurdie 2089
'-----------------------------------------------------------------------------------------------------------------------------
2090
Function EmptyToNull (sVal)
5952 dpurdie 2091
    If isNull(sVal) Then
2092
        EmptyToNull = NULL
2093
    ElseIf sval <> "" Then
5939 dpurdie 2094
        EmptyToNull = sVal
2095
    Else
2096
        EmptyToNull = NULL
2097
    End If
2098
End Function
2099
 
5964 dpurdie 2100
'-----------------------------------------------------------------------------------------------------------------------------
2101
Function EmptyToNullString ( sName, sVal)
2102
    If isNull(sVal) Then
2103
        EmptyToNullString = sName & " is NULL"
2104
    ElseIf sval <> "" Then
2105
        EmptyToNullString = sName & "='" & sVal & "'"
2106
    Else
2107
        EmptyToNullString = sName & " is NULL"
2108
    End If
2109
End Function
2110
 
171 brianf 2111
'--------------------------------------------------------------------------------------------------------------------------
2112
' Sets the state of all build daemons of the specified release
2113
Sub SetDaemonStates (artag_id,astate)
2114
	On Error Resume Next
2115
	OraDatabase.Parameters.Add "RTAG_ID", 			artag_id, 	ORAPARM_INPUT, ORATYPE_NUMBER 
2116
	OraDatabase.Parameters.Add "NSTATE", 			astate, 	ORAPARM_INPUT, ORATYPE_NUMBER 
2117
 
2118
	objEH.TryORA ( OraSession )
2119
 
2120
	OraDatabase.ExecuteSQL _
2121
        "BEGIN PK_BUILDAPI.SET_DAEMON_STATES(:RTAG_ID,:NSTATE);   END;"
2122
 
2123
	objEH.CatchORA ( OraSession )
2124
 
5952 dpurdie 2125
	OraDatabase.Parameters.Remove "RTAG_ID"
171 brianf 2126
	OraDatabase.Parameters.Remove "NSTATE"	
2127
End Sub
2128
 
183 brianf 2129
'----------------------------------------------
2130
'Returns true if the specified package version exists in the specified table
2131
Function PackageExists(RtagId, pvId, stable)
2132
  Dim rsTemp
2133
  Dim sqry
185 brianf 2134
  If RtagId = "" Then
2135
    PackageExists = False
2136
  Else
2137
    sqry = "SELECT * FROM " & stable & " WHERE rtag_id = " & RtagId & " AND pv_id = " & pvId
2138
    Set rsTemp = OraDatabase.DbCreateDynaset(sqry,CInt(0))
2139
    PackageExists = rsTemp.RecordCount > 0  
2140
    rsTemp.Close()
2141
    Set rsTemp = Nothing
2142
  End If
183 brianf 2143
End Function
2144
 
4710 dpurdie 2145
'----------------------------------------------
2146
' Test that specified package/version exists in dpkg_archive
5245 dpurdie 2147
' Can also test presence of the archive
4710 dpurdie 2148
'   Use http interface as it does not require authetication
2149
Function testArchiveAccessPkg(pkgName, pkgVersion)
2150
  Dim oXMLHTTP
2151
  Dim testUrl
2152
 
2153
  testArchiveAccessPkg = False
6146 dpurdie 2154
  testUrl = HTTP_PKG_ARCHIVE
2155
 
2156
  testUrl = testUrl & "/cgi-bin/testPackage.pl"
4710 dpurdie 2157
  If pkgName <> "" Then
6146 dpurdie 2158
      testUrl = testUrl & "?path=" &  pkgName & "/" & pkgVersion
4710 dpurdie 2159
  End If
2160
  Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.3.0")
2161
 
4756 dpurdie 2162
  ' Use error handling in case dpkg_archive is not available
4710 dpurdie 2163
  ' Use HEAD to test existence
4756 dpurdie 2164
  Err.Clear
2165
  On Error Resume Next
6146 dpurdie 2166
  oXMLHTTP.Open "GET", testUrl, False
4710 dpurdie 2167
  oXMLHTTP.Send
2168
 
4756 dpurdie 2169
  ' Do not combine the next two If statments - it will not work
2170
  If Err.Number = 0  Then
2171
    If oXMLHTTP.Status = 200 Then 
6146 dpurdie 2172
        If InStr(1,oXMLHTTP.responseText, "::FOUND::", 1) = 1 Then
2173
            testArchiveAccessPkg = True
2174
        End If
4756 dpurdie 2175
    End If
4710 dpurdie 2176
  End If
6146 dpurdie 2177
 
4756 dpurdie 2178
  On Error Goto 0
4710 dpurdie 2179
End Function
5008 dpurdie 2180
 
2181
'--------------------------------------------------------------------------------------------------------------------------
2182
' Like Cint, but handles NULL by replacing it with a default value
2183
Function NiceInt( val, def)
5045 dpurdie 2184
   If val <> ""  AND IsNumeric(val) Then
5008 dpurdie 2185
       NiceInt = CInt(val)
2186
   Else
2187
       NiceInt = def
2188
   End If
2189
End Function
5143 dpurdie 2190
 
2191
'--------------------------------------------------------------------------------------------------------------------------
6627 dpurdie 2192
' Like CLng, but handles NULL by replacing it with a default value
2193
Function NiceCLng( val, def)
2194
   If val <> ""  AND IsNumeric(val) Then
2195
       NiceCLng = CLng(val)
2196
   Else
2197
       NiceCLng = def
2198
   End If
2199
End Function
6786 dpurdie 2200
 
6627 dpurdie 2201
'--------------------------------------------------------------------------------------------------------------------------
7277 dpurdie 2202
' Like CStr, but handles NULL by replacing it with a default value
2203
Function NiceCStr( val, def)
2204
   If IsNull(val) Then
2205
       NiceCStr = def
2206
   ElseIf IsEmpty(val) Then
2207
       NiceCStr = def
2208
   Else
2209
       NiceCStr = CStr(val)
2210
   End If
2211
End Function
2212
 
2213
'--------------------------------------------------------------------------------------------------------------------------
6786 dpurdie 2214
' Convert a duration(seconds) into days,hours and seconds. eg 10d 3h 13m 15s
7240 dpurdie 2215
Function NiceDuration(nDuration)
6786 dpurdie 2216
    NiceDuration = ""
2217
    Dim joiner : joiner = ""
2218
    Dim unit
7240 dpurdie 2219
    Dim duration : duration = nDuration
6786 dpurdie 2220
    If duration > (60 * 60 * 24) Then
2221
        unit = Int(duration / (60 * 60 * 24))
2222
        duration = duration MOD (60 * 60 * 24) 
2223
        NiceDuration = NiceDuration & joiner & unit & "d"
7240 dpurdie 2224
        joiner = "&nbsp;"
6786 dpurdie 2225
    End If
2226
 
2227
    If duration > (60 * 60) Then
2228
        unit = Int(duration / (60 * 60))
2229
        duration = duration MOD (60 * 60) 
2230
        NiceDuration = NiceDuration & joiner & unit & "h"
7240 dpurdie 2231
        joiner = "&nbsp;"
6786 dpurdie 2232
    End If
2233
 
2234
        If duration > (60) Then
2235
        unit = Int(duration / (60))
2236
        duration = duration MOD (60) 
2237
        NiceDuration = NiceDuration & joiner & unit & "m"
7240 dpurdie 2238
        joiner = "&nbsp;"
6786 dpurdie 2239
    End If
2240
 
2241
    NiceDuration = NiceDuration & joiner & duration & "s"
2242
End Function
2243
 
2244
'--------------------------------------------------------------------------------------------------------------------------
7250 dpurdie 2245
' Quick and ugly code to attempt to remove nasty characters from strings
2246
' In particular some unicode characters that mess with the json decoder
2247
Function CleanUpJson (input)
2248
      Dim objRegExp, outputStr
2249
      Set objRegExp = New Regexp
2250
 
2251
      objRegExp.IgnoreCase = True
2252
      objRegExp.Global = True
2253
      objRegExp.Pattern = "((?![\[\]\(\)\{\}\$-_?/""';:.,a-zA-Z0-9]).)+"
2254
      outputStr = objRegExp.Replace(input, " ")
2255
 
2256
      CleanUpJson = outputStr
2257
    End Function
2258
 
2259
'--------------------------------------------------------------------------------------------------------------------------
5143 dpurdie 2260
'   Test if package can be added to a release
2261
'       Really tests if a a package of this packages alias can be
2262
'       manipulated in this release
2263
'   True: Package alias can be added/replaced in release
2264
Function canAddToRelease ( nRtagId, nPvId )
5156 dpurdie 2265
 
2266
    ' If we don't enough parameters then assume we can add package
2267
    If nRtagId = "" OR nPvId = "" Then
2268
        canAddToRelease = TRUE
2269
        Exit Function
2270
    End If
2271
 
5143 dpurdie 2272
	On Error Resume Next
2273
	OraDatabase.Parameters.Add "RTAG_ID", 			nRtagId, 	ORAPARM_INPUT, ORATYPE_NUMBER 
2274
	OraDatabase.Parameters.Add "PV_ID", 			nPvId, 	    ORAPARM_INPUT, ORATYPE_NUMBER 
2275
	OraDatabase.Parameters.Add "RETURN_CODE", 		null, 	    ORAPARM_OUTPUT, ORATYPE_NUMBER 
2276
 
2277
	objEH.TryORA ( OraSession )
2278
 
2279
	OraDatabase.ExecuteSQL _
2280
        "BEGIN :RETURN_CODE := PK_RELEASE.CAN_ADD_PKG_TO_RELEASE(:RTAG_ID,:PV_ID);   END;"
2281
 
2282
    If CInt(OraDatabase.Parameters("RETURN_CODE").Value) = 0 Then
2283
        canAddToRelease = FALSE
2284
    Else
2285
        canAddToRelease = TRUE
2286
    End If
2287
 
2288
	objEH.CatchORA ( OraSession )
2289
 
2290
	OraDatabase.Parameters.Remove "RETURN_CODE"
2291
	OraDatabase.Parameters.Remove "RTAG_ID"
2292
	OraDatabase.Parameters.Remove "PV_ID"	
2293
End Function
5177 dpurdie 2294
'--------------------------------------------------------------------------------------------------------------------------
2295
'   Returns either the value of the Request('tag') or the default value       
2296
Function RequestDefault(stag, sdefault)
2297
   If Request(stag) <> "" Then
2298
       RequestDefault = Request(stag)
2299
   Else 
2300
       RequestDefault = sdefault
2301
   End If
2302
End Function
5178 dpurdie 2303
'--------------------------------------------------------------------------------------------------------------------------
6879 dpurdie 2304
'   Returns either the value of the Request('tag') or the default value       
2305
Function RequestBool(stag, sdefault)
2306
    Dim val
2307
    If Request(stag) <> "" Then
2308
        RequestBool = FALSE
2309
        val = UCase( Request(stag))
2310
        If val = "Y" or val = "TRUE" Then
2311
            RequestBool = TRUE
2312
        ElseIf IsNumeric(val) Then
2313
            If val > 0 Then
2314
                RequestBool = TRUE
2315
            End If
2316
        End If
2317
   Else 
2318
       RequestBool = sdefault
2319
   End If
2320
End Function
2321
 
2322
'--------------------------------------------------------------------------------------------------------------------------
5178 dpurdie 2323
'   Data structure to assist in the Release Mode Transition Check
2324
'   Tuples (FromCondition, ToCondition)  '-' == Always
2325
'   Order matches ReleaseModeAccessCheck
2326
'
2327
Dim RMTD_Data
2328
RMTD_Data = Array(Array("-"                        ,"-"), _
2329
                  Array("ChangeModeFromRestrictive","-"), _
2330
                  Array("ChangeModeFromRestrictive","-"), _
2331
                  Array("ChangeModeFromClosed"     ,"ChangeModeToClosed"), _
2332
                  Array("ChangeModeFromClosed"     ,"ChangeModeToPreserved"), _
2333
                  Array("ChangeModeFromArchived"   ,"ChangeModeToArchived") _
2334
                  )
2335
'-------------------------------------------------
2336
' Function: ReleaseMode2Index    
2337
' Description: Convert a enumDB_RELEASE_IN_*** into an index into the above array
2338
'
2339
Function ReleaseMode2Index( eReleaseMode )
2340
    If eReleaseMode = enumDB_RELEASE_IN_OPEN_MODE Then
2341
        ReleaseMode2Index = 0
2342
    ElseIf eReleaseMode = enumDB_RELEASE_IN_RESTRICTIVE_MODE Then
2343
        ReleaseMode2Index = 1
2344
    ElseIf eReleaseMode = enumDB_RELEASE_IN_CCB_MODE Then
2345
        ReleaseMode2Index = 2
2346
    ElseIf eReleaseMode = enumDB_RELEASE_IN_CLOSED_MODE Then
2347
        ReleaseMode2Index = 3
2348
    ElseIf eReleaseMode = enumDB_RELEASE_IN_PRESERVE_MODE Then
2349
        ReleaseMode2Index = 4
2350
    ElseIf eReleaseMode = enumDB_RELEASE_IN_ARCHIVE_MODE Then
2351
        ReleaseMode2Index = 5
2352
    Else
2353
        ReleaseMode2Index = -1
2354
    End If
2355
End Function
2356
 
2357
'-------------------------------------------------
2358
' Function:     ReleaseModeAccessCheck    
2359
' Description:  Determine if the user can change the Release Mode
2360
'               from - Start at this Release Mode
2361
'               to   - Can the user transition to this mode
2362
' Returns:      True - yes they can
2363
'
2364
Function ReleaseModeAccessCheck( from, toMode )
2365
    Dim fromIndex : fromIndex = ReleaseMode2Index(from)
2366
    Dim toIndex   : toIndex = ReleaseMode2Index(toMode)
2367
    ReleaseModeAccessCheck = False
2368
 
2369
    ' Can't Change to same mode
2370
    If from = toMode Then
2371
        Exit Function
2372
    End If
2373
 
2374
    On Error Resume Next
2375
    Dim fromAccess : fromAccess = ""
2376
    Dim toAccess   : toAccess = ""
2377
 
2378
    ' Get access type from table
2379
    '   ""      - No access (internal error)
2380
    '   "-"     - All Access allowed (if user is logged in )
2381
    '   Else    - Name of a canActionControlInProject
2382
    fromAccess = RMTD_Data(fromIndex)(0)
2383
    toAccess = RMTD_Data(toIndex)(1)
2384
 
2385
    ' Check From Condition
2386
    If fromAccess = "-" Then
2387
        ReleaseModeAccessCheck = canActionInProject()
2388
    ElseIf fromAccess <> "" Then
2389
        ReleaseModeAccessCheck = canActionControlInProject(fromAccess)
2390
    End If
2391
 
2392
    If NOT ReleaseModeAccessCheck  Then
2393
        Exit Function
2394
    End If
2395
 
2396
    ' Check to Condition
2397
    If toAccess = "-" Then
2398
        ReleaseModeAccessCheck = canActionInProject()
2399
    ElseIf toAccess <> "" Then 
2400
        ReleaseModeAccessCheck = canActionControlInProject(toAccess)
2401
    End If
2402
 
2403
End Function
2404
 
2405
'-------------------------------------------------
2406
' Function:    releaseIsClosed
2407
' Description: Determine if a release can be modified at all
2408
' Returns:     True: Release cannot be modified
2409
'                    ie: it is NOT in a state that allows modification
2410
'
2411
Function releaseIsClosed(eReleaseMode)
2412
    If eReleaseMode = enumDB_RELEASE_IN_OPEN_MODE Then
2413
        releaseIsClosed = False
2414
    ElseIf eReleaseMode = enumDB_RELEASE_IN_RESTRICTIVE_MODE Then
2415
        releaseIsClosed = False
2416
    ElseIf eReleaseMode = enumDB_RELEASE_IN_CCB_MODE Then
2417
        releaseIsClosed = False
2418
    ElseIf eReleaseMode = enumDB_RELEASE_IN_CLOSED_MODE Then
2419
        releaseIsClosed = True
2420
    ElseIf eReleaseMode = enumDB_RELEASE_IN_PRESERVE_MODE Then
2421
        releaseIsClosed = True
2422
    ElseIf eReleaseMode = enumDB_RELEASE_IN_ARCHIVE_MODE Then
2423
        releaseIsClosed = True
2424
    Else
2425
        releaseIsClosed = True
2426
    End If
2427
End Function
2428
 
2429
'-------------------------------------------------
2430
' Function:    releaseIsWritable
2431
' Description: Determine if a release can be modified
2432
' Returns:     True: Release can be modified
2433
'                    ie: it is in a state that allows modification
2434
'
2435
Function releaseIsWritable(eReleaseMode)
2436
    If eReleaseMode = enumDB_RELEASE_IN_OPEN_MODE AND canActionInProject() Then
2437
        releaseIsWritable = True
2438
    ElseIf eReleaseMode = enumDB_RELEASE_IN_RESTRICTIVE_MODE AND canActionControlInProject("AlterReleaseContentsInRestrictiveMode") Then
2439
        releaseIsWritable = True
2440
    ElseIf eReleaseMode = enumDB_RELEASE_IN_CCB_MODE AND canActionControlInProject("AlterReleaseContentsInRestrictiveMode")Then
2441
        releaseIsWritable = True
2442
    ElseIf eReleaseMode = enumDB_RELEASE_IN_CLOSED_MODE Then
2443
        releaseIsWritable = False
2444
    ElseIf eReleaseMode = enumDB_RELEASE_IN_PRESERVE_MODE Then
2445
        releaseIsWritable = False
2446
    ElseIf eReleaseMode = enumDB_RELEASE_IN_ARCHIVE_MODE Then
2447
        releaseIsWritable = False
2448
    Else
2449
        releaseIsWritable = False
2450
    End If
2451
End Function
2452
 
2453
'-------------------------------------------------
2454
' Function:    releaseIsMergable
2455
' Description: Determine if the user can 'Merge' into the release
2456
' Returns:     True: Release can be modified
2457
'                    ie: it is in a state that allows modification
2458
'
2459
Function releaseIsMergable(eReleaseMode)
5294 dpurdie 2460
    If eReleaseMode = enumDB_RELEASE_IN_OPEN_MODE AND canActionInProject() Then
5178 dpurdie 2461
        releaseIsMergable = True
2462
    ElseIf eReleaseMode = enumDB_RELEASE_IN_RESTRICTIVE_MODE AND canActionControlInProject("MergeRelease")  Then
2463
        releaseIsMergable = True
2464
    ElseIf eReleaseMode = enumDB_RELEASE_IN_CCB_MODE AND canActionControlInProject("MergeReleaseForCCB") Then
2465
        releaseIsMergable = True
2466
    Else
2467
        releaseIsMergable = False
2468
    End If
2469
End Function
5251 dpurdie 2470
'-------------------------------------------------
2471
' Function:         RenderLxrStateString   
2472
' Description:      Return a string to show the current LXR state
5328 dpurdie 2473
Function RenderLxrStateString(rtagid, lxr, lxrState, official, txt)
5251 dpurdie 2474
    If lxr = "N" AND lxrState = "N" Then
2475
        RenderLxrStateString = ""
2476
    Else
2477
        Dim lxrUrl : lxrUrl = LXR_URL & "/" & rtagid
5328 dpurdie 2478
        Dim image, hover, isClosed
2479
 
2480
        If lxrState = "N" Then
2481
            If releaseIsClosed(official) Then lxrState = "A"
2482
        End If
2483
 
5251 dpurdie 2484
        Select Case lxrState
2485
            Case "I"
2486
                image = "LXRlogo64.jpeg"
2487
                hover = "LXR Index available"
2488
            Case "C"
2489
                image = "LXRlogo64_off.jpeg"
2490
                hover = "LXR Index available, but no longer updated"
2491
            Case "N"
2492
                image = "LXRlogo64_progress.jpeg"
2493
                hover = "LXR Requested, but not yet available"
5328 dpurdie 2494
            Case "A"
2495
                image = "LXRlogo64_off.jpeg"
2496
                hover = "LXR no longer available. Release is no longer open"
5251 dpurdie 2497
            Case Else
2498
                image = "LXRlogo64_progress.jpeg"
2499
                hover = "LXR Requested, unknown State:(" & lxrState &")"
2500
        End Select
2501
        RenderLxrStateString = "<a class=mmItem href='"&lxrUrl&"'><img src=""images/"&image&""" height=16 border=0 vspace=0 hspace=0 style='vertical-align : bottom' title='"&hover&"'>" & txt &"</a>"
2502
    End If
2503
End Function 
5178 dpurdie 2504
 
5648 dpurdie 2505
'-------------------------------------------------
2506
' Function:         rippleFieldName   
2507
' Description:      Return a string to convert a ripple field state to a text name
2508
'                   bFlag is set to false if the state is unknown.
5671 dpurdie 2509
Dim rippleFieldValues
2510
rippleFieldValues = Array ("M", "m", "p", "b", "L")
5648 dpurdie 2511
Function rippleFieldName ( rstate, ByRef bFlag )
6121 dpurdie 2512
    If isNULL(rstate) Then
2513
        rstate = "b"
2514
    End If
2515
 
5648 dpurdie 2516
    bFlag = TRUE
2517
    Select Case rstate
2518
            Case "M" 
2519
                rippleFieldName = "Major Number"
2520
            Case "m" 
2521
                rippleFieldName = "Minor Number"
2522
            Case "p" 
2523
                rippleFieldName = "Patch Number"
2524
            Case "b" 
2525
                rippleFieldName = "Build Number"
2526
            Case "L" 
2527
                rippleFieldName = "Limited"
2528
            Case Else 
2529
                rippleFieldName = "Invalid State"
2530
                bFlag = FALSE
2531
        End Select
2532
End Function
6610 dpurdie 2533
'----------------------------------------------------
2534
' Function: emailField
2535
' Description: Generate a 'span' with email information
2536
' The mailto class is picked up the jquery for processing
2537
Function emailField(sName, sEmail)
2538
    emailField = "<span title='Select Email Options' class='mailto txt_linked' data-email='" & sEmail & "'>" & sName & "</span>"
2539
End Function
6623 dpurdie 2540
Function emailField3(sName, sEmail,sUname)
2541
    emailField3 = "<span title='Select Email Options' class='mailto txt_linked' data-email='" & sEmail & "' data-uname='" & sUname & "'>" & sName & "</span>"
2542
End Function
2543
 
5952 dpurdie 2544
'-----------------------------------------------------------------------------------------------------------------------------
6615 dpurdie 2545
 
2546
Function ReleaseIcon ( cOfficial )
2547
 
2548
	If cOfficial = "N" Then
2549
		' Open Mode
2550
		ReleaseIcon = LIMG_OPEN_MODE
2551
 
2552
	ElseIf cOfficial = "R" Then
2553
		' Restrictive Mode
2554
		ReleaseIcon = LIMG_RESTRICTIVE_MODE
2555
 
2556
	ElseIf cOfficial = "C" Then
2557
		'CCB Mode
2558
		ReleaseIcon = LIMG_CCB_MODE
2559
 
2560
	ElseIf cOfficial = "Y" Then
2561
		'Closed Mode
2562
		ReleaseIcon = LIMG_CLOSED_MODE
2563
 
2564
	ElseIf cOfficial = "O" Then
2565
		'Closed Mode - With warning (aged)
2566
		ReleaseIcon = LIMG_CLOSED_MODE_WARN
2567
 
2568
	ElseIf cOfficial = "P" Then
2569
		'Closed Mode - Archived, but don't purge
2570
		ReleaseIcon = LIMG_PRESERVE_MODE
2571
 
2572
	ElseIf cOfficial = "A" Then
2573
		'Archive Mode
2574
		ReleaseIcon = LIMG_ARCHIVE_MODE	
2575
	End If
2576
 
2577
End Function
2578
'-----------------------------------------------------------------------------------------------------------------
2579
Function SdkIcon (cState)
2580
    If cState = "R" Then
2581
        ' Released - available for use
2582
        SdkIcon = LIMG_CLOSED_MODE
2583
    ElseIf cState = "D" Then
2584
        ' Deprecated - Cannot be added to a Release any more
2585
        SdkIcon = LIMG_ARCHIVE_MODE
2586
    ElseIf cState = "U" Then
2587
        ' Work in progress - Still being constructed. Cannot be added to a Release yet
2588
        SdkIcon = LIMG_OPEN_MODE
2589
    End If
2590
End Function
2591
'-----------------------------------------------------------------------------------------------------------------
7244 dpurdie 2592
'
2593
'   Helper rountien to create a button that will be wired into JavaScript
2594
'
2595
Sub BuildJsButton (bState, sClass, sTitle, sImage)%>
2596
    <%If bState Then%>
2597
		<span class="<%=sClass%>" title="<%=sTitle%>"><img <%=sImage%>></span>
2598
    <%Else%>
2599
		<span class="abtnItemDis" title="<%=sTitle%>"><img <%=sImage%> class="lessOpacity"></span>
2600
    <%End If%>
2601
<%End Sub
6827 dpurdie 2602
'------------------------------------------------------------------------------
2603
'   Helper routine to create buttons and disabled buttons
2604
'   Treat the action an href - link the user can see and potentially open in another tab
2605
'
2606
Sub BuildActionButtonLink(bState, sText, sTitle, sImage, sRef)
2607
 %>
2608
<td align="center" nowrap valign="bottom" title="<%=sTitle%>">
2609
    <%If bState Then%>
2610
    <a href="<%=sRef%>" class="abtnItem"><img <%=sImage%> ><%=sText%></a>
2611
    <%Else%>
2612
    <span class="abtnItemDis"><img <%=sImage%> class="lessOpacity"><%=sText%></span>
2613
    <%End If%>
2614
</td>
2615
<%End Sub
2616
'------------------------------------------------------------------------------
2617
'   Helper routine to create buttons and disabled buttons
2618
'   Treat the ref as a page to goto, but don't use href
2619
'
2620
Sub BuildActionButton(bState, sText, sTitle, sImage, sRef)
2621
 %>
2622
<td align="center" nowrap valign="bottom" title="<%=sTitle%>">
2623
    <%If bState Then%>
2624
    <span onClick="location.href='<%=sRef%>'" class="pointer abtnItem"><img <%=sImage%> ><%=sText%></span>
2625
    <%Else%>
2626
    <span class="abtnItemDis"><img <%=sImage%> class="lessOpacity"><%=sText%></span>
2627
    <%End If%>
2628
</td>
2629
<%End Sub
2630
'------------------------------------------------------------------------------
2631
'   Helper routine to create buttons and disabled buttons
2632
'   Tack a onClick operation
2633
'
2634
Sub BuildActionButtonClickRaw(bState, sText, sTitle, isBlue, sImage, sClick)
2635
    Dim sStyle : sStyle = ""
2636
    If Left(sImage,4) = "<img" Then sImage = Mid(sImage, 5, Len(sImage)-5)
2637
    If bState Then
2638
    If isBlue Then sStyle = "color:#0000ee; text-decoration:underline"%>
6879 dpurdie 2639
    <span onClick="<%=sClick%>" class="pointer abtnItem" title="<%=sTitle%>" style="<%=sStyle%>"><img <%=sImage%> ><%=sText%></span>
6827 dpurdie 2640
    <%Else%>
2641
    <%If isBlue Then sStyle = "color:#0000ee66; text-decoration:none"%>
2642
    <span class="abtnItemDis" style="<%=sStyle%>"><img <%=sImage%> class="lessOpacity"><%=sText%></span>
2643
    <%End If
2644
End Sub
6615 dpurdie 2645
 
6827 dpurdie 2646
Sub BuildActionButtonClick(bState, sText, sTitle, isBlue, sImage, sClick)%>
2647
<td align="right" nowrap valign="center" title="<%=sTitle%>">
2648
    <%BuildActionButtonClickRaw bState, sText, sTitle, isBlue, sImage, sClick %>
2649
</td>
2650
<%End Sub
2651
 
2652
'------------------------------------------------------------------------------
2653
'   Helper routine to create Text with a button that follows
2654
'   Tack a onClick operation
2655
'
2656
Sub BuildEditButtonRaw(bState, sText, sTitle, isBlue, sImage, sClick)
2657
    Dim sStyle : sStyle = "font-weight:bold;"
2658
    Dim sClass : sClass = ""
2659
    If Left(sImage,4) = "<img" Then sImage = Mid(sImage, 5, Len(sImage)-5)
2660
    If bState Then
2661
    If isBlue Then sClass = "txt_linked" : sStyle = ""%>
7244 dpurdie 2662
    <span onClick="<%=sClick%>" class="<%=sClass%> pointer"  style="<%=sStyle%>" title="<%=sTitle%>"><%=sText%>&nbsp;<img <%=sImage%>></span>
6827 dpurdie 2663
    <%Else%>
2664
    <%If isBlue Then sClass = "txt_linked_dis" : sStyle = ""%>
7244 dpurdie 2665
    <span style="<%=sStyle%>" class="<%=sClass%>" title="<%=sTitle%>"><%=sText%>&nbsp;<img <%=sImage%> class="lessOpacity"></span>
6827 dpurdie 2666
    <%End If
2667
End Sub%>
2668