Rev 1281 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@LANGUAGE="VBSCRIPT"%><%'====================================================='| |'| ADD |'| PACKAGES |'| OR DEPENDENCIES |'=====================================================%><%Option explicit' Good idea to set when using redirectResponse.Expires = 0 ' always load the page, dont store%><!--#include file="common/conf.asp"--><!--#include file="common/globals.asp"--><!--#include file="common/formating.asp"--><!--#include file="common/qstr.asp"--><!--#include file="common/common_subs.asp"--><!--#include file="class/classSortHelper.asp"--><%'------------ ACCESS CONTROL ------------------%><!--#include file="_access_control_login.asp"--><!--#include file="_access_control_general.asp"--><!--#include file="_access_control_project.asp"--><%' Make sure rtag_id is always presentIf Request("pv_id") = "" AND Request("rtag_id") = "" ThenResponse.Redirect("index.asp")End If%><%'------------ Variable Definition -------------Dim parAdd_typeDim parPkg_listDim parBase_view_idDim rsPkgsDim HTML_pkg_listDim parPv_idDim parPkgfind'------------ Constants Declaration -----------'------------ Variable Init -------------------parAdd_type = Request("add_type")parPkg_list = Request("pkg_list")parBase_view_id = Request("base_view_id")parPv_id = Request("pv_id")parPkgfind = Request("pkgfind")Set pkgInfoHash = CreateObject("Scripting.Dictionary")'----------------------------------------------%><%' ---- Action requirements ----If parPkg_list = "" Then Response.Redirect( "form_search_result_pkgs.asp?pv_id="& parPv_id &_"&rtag_id="& parRtag_id &_"&pkgfind="& parPkgfind &_"&add_type="& parAdd_type &_"&errmsg=true" )%><%Function Page_Title ( NNadd_type )If NNadd_type = Cstr(enum_ADD_PACKAGES) ThenPage_Title = "ADD Package"ElseIf NNadd_type = Cstr(enum_ADD_DEPENDENCIES) ThenPage_Title = "ADD Dependency"ElseIf NNadd_type = Cstr(enum_ADD_RUNTIME_DEPENDENCIES) ThenPage_Title = "ADD Runtime Dependency"ElsePage_Title = ""End IfEnd Function' Gets a set of records each one being unique by pkg_id, each row having (pkg_id, pkg_name, and num_of_versions)Function Get_Pkg_Names ( NNpkg_or_pvid_list, NNadd_type )If NNadd_type = Cstr(enum_ADD_DEPENDENCIES) OR NNadd_type = Cstr(enum_ADD_RUNTIME_DEPENDENCIES) Then' When adding dependencies, the NNpkg_or_pvid_list is a list of PV_ID'sGet_Pkg_Names = _" SELECT pkg.PKG_ID, pkg.PKG_NAME, COUNT(pv.PV_ID) AS NUM_OF_VERSIONS "&_" FROM PACKAGE_VERSIONS pv,"&_" PACKAGES pkg"&_" WHERE pv.PV_ID IN ( "& NNpkg_or_pvid_list &" ) "&_" AND pv.PKG_ID (+) = pkg.PKG_ID"&_" GROUP BY pv.PKG_ID, pkg.PKG_ID, pkg.PKG_NAME"Else' When adding packages, the NNpkg_or_pvid_list is a list of PKG_ID'sGet_Pkg_Names = _" SELECT pkg.PKG_ID, pkg.PKG_NAME, COUNT(pv.PV_ID) AS NUM_OF_VERSIONS "&_" FROM PACKAGE_VERSIONS pv,"&_" PACKAGES pkg"&_" WHERE pkg.PKG_ID IN ( "& NNpkg_or_pvid_list &" ) "&_" AND pv.PKG_ID (+) = pkg.PKG_ID"&_" GROUP BY pv.PKG_ID, pkg.PKG_ID, pkg.PKG_NAME"End IfEnd FunctionSub Get_All_Base_Views ( NNnewgroup_id, nPkg_id )Dim rsTemp, Query_StringQuery_String = _" SELECT vi.view_id, vi.view_name, bv.hint "&_" FROM views vi,"&_" ("&_" SELECT DISTINCT rc.BASE_VIEW_ID, '> ' AS hint"&_" FROM release_content rc,"&_" package_versions pv"&_" WHERE rc.pv_id = pv.pv_id"&_" AND pv.pkg_id IN ( "& nPkg_id &" )"&_" ) bv"&_" WHERE UPPER(vi.base_view) = 'Y'"&_" AND bv.BASE_VIEW_ID (+) = vi.VIEW_ID"&_" ORDER BY vi.view_name ASC"Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))If NNnewgroup_id = Cstr( rsTemp.Fields("view_id") ) OR NOT IsNull(rsTemp("hint")) ThenResponse.write "<option value='"& rsTemp("view_id") &"' selected>"& rsTemp("hint") & rsTemp("view_name") &"</option>"ElseResponse.write "<option value='"& rsTemp("view_id") &"'>"& rsTemp("hint") & rsTemp("view_name") &"</option>"End IfrsTemp.MoveNextWEndrsTemp.CloseSet rsTemp = nothingEnd SubSub Get_All_Personal_Views ( NNuser_id )Dim rsTemp, Query_StringIf NNuser_id = "" Then Exit SubQuery_String = _" SELECT vi.view_id, vi.view_name"&_" FROM view_settings vs,"&_" views vi"&_" WHERE vs.view_id = vi.view_id"&_" AND vs.user_id = vi.owner_id "&_" AND vs.user_id = "& NNuser_id &_" AND vi.base_view = 'N'"&_" ORDER BY UPPER(vi.view_name)"Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))Response.write "<option value='"& rsTemp.Fields("view_id") &"'>"& rsTemp.Fields("view_name") &"</option>"rsTemp.MoveNextWEndrsTemp.CloseSet rsTemp = nothingEnd Sub' This function is only called when adding dependencies. It gets all of the items in the specified release' and sets up dictionaries as follows:'' Dict Name key item' ------------------------------------' DDdictPkgId pv_id pkg_id' DDdictPkgName pv_id pkg_name' DDdictPkgVer pv_id pkg_version' DDdictPkgExt pv_id v_ext'Sub Get_Versions_From_Release ( NNpv_id_list, NNrtag_id, DDdictPkgId, DDdictPkgName, DDdictPkgVer, DDdictPkgExt )Dim rsTemp, Query_StringIf NNrtag_id = "" ThenExit SubEnd IfQuery_String = _" SELECT pv.pkg_id, pkgs.pkg_name, pv.pkg_version, pv.pv_id, pv.v_ext"&_" FROM release_content rc,"&_" package_versions pv,"&_" packages pkgs"&_" WHERE rc.pv_id = pv.pv_id"&_" AND pkgs.pkg_id = pv.pkg_id"&_" AND rc.rtag_id = "& NNrtag_id &_" AND pv.pv_id IN ( "& NNpv_id_list &" )"Set rsTemp = OraDatabase.DbCreateDynaset( Query_String, cint(0))While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))DDdictPkgId.ADD Cstr(rsTemp("pv_id")), Cstr(rsTemp("pkg_id"))DDdictPkgName.ADD Cstr(rsTemp("pv_id")), Cstr(rsTemp("pkg_name"))DDdictPkgVer.ADD Cstr(rsTemp("pv_id")), Cstr(rsTemp("pkg_version"))If NOT IsNull(rsTemp("v_ext")) ThenDDdictPkgExt.ADD Cstr(rsTemp("pv_id")), Cstr(rsTemp("v_ext"))ElseDDdictPkgExt.ADD Cstr(rsTemp("pv_id")), Cstr("")End IfrsTemp.MoveNextWEndrsTemp.CloseSet rsTemp = nothingEnd Sub' This function is used when adding packages to a release. The function processes a list of package ID's' and forms the HTML to display for each item, the name, all available full versions in a list boxSub Generate_Package_List ( NNpkg_list, SShtml_pkg_list, NNrtag_id, NNadd_type )Dim rsPkgs, hidePatches, currRsPkg, qparPkg_listDim spanPkgNameIdDim commonHTMLhidePatches = "hidepatches=true&"If pkgInfoHash.Item ("is_patch") = "Y" Then hidePatches = ""Set rsPkgs = OraDatabase.DbCreateDynaset( Get_Pkg_Names( NNpkg_list, NNadd_type ), cint(0))While ((NOT rsPkgs.BOF) AND (NOT rsPkgs.EOF))currRsPkg = chr(34) & rsPkgs("pkg_id") & chr(34)qparPkg_list = chr(34) & parPkg_list & chr(34)' Begin table rowSShtml_pkg_list = SShtml_pkg_list &"<tr> "spanPkgNameId = "spanPkgName" & rsPkgs("pkg_id")' Form package nameSShtml_pkg_list = SShtml_pkg_list &" <td background='images/bg_form_lightgray.gif' nowrap class='form_item'>" _& "<span id='" & spanPkgNameId & "'>"& rsPkgs("pkg_name") &"</span></td>"' setup some common html so that we can make the (full) Version field on the right-most column of the' table row update on certain events taking place in the version base input box, and version extension' drop down list boxcommonHTML = rsPkgs("pkg_id") & "' onblur='updateVersion(" & currRsPkg & ");'" &_" onchange='updateVersion(" & currRsPkg & ");'"SShtml_pkg_list = SShtml_pkg_list & "<td><select class='form_item' id='pkgn" & commonHTML & "name='pkgn" & rsPkgs("pkg_id") & "'>"SShtml_pkg_list = SShtml_pkg_list & populateVersionList( rsPkgs("pkg_id") )SShtml_pkg_list = SShtml_pkg_list & "</select></td>"SShtml_pkg_list = SShtml_pkg_list &"</td>"' End table rowSShtml_pkg_list = SShtml_pkg_list &"</tr>"rsPkgs.MoveNextWEndEnd Sub' This function deals with a PV_ID list, not a PKG_ID list. Hence, it is used for the ADD Dependencies user operation.' The function was initially based on the Generate_Package_List() function, and then stripped back and reworked to use' the result of the Get_Versions_From_Release() function, which now processes PV_ID lists also.' Adding a dependency means taking the latest version in the release, there is no choice about it.Sub Generate_Version_List ( NNpv_id_list, SShtml_pkg_list, NNrtag_id, NNadd_type )Dim spanPkgNameIdDim fullVersionDim i' dictionaries and arraysDim dictPkgId, dictPkgVer, dictPkgExt, dictPkgNameDim pv_ids, pkg_ids, versions, pkg_names' create dictionariesSet dictPkgId = CreateObject("Scripting.Dictionary")Set dictPkgName = CreateObject("Scripting.Dictionary")Set dictPkgVer = CreateObject("Scripting.Dictionary")Set dictPkgExt = CreateObject("Scripting.Dictionary") ' This one assigned, and populated, but currently not used thereafter' populate dictionariesCall Get_Versions_From_Release ( NNpv_id_list, NNrtag_id, dictPkgId, dictPkgName, dictPkgVer, dictPkgExt )' get the columns we need from the dictionariespv_ids = dictPkgId.Keyspkg_names = dictPkgName.Itemspkg_ids = dictPkgId.Itemsversions = dictPkgVer.Items' iterate through all the PV_ID's we found using the Get_Versions_From_Release() functionFor i = 0 to ubound(pv_ids)fullVersion = versions(i)' Begin table rowSShtml_pkg_list = SShtml_pkg_list &"<tr> "' NOTE: the formation of this span name may result in more than one span of the same name in the HTML.' This is because there may be >1 package version of the same package ID (eg sysbasetypes.mas, sysbasetypes.sea)' being added as dependencies. It doesn't seem to matter though. It just reflects the ancestry of this code which' used to be exclusively package ID focused, whereas now, it has a pv_id focus when dealing with dependencies.spanPkgNameId = "spanPkgName" & pkg_names(i)' Form package nameSShtml_pkg_list = SShtml_pkg_list & " <td background='images/bg_form_lightgray.gif' nowrap class='form_item'>" _& " <span id='" & spanPkgNameId & "'>"& pkg_names(i) &"</span></td>"' Form the (full) Version display fieldSShtml_pkg_list = SShtml_pkg_list &" <td background='images/bg_form_lightgray.gif'>"If fullVersion = "" ThenSShtml_pkg_list = SShtml_pkg_list &"<span nowrap class='form_item' name='spanFullVersion" & pkg_ids(i) _& "' id='spanFullVersion" & pkg_ids(i) & "'> unset </span>"ElseSShtml_pkg_list = SShtml_pkg_list &"<span nowrap class='form_item' name='spanFullVersion" & pkg_ids(i) _& "' id='spanFullVersion" & pkg_ids(i) & "'>" & fullVersion & "</span>"End IfSShtml_pkg_list = SShtml_pkg_list & "<input type='hidden' id='pkgn" & pkg_ids(i) _& "' name='pkgn" & pkg_ids(i) & "' ' class='form_item' size='12' value='" & fullVersion & "'> "' End table rowSShtml_pkg_list = SShtml_pkg_list &"</tr>"NextEnd Sub// Create HTML to populate a form selection with versions numbers for a specified// package. This could be done via AJAX but is currently done when the page is// rendered.Function populateVersionList(NNpkg_id)Dim rsFindDim Query_StringDim aVersionsDim objSortHelperDim lastRow, i// First one - Use as a promptpopulateVersionList = "<option>-- Select Version --</option>"Query_String = _" SELECT DISTINCT pv.pkg_version, pv.dlocked "&_" FROM PACKAGES pkg, package_versions pv"&_" WHERE pkg.pkg_id = pv.pkg_id AND pkg.pkg_id = " & NNpkg_idSet rsFind = OraDatabase.DbCreateDynaset( Query_String, cint(0))If rsFind.RecordCount > 0 ThenaVersions = rsFind.GetRows()lastRow = UBound( aVersions, 2 )Set objSortHelper = New SortHelper' Sort versionsCall objSortHelper.VersionSort( aVersions, 0, lastRow, rsFind.FieldIndex("pkg_version") )' Descending orderFor i = lastRow To 0 Step -1Dim prefixDim texttext = aVersions( rsFind.FieldIndex("pkg_version"), i )If aVersions( rsFind.FieldIndex("dlocked"), i ) = "Y" Thenprefix = "R "Elseprefix = " "End IfpopulateVersionList = populateVersionList &_"<option value='"& text &"'>" & prefix & text & "</option>"NextSet objSortHelper = nothingEnd IfrsFind.CloseSet rsFind = nothingEnd Function%><%If parPv_id <> "" ThenCall Get_Pkg_Info ( parPv_id, NULL )End If%><html><head><title>Release Manager</title><meta HTTP-EQUIV="Pragma" CONTENT="no-cache"><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link rel="stylesheet" href="images/release_manager_style.css" type="text/css"><link rel="stylesheet" href="images/navigation.css" type="text/css"><script language="JavaScript" src="images/common.js"></script><script language="JavaScript" type="text/JavaScript"><!--window.onload = function(){checkSeletion(document.getElementById("base_view_id"));var versionObjectIds = getVersionObjectIds();for( var iobj in versionObjectIds ){updateVersion(versionObjectIds[iobj]);}}// getVersionObjectIds is only called when adding packages to a release.function getVersionObjectIds (){var versionObjectIds = new Array(); // Memory leak?<%Dim rsPkgs3, versionObjectIdSet rsPkgs3 = OraDatabase.DbCreateDynaset( Get_Pkg_Names( parPkg_list, parAdd_type ), cint(0))While ((NOT rsPkgs3.BOF) AND (NOT rsPkgs3.EOF))versionObjectId = rsPkgs3("pkg_id")%>versionObjectIds.push( "<%=versionObjectId%>" );<%rsPkgs3.MoveNextWendrsPkgs3.Close()%>return versionObjectIds;}// CheckVersion is only called when adding packages to a release.// Called before the form is submitted. Can validate the form// Simply tests that all required fields have been enteredfunction checkVersion (){var isValid = checkSeletion(document.getElementById("base_view_id"));var versionObjectIds = getVersionObjectIds();for( var iobj in versionObjectIds ){if (updateVersion(versionObjectIds[iobj]))continue;isValid = false;break;}if (isValid) {MM_showProgressBar();}else{// failed - exit function, returning false for the form.document.MM_returnValue = false;MM_hideProgressBar();alert ("Complete all selections");return false;}return true;}// updateVersion is only called when adding packages to a release.function updateVersion( myPkgId, myParPkg_list ){return checkSeletion(document.getElementById("pkgn" + myPkgId));}//--></script><!-- DROPDOWN MENUS --><!--#include file="_menu_def.asp"--><script language="JavaScript1.2" src="images/popup_menu.js"></script><script language="JavaScript" src="images/tipster.js"></script><script language="JavaScript" src="images/_help_tips.js"></script></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0"><!-- MENU LAYERS --------------------------------------><div id="popmenu" class="menuskin" onMouseover="clearhidemenu();highlightmenu(event,'on')" onMouseout="highlightmenu(event,'off');dynamichide(event)"></div><!-- TIPS LAYERS --------------------------------------><div id="formTipsLayer" style="position: absolute; z-index: 1000; visibility: hidden; left:0; top: 0; width: 10"> </div><!-----------------------------------------------------><!-- HEADER --><!--#include file="_header.asp"--><!-- BODY ----><table width="100%" height="80%" border="0" cellpadding="0" cellspacing="0"><tr><td align="center" valign="top" background="images/bg_lght_gray.gif"><!-- MIDDLE ----------------------------------------><table width="650" border="0" cellspacing="0" cellpadding="0"><tr><td><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="1%"></td><td align="right"><img src="images/h_trsp_dot.gif" width="30" height="30"></td><td width="1%"></td></tr><tr><td width="1%"></td><td><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td nowrap class="form_ttl"><%=Page_Title ( parAdd_type )%></td><td align="right" valign="bottom"></td></tr></table></td><td width="1%"></td></tr><tr><td align="left" valign="top" width="1%" background="images/lbox_bg_blue.gif"><img src="images/lbox_tl_cnr_b.gif" width="13" height="13"></td><td background="images/lbox_bg_blue.gif" align="right"><!-- Heading --><img src="images/h_trsp_dot.gif" width="1" height="20"><!-- END Heading --></td><td align="right" valign="top" width="1%" background="images/lbox_bg_blue.gif"><img src="images/lbox_tr_cnr_b.gif" width="13" height="13"></td></tr><tr><td width="1%" bgcolor="#FFFFFF"><img src="images/h_trsp_dot.gif" width="10" height="100"></td><td bgcolor="#FFFFFF" valign="top"><!-- Body --><table width="100%" border="0" cellspacing="1" cellpadding="2"><% 'Use the parPkg_list in two different ways. When adding dependencies, the list contains pv_id's.'When adding packages it contains pkg_id's. Different functions deal with each situation.If ( (parAdd_type <> Cstr(enum_ADD_DEPENDENCIES)) AND (parAdd_type <> Cstr(enum_ADD_RUNTIME_DEPENDENCIES)) ) ThenCall Generate_Package_List( parPkg_list, HTML_pkg_list, parRtag_id, parAdd_type )ElseCall Generate_Version_List( parPkg_list, HTML_pkg_list, parRtag_id, parAdd_type )End If%><%If parAdd_type = Cstr(enum_ADD_PACKAGES) Then%><form name="addpkg" id="addpkg" method="post" action="_add_pkgs_to_release.asp" onSubmit="return checkVersion();"><%'----------- Base View --------------%><tr><td width="1%" nowrap class="form_group" valign="bottom"></td><td nowrap width="100%" align="right" class="form_step"> </td></tr><tr><td colspan="2" width="1%" nowrap class="form_field" background="images/bg_form_lightbluedark.gif">To Base View</td></tr><tr><td colspan="2" width="1%" nowrap background="images/bg_form_lightgray.gif"><select name="base_view_id" id="base_view_id" class="form_item" onblur="checkSeletion(this);" onchange="checkSeletion(this);"><option></option><%Call Get_All_Base_Views( parBase_view_id, parPkg_list )%></select><br><span class="rep_small">NOTE: Symbol '>' in Base Views drop-down list is a suggestion where to place selected package(s).</span></td></tr><tr><td width="1%" nowrap class="form_group" valign="bottom"></td><td nowrap width="100%" align="right" class="form_step"><br></td></tr><%'----------- Private View --------------%><%If QStrPar("Pview") <> "disable" Then%><tr><td colspan="2" width="1%" nowrap class="form_field" background="images/bg_form_lightbluedark.gif">To Personal View</td></tr><tr><td colspan="2" width="1%" nowrap background="images/bg_form_lightgray.gif"><select name="personal_view_id" class="form_item"><option value="">None</option><%Call Get_All_Personal_Views( objAccessControl.UserId )%></select></td></tr><tr><td width="1%" nowrap class="form_group" valign="bottom"></td><td nowrap width="100%" align="right" class="form_step"><br></td></tr><%End If%><%'---------------------------------------%><%Else%><%If parAdd_type = Cstr(enum_ADD_RUNTIME_DEPENDENCIES) Then%><form name="addpkg" method="post" action="_add_runtime_dependencies.asp" onSubmit="return true"><%Else%><form name="addpkg" method="post" action="_update_dependencies.asp" onSubmit="return true"><%End If%><tr><td colspan="2" width="1%" nowrap class="form_field"><%=pkgInfoHash.Item ("pkg_name")%> <%=pkgInfoHash.Item ("pkg_version")%></td></tr><%End If%><tr><td colspan="2" width="1%" nowrap class="form_field"><table width="100%" border="0" cellspacing="1" cellpadding="2"><tr><td background="images/bg_form_lightbluedark.gif" nowrap width="10%" class="form_field">Package Name<img src="images/h_trsp_dot.gif" width="1" height="20" align="absmiddle"></td><td background="images/bg_form_lightbluedark.gif" nowrap width="40%" class="form_field">Version<%If parAdd_type <> Cstr(enum_ADD_DEPENDENCIES) AND parAdd_type <> Cstr(enum_ADD_RUNTIME_DEPENDENCIES) Then%><a onmouseout="formTips.hide()" onmouseover="formTips.show('existingVersion')" href="javascript:;"><img width="12" hspace="2" height="12" border="0" align="absmiddle" src="images/i_help.gif" /></a><%End If%></td></tr><%=HTML_pkg_list%><tr><td nowrap><img src="images/h_trsp_dot.gif" width="120" height="1"></td><td></td></tr></table></td></tr><tr><td colspan="2" nowrap class="form_field"><input type="reset" name="btn" value="« Back" class="form_btn" onClick="history.back();"><input type="reset" name="btn" value="Cancel" class="form_btn" onClick="history.go(-3);"><input type="submit" name="btn" value=" Add " class="form_btn"><SPAN id="ProgressBar" name="ProgressBar" style="visibility:hidden;" class="body_scol"><img src="images/i_processing.gif" width="11" height="17" align="absmiddle" hspace="3">Processing...</SPAN><br> <br></td></tr><input type="hidden" name="update_type" value="add_custom"><input type="hidden" name="pv_id" value="<%=parPv_id%>"><input type="hidden" name="rtag_id" value="<%=parRtag_id%>"><input type="hidden" name="pkg_list" value="<%=parPkg_list%>"></form></table><!-- END Body--></td><td width="1%" background="images/lbox_bgside_white.gif"> </td></tr><tr><td width="1%" background="images/lbox_bg_blue.gif" valign="bottom"><img src="images/lbox_bl_cnr_b.gif" width="13" height="13"></td><td background="images/lbox_bg_blue.gif"></td><td width="1%" background="images/lbox_bg_blue.gif" valign="bottom" align="right"><img src="images/lbox_br_cnr_b.gif" width="13" height="13"></td></tr></table></td></tr></table><!--------------------------------------------------></td></tr><tr><td valign="bottom" background="images/bg_lght_gray.gif"><!-- FOOTER --><!--#include file="_footer.asp"--></td></tr></table></body></html><%Call Destroy_All_Objects%>