268 lines
7.3 KiB
Plaintext
268 lines
7.3 KiB
Plaintext
<%@ LANGUAGE = VBScript %>
|
|
<% Option Explicit %>
|
|
<!-- #include file="directives.inc" -->
|
|
|
|
<!--#include file="iicache.str"-->
|
|
<!--#include file="iiaspstr.inc"-->
|
|
|
|
<%
|
|
' Copyright (c) 1998 Microsoft Corporation
|
|
'
|
|
' Module Name:
|
|
' iicache2.asp
|
|
' Abstract:
|
|
' Loads new nodes into the cached tree list.
|
|
' Author:
|
|
' Taylor Weiss (taylorw) 8-Oct-1998
|
|
' Revision History:
|
|
' 8-Oct-1998 taylorw created
|
|
'
|
|
' Query String:
|
|
'
|
|
' sname - ADsPath of the node in the tree being expanded. This may
|
|
' be a site node, in which case is does not contain the
|
|
' immediate parent of the nodes we want to cache.
|
|
'
|
|
' fspath - The file system path of the object. Since the folder may
|
|
' not exist in the metabase, we need this to enumerate
|
|
' physical directories.
|
|
'
|
|
|
|
On Error Resume Next
|
|
|
|
Const MD_PATH_NOT_FOUND = &H80070003
|
|
|
|
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
|
' Global Variables
|
|
'
|
|
Dim strRootADsPath, strRootFsPath
|
|
Dim objRoot, bRootExists
|
|
Dim bIsWeb
|
|
|
|
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
|
' Script setup
|
|
|
|
strRootADsPath = Request.QueryString("sname")
|
|
strRootFsPath = Request.QueryString("fspath")
|
|
|
|
' Get the ads container object that will be the parent of the new nodes.
|
|
set objRoot = GetObject( strRootADsPath )
|
|
if InStr( objRoot.Class, "Server" ) <> 0 then
|
|
strRootADsPath = strRootADsPath & "/ROOT"
|
|
set objRoot = GetObject( strRootADsPath )
|
|
end if
|
|
|
|
if err.Number = MD_PATH_NOT_FOUND then
|
|
bRootExists = False
|
|
err.Clear
|
|
else
|
|
' If we got some other error, or we get errors here then something
|
|
' really odd happened.
|
|
bRootExists = True
|
|
if strRootFsPath = "" then
|
|
strRootFsPath = objRoot.Path
|
|
end if
|
|
end if
|
|
|
|
if InStr( UCase(strRootADsPath), "W3SVC" ) <> 0 then
|
|
bIsWeb = True
|
|
else
|
|
bIsWeb = False
|
|
end if
|
|
|
|
%>
|
|
|
|
<HTML>
|
|
<HEAD>
|
|
</HEAD>
|
|
<BODY>
|
|
|
|
<SCRIPT LANGUAGE="JavaScript">
|
|
|
|
var theList = top.title.nodeList;
|
|
var gVars = top.title.Global;
|
|
|
|
var intNewId = theList.length;
|
|
var intRootId = gVars.selId;
|
|
var intCurrentId = intNewId; // changes as we add items
|
|
|
|
<%
|
|
if err.Number = 0 then
|
|
' Mark the parent item as cached. Note: if we fail farther down stream
|
|
' we won't have any way to recache this node until the user refreshes.
|
|
%>
|
|
theList[intRootId].isCached = true;
|
|
theList[intRootId].open = true;
|
|
<%
|
|
if bRootExists then
|
|
addVirtualChildren()
|
|
end if
|
|
|
|
if bIsWeb then
|
|
addPhysicalChildren()
|
|
end if
|
|
' We are finished adding the new nodes, now we need to reorder the list.
|
|
%>
|
|
// intNewId = The index of the first item we added.
|
|
// intRootId = The index of the parent item
|
|
// intCurrentId = One past the index of the last item
|
|
|
|
// Reset the id's of old list items past the parent item to reflect
|
|
// their new positions once the list is sorted.
|
|
|
|
var intNumNewItems = intCurrentId - intNewId;
|
|
if( intNumNewItems > 0 )
|
|
{
|
|
for( var i = intRootId + 1; i < intNewId; i++ )
|
|
{
|
|
theList[i].id += intNumNewItems;
|
|
if( theList[i].parent > intRootId )
|
|
{
|
|
theList[i].parent += intNumNewItems;
|
|
}
|
|
}
|
|
}
|
|
|
|
theList[0].sortList();
|
|
theList[0].markTerms();
|
|
|
|
top.body.list.location.href="iisrvls.asp";
|
|
top.body.iisstatus.location="iistat.asp";
|
|
<%
|
|
end if
|
|
|
|
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
|
' Helper Functions
|
|
|
|
sub addVirtualChildren()
|
|
On Error Resume Next
|
|
|
|
dim objChildNode, strChildName, bIsApplication
|
|
|
|
for each objChildNode in objRoot
|
|
if InStr(UCase(objChildNode.Class), "VIRTUALDIR") <> 0 then
|
|
%>
|
|
theList[intCurrentId] = theList[intRootId].addNode(
|
|
new top.title.listObj( (intCurrentId - intNewId) + intRootId + 1,
|
|
"<%= sJSLiteral(objChildNode.Name) %>",
|
|
"<%= sJSLiteral(objChildNode.ADsPath) %>",
|
|
"vdir",
|
|
2 // state
|
|
)
|
|
);
|
|
theList[intCurrentId].fspath = "<%= sJSLiteral(objChildNode.Path) %>";
|
|
<%
|
|
if bIsWeb then
|
|
if isApplication(objChildNode) then
|
|
%>
|
|
theList[intCurrentId].icon = top.title.Global.imagedir + "app";
|
|
theList[intCurrentId].isApp = true;
|
|
<%
|
|
end if
|
|
end if
|
|
%>
|
|
intCurrentId++;
|
|
<%
|
|
end if
|
|
next
|
|
end sub
|
|
|
|
function isApplication( objWebNode )
|
|
' On Error Resume Next
|
|
|
|
dim bReturn, strAppRoot, strADsPath
|
|
|
|
bReturn = False
|
|
strAppRoot = UCase(objWebNode.AppRoot)
|
|
if strAppRoot <> "" then
|
|
' The AppRoot is inherited, if there is really an application
|
|
' defined at this node, the paths will point to the same node.
|
|
strADsPath = UCase(objWebNode.ADsPath)
|
|
|
|
strAppRoot = Mid(strAppRoot,Instr(strAppRoot,"W3SVC/")+1)
|
|
strADsPath = Mid(strADsPath,Instr(strADsPath,"W3SVC/")+1)
|
|
|
|
if strADsPath = strAppRoot then
|
|
bReturn = True
|
|
end if
|
|
end if
|
|
isApplication = bReturn
|
|
end function
|
|
|
|
|
|
sub addPhysicalChildren()
|
|
On Error Resume Next 'Needed if GetObject(objChildFolder) fails
|
|
|
|
dim objFileSystem, objChildFolder, objRootFolder, objChildNode
|
|
|
|
set objFileSystem = CreateObject("Scripting.FileSystemObject")
|
|
|
|
if objFileSystem.FolderExists( strRootFsPath ) then
|
|
set objRootFolder = objFileSystem.GetFolder( strRootFsPath )
|
|
|
|
for each objChildFolder in objRootFolder.SubFolders
|
|
'Check for existence of objChildFolder in metabase
|
|
Set objChildNode = GetObject(objRoot.ADsPath & "/" & objChildFolder.Name)
|
|
If err.Number <> 0 Then 'Is not a virtual dir in metabase
|
|
err.Clear
|
|
%>
|
|
theList[intCurrentId] = theList[intRootId].addNode(
|
|
new top.title.listObj( (intCurrentId - intNewId) + intRootId + 1,
|
|
"<%= sJSLiteral(objChildFolder.Name) %>",
|
|
"<%= sJSLiteral(strRootADsPath & "/" & objChildFolder.Name) %>",
|
|
"dir",
|
|
2 // state
|
|
)
|
|
);
|
|
theList[intCurrentId].fspath = "<%= sJSLiteral(objChildFolder.Path) %>";
|
|
intCurrentId++;
|
|
<%
|
|
Else
|
|
If InStr(UCase(objChildNode.Class), "WEBDIR") <> 0 Then 'Is a dir in metabase
|
|
%>
|
|
theList[intCurrentId] = theList[intRootId].addNode(
|
|
new top.title.listObj( (intCurrentId - intNewId) + intRootId + 1,
|
|
"<%= sJSLiteral(objChildFolder.Name) %>",
|
|
"<%= sJSLiteral(strRootADsPath & "/" & objChildFolder.Name) %>",
|
|
"dir",
|
|
2 // state
|
|
)
|
|
);
|
|
theList[intCurrentId].fspath = "<%= sJSLiteral(objChildFolder.Path) %>";
|
|
intCurrentId++;
|
|
<%
|
|
End If
|
|
End If
|
|
next
|
|
end if
|
|
end sub
|
|
|
|
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
|
' Report Errors
|
|
|
|
if err.Number <> 0 then
|
|
%>
|
|
// Dump some debugging information
|
|
alert("<%= L_CNCTERR_TEXT %> (<%= Hex(err.Number) %>): <%= err.Description%>");
|
|
|
|
document.write( "Client Variables for the selected node <P>");
|
|
document.write( "id = " + theList[intRootId].id + "<BR>");
|
|
document.write( "title = " + theList[intRootId].title + "<BR>");
|
|
document.write( "path = " + theList[intRootId].path + "<BR>");
|
|
document.write( "keytype = " + theList[intRootId].keytype + "<BR>");
|
|
document.write( "fspath = " + theList[intRootId].fspath + "<BR>");
|
|
document.write( "stype = " + theList[intRootId].stype + "<BR>");
|
|
|
|
document.write( "Server Variables<P>");
|
|
document.write( "strRootADsPath = " + "<%= strRootADsPath %>" + "<BR>");
|
|
//document.write( "strRootFsPath = " + "<%= strRootFsPath %>" + "<BR>");
|
|
document.write( "objRoot.Name = " + "<%= objRoot.Name %>" + "<BR>");
|
|
document.write( "objRoot.ADsPath = " + "<%= objRoot.ADsPath %>" + "<BR>");
|
|
document.write( "bRootExists = " + "<%= bRootExists %>" + "<BR>");
|
|
<%
|
|
end if
|
|
%>
|
|
</SCRIPT>
|
|
</BODY>
|
|
</HTML>
|