Subversion Repositories DevTools

Rev

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