Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

638 lines
17 KiB

<%@ Language=VBScript %>
<% Option Explicit %>
<%
'-------------------------------------------------------------------------
' POP3 Mail Add-in - Mailboxes
' Copyright (C) Microsoft Corporation. All rights reserved.
'-------------------------------------------------------------------------
%>
<!-- #include virtual="/admin/inc_framework.asp" -->
<!-- #include virtual="/admin/ots_main.asp" -->
<!-- #include file="p3cminc.asp" -->
<%
'-------------------------------------------------------------------------
' Global Constants
'-------------------------------------------------------------------------
Dim SOURCE_FILE
SOURCE_FILE = SA_GetScriptFileName()
Const ROWS_PER_PAGE = 100
Const COL_LOCK_ID = 3
'-------------------------------------------------------------------------
' Global Variables
'-------------------------------------------------------------------------
' Sorting variables
Dim g_iSortCol
Dim g_sSortSequence
' Searching variables
Dim g_bSearchChanged
Dim g_iSearchCol
Dim g_sSearchColValue
g_sSearchColValue = ""
' Paging variables
Dim g_bPagingInitialized
Dim g_sPageAction
Dim g_iPageMin
Dim g_iPageMax
Dim g_iPageCurrent
' Other variables
Dim g_page
Dim g_strDomainName
g_strDomainName = GetDomainName()
'----------------------------------------------------------------------
' Global Localized Strings
'----------------------------------------------------------------------
Dim l_strPageTitle
l_strPageTitle = GetLocString(RES_DLL_NAME, _
POP3_PAGETITLE_MAILBOXES, _
Array(g_strDomainName))
Dim l_strTableCaption
l_strTableCaption = GetLocString(RES_DLL_NAME, _
POP3_TABLECAPTION_MAILBOXES, _
"")
Dim l_strTasks
l_strTasks = GetLocString(RES_DLL_NAME, _
POP3_TASKS, _
"")
' Tasks
Dim l_strTaskNew
l_strTaskNew = GetLocString(RES_DLL_NAME, _
POP3_TASK_MAILBOXES_NEW, _
"")
Dim l_strTaskNewCaption
l_strTaskNewCaption = GetLocString(RES_DLL_NAME, _
POP3_TASKCAPTION_MAILBOXES_NEW, _
"")
Dim l_strTaskDelete
l_strTaskDelete = GetLocString(RES_DLL_NAME, _
POP3_TASK_MAILBOXES_DELETE, _
"")
Dim l_strTaskDeleteCaption
l_strTaskDeleteCaption = GetLocString(RES_DLL_NAME, _
POP3_TASKCAPTION_MAILBOXES_DELETE, _
"")
Dim l_strTaskLock
l_strTaskLock = GetLocString(RES_DLL_NAME, _
POP3_TASK_MAILBOXES_LOCK, _
"")
Dim l_strTaskLockCaption
l_strTaskLockCaption = GetLocString(RES_DLL_NAME, _
POP3_TASKCAPTION_MAILBOXES_LOCK, _
"")
Dim l_strTaskUnlock
l_strTaskUnlock = GetLocString(RES_DLL_NAME, _
POP3_TASK_MAILBOXES_UNLOCK, _
"")
Dim l_strTaskUnlockCaption
l_strTaskUnlockCaption = GetLocString(RES_DLL_NAME, _
POP3_TASKCAPTION_MAILBOXES_UNLOCK, _
"")
' Column headers
Dim l_strColName
l_strColName = GetLocString(RES_DLL_NAME, _
POP3_COL_MAILBOX_NAME, _
"")
Dim l_strColSize
l_strColSize = GetLocString(RES_DLL_NAME, _
POP3_COL_MAILBOX_SIZE, _
"")
Dim l_strColMessages
l_strColMessages = GetLocString(RES_DLL_NAME, _
POP3_COL_MAILBOX_MESSAGES, _
"")
Dim l_strColLocked
l_strColLocked = GetLocString(RES_DLL_NAME, _
POP3_COL_MAILBOX_LOCKED, _
"")
Dim l_strLockedYes
l_strLockedYes = GetLocString(RES_DLL_NAME, _
POP3_MAILBOX_LOCKED_YES, _
"")
Dim l_strLockedNo
l_strLockedNo = GetLocString(RES_DLL_NAME, _
POP3_MAILBOX_LOCKED_NO, _
"")
Dim l_strUnitMB
l_strUnitMB = GetLocString(RES_DLL_NAME, _
POP3_FACTOR_MB, _
"")
Dim l_strUnitKB
l_strUnitKB = GetLocString(RES_DLL_NAME, _
POP3_FACTOR_KB, _
"")
'**********************************************************************
'* E N T R Y P O I N T
'**********************************************************************
Call SA_CreatePage(l_strPageTitle, "", PT_AREA, g_page)
Call SA_ShowPage (g_page)
'**********************************************************************
'* H E L P E R S U B R O U T I N E S
'**********************************************************************
'----------------------------------------------------------------------
' CreateTasks
'----------------------------------------------------------------------
Sub CreateTasks( _
ByRef table _
)
Call OTS_SetTableTasksTitle(table, l_strTasks)
'
' New
Dim strNewURL
strNewURL = "mail/p3mbnew.asp"
Call SA_MungeURL(strNewURL, "tab1", GetTab1())
Call SA_MungeURL(strNewURL, "tab2", GetTab2())
Call SA_MungeURL(strNewURL, PARAM_DOMAINNAME, g_strDomainName)
Call OTS_AddTableTask(table, OTS_CreateTaskEx(l_strTaskNew, _
l_strTaskNewCaption, _
strNewURL,_
OTS_PT_PROPERTY,_
"OTS_TaskAlways"))
'
' Delete
Dim strDeleteURL
strDeleteURL = "mail/p3mbdel.asp"
Call SA_MungeURL(strDeleteURL, "tab1", GetTab1())
Call SA_MungeURL(strDeleteURL, "tab2", GetTab2())
Call SA_MungeURL(strDeleteURL, PARAM_DOMAINNAME, g_strDomainName)
Call OTS_AddTableTask(table, OTS_CreateTaskEx(l_strTaskDelete, _
l_strTaskDeleteCaption, _
strDeleteURL,_
OTS_PT_PROPERTY,_
"OTS_TaskAny"))
'
' Lock
Dim strLockURL
strLockURL = "mail/p3mblock.asp"
Call SA_MungeURL(strLockURL, "tab1", GetTab1())
Call SA_MungeURL(strLockURL, "tab2", GetTab2())
Call SA_MungeURL(strLockURL, PARAM_DOMAINNAME, g_strDomainName)
Call SA_MungeURL(strLockURL, PARAM_LOCKFLAG, LOCKFLAG_LOCK)
Call OTS_AddTableTask(table, OTS_CreateTaskEx(l_strTaskLock, _
l_strTaskLockCaption, _
strLockURL,_
OTS_PT_PROPERTY,_
"SomeMailboxesAreUnlocked"))
'
' Unlock
Dim strUnlockURL
strUnlockURL = "mail/p3mblock.asp"
Call SA_MungeURL(strUnlockURL, "tab1", GetTab1())
Call SA_MungeURL(strUnlockURL, "tab2", GetTab2())
Call SA_MungeURL(strUnlockURL, PARAM_DOMAINNAME, g_strDomainName)
Call SA_MungeURL(strUnlockURL, PARAM_LOCKFLAG, LOCKFLAG_UNLOCK)
Call OTS_AddTableTask(table, OTS_CreateTaskEx(l_strTaskUnlock, _
l_strTaskUnlockCaption, _
strUnlockURL,_
OTS_PT_PROPERTY,_
"SomeMailboxesAreLocked"))
End Sub
'---------------------------------------------------------------------
' CreateColumns
'---------------------------------------------------------------------
Sub CreateColumns( _
ByRef table _
)
Dim colFlags
'
' Add the columns
'
colFlags = (OTS_COL_SEARCH OR OTS_COL_SORT OR OTS_COL_KEY)
Call OTS_AddTableColumn(table, OTS_CreateColumnEx(l_strColName, "left", colFlags, 0))
colFlags = (OTS_COL_SORT)
Call OTS_AddTableColumn(table, OTS_CreateColumnEx(l_strColSize, "left nowrap", colFlags, 0))
Call OTS_AddTableColumn(table, OTS_CreateColumnEx(l_strColMessages, "left nowrap", colFlags, 0))
colFlags = (OTS_COL_SEARCH OR OTS_COL_SORT)
Call OTS_AddTableColumn(table, OTS_CreateColumnEx(l_strColLocked, "left nowrap", colFlags, 0))
colFlags = (OTS_COL_HIDDEN)
Call OTS_AddTableColumn(table, OTS_CreateColumnEx("colRawSize", "", colFlags, 0))
Call OTS_AddTableColumn(table, OTS_CreateColumnEx("colRawMessages", "", colFlags, 0))
End Sub
'---------------------------------------------------------------------
' FillTable
'---------------------------------------------------------------------
Sub FillTable( _
ByRef table _
)
On Error Resume Next
Err.Clear()
'
' Setup the paging variables
Dim nApplicableRows ' Number of rows we've seen so far that
' meet the search criteria.
nApplicableRows = 0
Dim nRowsAdded ' Number of applicable rows that have
' actually been added to the table.
nRowsAdded = 0
Dim iLowerLimit ' Exclusive
iLowerLimit = ( g_iPageCurrent - 1 ) * ROWS_PER_PAGE
'
' Get the POP3 Config object
Dim oConfig
Set oConfig = Server.CreateObject("P3Admin.P3Config")
Dim oDomain
Set oDomain = oConfig.Domains.Item(g_strDomainName)
If Err.Number <> 0 Then
Call SA_SetErrMsg( HandleUnexpectedError() )
Call OTS_EnablePaging(table, false)
Exit Sub
End If
'
' Add the mailboxes to the table.
Dim oMailbox
Dim row
For Each oMailbox In oDomain.Users
'
' Construct the row
row = ConstructRow(oMailbox)
'
' Verify the row meets the search and paging criteria and add it to
' the table.
If (RowMeetsSearchCriteria(row)) Then
nApplicableRows = nApplicableRows + 1
If ( nApplicableRows > iLowerLimit And _
nRowsAdded < ROWS_PER_PAGE ) Then
nRowsAdded = nRowsAdded + 1
Call OTS_AddTableRow(table, row)
End If ' If: The row is on the current page.
End If ' If: The row meets the search criteria.
Next
'
' Configure paging if necessary
If (nApplicableRows > ROWS_PER_PAGE) Then
Call OTS_EnablePaging(table, true)
If (Not g_bPagingInitialized) Then
g_iPageMin = 1
g_iPageMax = Int(nApplicableRows / ROWS_PER_PAGE)
If ((nApplicableRows MOD ROWS_PER_PAGE) > 0) Then
g_iPageMax = g_iPageMax + 1
End If
g_iPageCurrent = 1
Call OTS_SetPagingRange(table, _
g_iPageMin, _
g_iPageMax, _
g_iPageCurrent)
End If
End If
End Sub
'---------------------------------------------------------------------
' RowMeetsSearchCriteria
'---------------------------------------------------------------------
Function RowMeetsSearchCriteria( _
row _
)
If ( g_sSearchColValue = "" ) Then
RowMeetsSearchCriteria = true
Else
Dim posMatch
posMatch = InStr(1, row(g_iSearchCol), g_sSearchColValue, 1)
If ( IsNull(posMatch) Or posMatch = 0 ) Then
RowMeetsSearchCriteria = false
Else
RowMeetsSearchCriteria = true
End If
End If
End Function
'---------------------------------------------------------------------
' ConstructRow
'---------------------------------------------------------------------
Function ConstructRow( _
oMailbox _
)
Dim strLock
If (oMailbox.Lock) Then
strLock = l_strLockedYes
Else
strLock = l_strLockedNo
End If
Dim nBytes
Dim nFactor
oMailbox.GetMessageDiskUsage nBytes, nFactor
Dim nSize
Dim strUnit
nSize = CalculateDiskUsage(nBytes, nFactor, false)
if ( nSize < 1 ) Then
nSize = CalculateDiskUsage(nBytes, nFactor, true) ' Calculate to KB instead of MB
strUnit = l_strUnitKB
Else
strUnit = l_strUnitMB
End If
ConstructRow = Array(oMailbox.Name, _
FormatNumber(nSize, 0) & strUnit, _
FormatNumber(oMailbox.MessageCount, 0), _
strLock, _
GetSortableNumber(nSize), _
GetSortableNumber(oMailbox.MessageCount))
End Function
'---------------------------------------------------------------------
' ServeClientTableData
'---------------------------------------------------------------------
Function ServeClientTableData(rgRows)
'
' Get the POP3 Config object
Dim oConfig
Set oConfig = Server.CreateObject("P3Admin.P3Config")
Dim oDomain
Set oDomain = oConfig.Domains.Item(g_strDomainName)
'
' Output the beginning of the client script block that will contain
' the array to track which items can be deleted.
Response.Write("<SCRIPT LANGUAGE=""Javascript"">" & vbCrLf)
Response.Write("var g_rgMailboxLocked = new Array();" & vbCrLf)
If ( oDomain.Lock ) Then
Response.Write("var g_bIsDomainLocked = true ;" & vbCrLf)
Else
Response.Write("var g_bIsDomainLocked = false ;" & vbCrLf)
End If
Dim nRows
nRows = UBound(rgRows)
Dim iRow
For iRow = 0 To nRows - 1
If (l_strLockedYes = rgRows(iRow)(COL_LOCK_ID)) Then
Response.Write("g_rgMailboxLocked[" & iRow & "] = true;" & vbCrLf)
Else
Response.Write("g_rgMailboxLocked[" & iRow & "] = false;" & vbCrLf)
End If
Next
'
' Close the client script block.
Response.Write("</SCRIPT>" & vbCrLf)
End Function
'**********************************************************************
'* E V E N T H A N D L E R S
'**********************************************************************
'----------------------------------------------------------------------
' OnInitPage
'----------------------------------------------------------------------
Public Function OnInitPage( _
ByRef PageIn, _
ByRef EventArg _
)
' Initially, sort by name
g_iSortCol = 0
g_sSortSequence = "A"
g_bPagingInitialized = FALSE
g_iPageCurrent = 1
OnInitPage = TRUE
End Function
'----------------------------------------------------------------------
' OnServeAreaPage
'----------------------------------------------------------------------
Public Function OnServeAreaPage( _
ByRef PageIn, _
ByRef EventArg _
)
Session("PKey_Count") = 0
Session(SESSION_POP3DOMAINNAME) = g_strDomainName
Dim table
table = OTS_CreateTable("", l_strTableCaption)
Call OTS_SetTableMultiSelection(table, true)
'
' If the search criteria changed then we need to recompute the
' paging range
If ( TRUE = g_bSearchChanged ) Then
g_bPagingInitialized = FALSE
g_iPageCurrent = 1
End If
Call CreateColumns (table)
Call CreateTasks (table)
Call FillTable (table)
Call OTS_SortTable (table, g_iSortCol, g_sSortSequence, SA_RESERVED)
Call OTS_ServeTable(table)
Dim rgRows
Call OTS_GetTableRows(table, rgRows)
If (IsArray(rgRows)) Then
Call ServeClientTableData(rgRows)
End If
Call ServeClientTaskFunctions()
OnServeAreaPage = TRUE
End Function
'----------------------------------------------------------------------
' OnSortNotify()
'----------------------------------------------------------------------
Public Function OnSortNotify( _
ByRef PageIn, _
ByRef EventArg, _
ByVal sortCol, _
ByVal sortSeq _
)
g_iSortCol = sortCol
g_sSortSequence = sortSeq
If (g_iSortCol = 1) Then
g_iSortCol = 4
ElseIf (g_iSortCol = 2) Then
g_iSortCol = 5
End If
OnSortNotify = TRUE
End Function
'----------------------------------------------------------------------
' OnSearchNotify()
'----------------------------------------------------------------------
Public Function OnSearchNotify( _
ByRef PageIn, _
ByRef EventArg, _
ByRef sItem, _
ByRef sValue _
)
OnSearchNotify = TRUE
If SA_IsChangeEvent(EventArg) Then
g_bSearchChanged = TRUE
ElseIf SA_IsPostBackEvent(EventArg) Then
g_bSearchChanged = FALSE
End If
g_iSearchCol = Int(sItem)
g_sSearchColValue = CStr(sValue)
End Function
'----------------------------------------------------------------------
' OnPagingNotify()
'----------------------------------------------------------------------
Public Function OnPagingNotify( _
ByRef PageIn, _
ByRef EventArg, _
ByVal sPageAction, _
ByVal iPageMin, _
ByVal iPageMax, _
ByVal iPageCurrent _
)
OnPagingNotify = TRUE
g_bPagingInitialized = true
g_iPageMin = iPageMin
g_iPageMax = iPageMax
g_iPageCurrent = iPageCurrent
End Function
'----------------------------------------------------------------------
' ServeClientTaskFunctions()
'----------------------------------------------------------------------
Public Sub ServeClientTaskFunctions()
%>
<SCRIPT LANGUAGE="Javascript">
var g_bSomeMailboxesAreLocked = false;
function SomeMailboxesAreLocked(sMessage, iTaskNo, iItemNo)
{
var rc = true;
if(sMessage.toLowerCase() == OTS_MESSAGE_BEGIN)
{
g_bSomeMailboxesAreLocked = false;
}
else if(sMessage.toLowerCase() == OTS_MESSAGE_ITEM)
{
//
// See if this domain is locked.
//
if ( g_rgMailboxLocked[iItemNo] )
{
g_bSomeMailboxesAreLocked = true;
// No need to continue, because we have at least one locked domain.
rc = false;
}
}
else if(sMessage.toLowerCase() == OTS_MESSAGE_END)
{
if(g_bSomeMailboxesAreLocked)
{
OTS_SetTaskEnabled(iTaskNo, true);
}
else
{
OTS_SetTaskEnabled(iTaskNo, false);
}
if ( g_bIsDomainLocked ) // If the domain is locked, don't allow mailboxes to be unlocked.
{
OTS_SetTaskEnabled ( iTaskNo, false ) ;
}
}
return rc;
}
var g_bSomeMailboxesAreUnlocked = false;
function SomeMailboxesAreUnlocked(sMessage, iTaskNo, iItemNo)
{
var rc = true;
if(sMessage.toLowerCase() == OTS_MESSAGE_BEGIN)
{
g_bSomeMailboxesAreUnlocked = false;
}
else if(sMessage.toLowerCase() == OTS_MESSAGE_ITEM)
{
//
// See if this domain is locked.
//
if(!g_rgMailboxLocked[iItemNo])
{
g_bSomeMailboxesAreUnlocked = true;
// No need to continue, because we have at least one unlocked domain.
rc = false;
}
}
else if(sMessage.toLowerCase() == OTS_MESSAGE_END)
{
if(g_bSomeMailboxesAreUnlocked)
{
OTS_SetTaskEnabled(iTaskNo, true);
}
else
{
OTS_SetTaskEnabled(iTaskNo, false);
}
}
return rc;
}
</SCRIPT>
<%
End Sub
%>