Subversion Repositories DevTools

Rev

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

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