%@ Language=VBScript %>
<% Option Explicit %>
<%
'-------------------------------------------------------------------------
' quota_delete.asp: delete a selected quota entry
'
' Copyright (c) Microsoft Corporation. All rights reserved.
'
' Date Description
' 17-Jan-01 Creation date
' 15-Mar-01 Ported to 2.0
'-------------------------------------------------------------------------
%>
<%
'-------------------------------------------------------------------------
' Global Variables
'-------------------------------------------------------------------------
Dim SOURCE_FILE ' the source file name used while Tracing
SOURCE_FILE = SA_GetScriptFileName()
Const QUOTAUSER_TOKEN = "*" ' localization not required
Const QUOTAUSER_DELETED = 0 ' return value of function if success
Const QUOTAUSER_NOT_DELETED = 1 ' return value if quota entry not deleted
Const QUOTAUSER_NOT_FOUND = 2 ' return value if quota entry not found
Dim L_TOTAL_ERROR_ERRORMESSAGE ' this error message is formed dynamically
Dim L_MULTIPLE_DELETE_TEXT
Dim L_SINGLE_DELETE_TEXT
'-------------------------------------------------------------------------
' Global Form Variables
'-------------------------------------------------------------------------
Dim F_strVolName ' volume the quota is on
Dim F_strUserList ' the concatenated list of users
'======================================================
' Entry point
'======================================================
Dim page
Dim aPageTitle(2)
aPageTitle(0) = L_BROWSERCAPTION_QUOTADELETE_TEXT
aPageTitle(1) = L_PAGETITLE_QUOTADELETE_TEXT
'
' Create a Property Page
Call SA_CreatePage( aPageTitle, "", PT_PROPERTY, page )
'
' Serve the page
Call SA_ShowPage( page )
'======================================================
' Web Framework Event Handlers
'======================================================
'---------------------------------------------------------------------
' Function name: OnInitPage
' Description: Called to signal first time processing for this page
' Input Variables: Out: PageIn
' Out: EventArg
' Output Variables: None
' Return Values: TRUE to indicate initialization was successful.
' FALSE to indicate errors. Returning FALSE will
' cause the page to be abandoned.
' Global Variables: Out: F_strVolName - volume on which quota user is set
'
' Used to do first time initialization tasks.
'---------------------------------------------------------------------
Public Function OnInitPage(ByRef PageIn, ByRef EventArg)
Call SA_TraceOut(SOURCE_FILE, "OnInitPage")
Dim iCount ' to get the list of users selected
Dim sValue ' to get the OTS selected values
Dim i ' to loop
' initialize the list to empty
F_strUserList = ""
' get the count of users selected
iCount = OTS_GetTableSelectionCount("QuotaUsers")
For i = 1 to iCount
' get the list of users selected
Call OTS_GetTableSelection("QuotaUsers", i, sValue )
' concatenate with the token
F_strUserList = F_strUserList & sValue & QUOTAUSER_TOKEN
Next
' If list empty, form is submitted, get from hidden variable
If F_strUserList = "" Then
F_strUserList = Request.Form("userList")
End If
F_strUserList = UnescapeChars(F_strUserList)
sValue = ""
' get the volume name from the parent OTS
Call OTS_GetTableSelection("", 1, sValue )
F_strVolName = sValue
' check if user and volume info is obtained
If ((Len(Trim(F_strUserList)) = 0) OR (Len(Trim(F_strVolName)) = 0)) Then
' both user name and volume information are required to proceed
OnInitPage = FALSE
Exit Function
End If
OnInitPage = TRUE
End Function
'---------------------------------------------------------------------
' Function name: OnServePropertyPage
' Description: Called when the page needs to be served
' Input Variables: Out: PageIn
' Out: EventArg
' Output Variables: None
' Return Values: TRUE to indicate no problems occured. FALSE to
' indicate errors. Returning FALSE will cause the
' page to be abandoned.
' Global Variables: In: F_strVolname - the volume user quota is on
' In: L_(*) - localized display strings
'
' The UI is served here.
'---------------------------------------------------------------------
Public Function OnServePropertyPage(ByRef PageIn, ByRef EventArg)
Call SA_TraceOut(SOURCE_FILE, "OnServePropertyPage")
'
' Emit Javascript functions required by Web Framework
Call ServeCommonJavaScript()
Dim arrUsersToDelete ' array of users to be deleted
Dim i ' to loop
Dim strVolumeLabel ' volume label to be displayed in the message
' split the concatenated list into an array
arrUsersToDelete = Split(F_strUserList,QUOTAUSER_TOKEN)
%>
<%
' get the volume label
strVolumeLabel = getVolumeLabelForDrive(F_strVolname)
' append the volume name to the message
Dim arrVarReplacementStringsMultiple(2)
arrVarReplacementStringsMultiple(0) = strVolumeLabel
arrVarReplacementStringsMultiple(1) = F_strVolname
L_MULTIPLE_DELETE_TEXT = SA_GetLocString("diskmsg.dll", "403E0080", arrVarReplacementStringsMultiple)
' append the user name and volume name to the message
Dim arrVarReplacementStringsSingle(3)
arrVarReplacementStringsSingle(0) = arrUsersToDelete(0)
arrVarReplacementStringsSingle(1) = strVolumeLabel
arrVarReplacementStringsSingle(2) = F_strVolname
L_SINGLE_DELETE_TEXT = SA_GetLocString("diskmsg.dll", "403E0081", arrVarReplacementStringsSingle)
If ((isArray(arrUsersToDelete)) AND (UBound(arrUsersToDelete)-1) >= 1) Then
' multiple user entries are specified
Response.Write L_MULTIPLE_DELETE_TEXT
Else
' single user deletion specified
Response.Write L_SINGLE_DELETE_TEXT
End If
%>
<%
If ((isArray(arrUsersToDelete)) AND (UBound(arrUsersToDelete)-1) >= 1) Then
' multiple users specified
For i = 0 To (UBound(arrUsersToDelete)-1)
Response.Write arrUsersToDelete(i) & " "
Next
Response.Write " "
Response.Write L_MULTIPLE_DELETECONFIRM_TEXT
Else
' single user entry specified
Response.Write " "
Response.Write L_SINGLE_DELETECONFIRM_TEXT
End If
%>
<%
OnServePropertyPage = TRUE
End Function
'---------------------------------------------------------------------
' Function name: OnPostBackPage
' Description: Called to signal that the page has been posted-back
' Input Variables: Out: PageIn
' Out: EventArg
' Output Variables: None
' Return Values: TRUE to indicate success. FALSE to indicate errors.
' Returning FALSE will cause the page to be abandoned.
' Global Variables: Out: F_strVolName - the volume user quota is on
' Collect the form data vales.
'---------------------------------------------------------------------
Public Function OnPostBackPage(ByRef PageIn, ByRef EventArg)
Call SA_TraceOut(SOURCE_FILE, "OnPostBackPage")
F_strVolName = Request.Form("volume")
F_strUserList = Request.Form("userList")
F_strUserList = UnescapeChars(F_strUserList)
OnPostBackPage = TRUE
End Function
'---------------------------------------------------------------------
' Function name: OnSubmitPage
' Description: To process the submit request
' Input Variables: Out: PageIn
' Out: EventArg
' Output Variables: None
' Return Values: TRUE if the submit was successful, FALSE to indicate error(s).
' Returning FALSE will cause the page to be served again using
' a call to OnServePropertyPage.
' Returning FALSE will display error message.
' Global Variables: None
' Functions Called: deleteAllGivenUserQuota
'
' Delete quota entry for the given user
'---------------------------------------------------------------------
Public Function OnSubmitPage(ByRef PageIn, ByRef EventArg)
Call SA_TraceOut(SOURCE_FILE, "OnSubmitPage")
' call function to delete the user quota
OnSubmitPage = deleteAllGivenUserQuota() ' True/False
End Function
'---------------------------------------------------------------------
' Function name: OnClosePage
' Description: to perform clean-up processing
' Input Variables: Out: PageIn
' Out: EventArg
' Output Variables: None
' Return Values: TRUE to allow close, FALSE to prevent close. Returning FALSE
' will result in a call to OnServePropertyPage.
' Global Variables: None
'
' Called when the page is about to be closed.
'---------------------------------------------------------------------
Public Function OnClosePage(ByRef PageIn, ByRef EventArg)
Call SA_TraceOut(SOURCE_FILE, "OnClosePage")
' no processing required here. Return True
OnClosePage = TRUE
End Function
'======================================================
' Private Functions
'======================================================
'---------------------------------------------------------------------
' Function name: ServeCommonJavaScript
' Description: Serve JavaScript that is required for this page type
' Input Variables: None
' Output Variables: None
' Return Values: None
' Global Variables: L_(*) - Error messages displayed on the client side
'
' This contains the Client-Side script required for the page.
'---------------------------------------------------------------------
Function ServeCommonJavaScript()
%>
<%
End Function
'---------------------------------------------------------------------
' Function name: deleteAllGivenUserQuota
' Description: to delete the given quota entries
' Input Variables: None
' Output Variables: None
' Returns: True - if quota entries are deleted sucessfully
' False - if error(s) occur in deletion
' Global Variables: In: F_strVolName - volume on which quota is set
' In: F_strUserList - the concatenated list of user list
' In: L_(*) - localization content
'
' Failure page is displayed if ANY of the entries could not be deleted
'---------------------------------------------------------------------
Function deleteAllGivenUserQuota()
On Error Resume Next
Err.Clear
Dim objQuotas ' the Quotas object
Dim arrUsersToDelete ' the list of users to be deleted
Dim strListSuccess ' the concatenated list of Successful deletions
Dim strListNotFound ' the concatenated list of not found users
Dim strListFailure ' the concatenated list of Failed Deletions
Dim blnSuccess ' the Final return value for this function
Dim blnDeleteUser ' boolean result for each user quota deletion
Dim i ' to loop
' create the quota object and initialize for the required Volume
Set objQuotas = CreateObject("Microsoft.DiskQuota.1")
objQuotas.Initialize F_strVolName & "\", 1
objQuotas.UserNameResolution = 1 'wait for names
If Err.number <> 0 Then
' cannot proceed. Display failure page.
Call SA_ServeFailurePage(L_OBJECTNOTCREATED_ERRORMESSAGE)
End If
' initialize the success and failure list
strListSuccess = ""
strListNotFound = ""
strListFailure = ""
blnSuccess = TRUE ' initialize the final return value to TRUE
' split the concatenated list of users
arrUsersToDelete = Split(F_strUserList,QUOTAUSER_TOKEN)
If isArray(arrUsersToDelete) Then
' loop for each user
For i = 0 To (UBound(arrUsersToDelete)-1)
'If user is in Admin group, we won't call deleteQuotaEntry. It's
'an issue in Microsoft.DiskQuota.1 object method DeleteUser. If you
'try to delete administrators group by calling that method, it will
'set the quota warning limit to -2 bytes.
if Not IsUserInAdministratorsGroup(arrUsersToDelete(i)) Then
blnDeleteUser = deleteQuotaEntry(objQuotas,arrUsersToDelete(i))
Else
blnDeleteUser = QUOTAUSER_NOT_DELETED
End If
If (blnDeleteUser = QUOTAUSER_DELETED ) Then
' the user is deleted. Add to success list
strListSuccess = strListSuccess & arrUsersToDelete(i) & QUOTAUSER_TOKEN
Else
' make the value False, even if one deletion fails
blnSuccess = FALSE
If (blnDeleteUser = QUOTAUSER_NOT_FOUND ) Then
' the user could not be deleted. Add to Failure list
strListNotFound = strListNotFound & arrUsersToDelete(i) & QUOTAUSER_TOKEN
Else
strListFailure = strListFailure & arrUsersToDelete(i) & QUOTAUSER_TOKEN
End If
End If
Next ' user quota to be deleted
Else
' not an array. unexpected error
Call SA_ServeFailurePage(L_USERS_NOT_RETRIEVED_ERRORMESSAGE)
End If
Set objQuotas = Nothing
' check the Final return value
If (blnSuccess = FALSE) Then
' deletion of atleast one user failed
' initizlize the value to empty
L_TOTAL_ERROR_ERRORMESSAGE = ""
If Len(Trim(strListSuccess)) > 0 Then
' some users are successfully deleted
L_TOTAL_ERROR_ERRORMESSAGE = L_DELETED_USERQUOTAS_ERRORMESSAGE & " "
L_TOTAL_ERROR_ERRORMESSAGE = L_TOTAL_ERROR_ERRORMESSAGE & getAsListFromString(strListSuccess)
End If
If Len(Trim(strListNotFound)) > 0 Then
' form the list of users who could not be deleted, as user not found
L_TOTAL_ERROR_ERRORMESSAGE = L_TOTAL_ERROR_ERRORMESSAGE & " " & L_FAILED_DELETE_ERRORMESSAGE & " "
L_TOTAL_ERROR_ERRORMESSAGE = L_TOTAL_ERROR_ERRORMESSAGE & getAsListFromString(strListNotFound)
End If
If Len(Trim(strListFailure)) > 0 Then
' form the list of users who could not be deleted, as disk space needs to be freed
L_TOTAL_ERROR_ERRORMESSAGE = L_TOTAL_ERROR_ERRORMESSAGE & " " & L_FAILED_DELETE_FREEDISK_ERRORMESSAGE & " "
L_TOTAL_ERROR_ERRORMESSAGE = L_TOTAL_ERROR_ERRORMESSAGE & getAsListFromString(strListFailure)
L_TOTAL_ERROR_ERRORMESSAGE = L_TOTAL_ERROR_ERRORMESSAGE & " " & L_TAKE_OWNERSHIP_ERRORMESSAGE
End If
' call the failure page to display the successful and failed deletions
Call SA_ServeFailurePage(L_TOTAL_ERROR_ERRORMESSAGE)
End If
deleteAllGivenUserQuota = blnSuccess
End Function
'---------------------------------------------------------------------
' Function name: getAsListFromString
' Description: to get the users as list (appended with breaks)
' Input Variables: strConcatenatedList - the concatenated list of users
' Output Variables: None
' Returns: The list of users seperated by
' Global Variables: None
'
' Example: Input = UserA*UserB* Output= UserA & " " & UserB & " "
'---------------------------------------------------------------------
Function getAsListFromString(strConcatenatedList)
Dim arrUserList ' the array of users obtained after "Split"
Dim strListToReturn ' the return list of users
Dim i ' to loop
' initialize the return value
strListToReturn = ""
' Split the given concatenated list of users
arrUserList = Split(strConcatenatedList,QUOTAUSER_TOKEN)
If (isArray(arrUserList)) Then
For i = 0 To (UBound(arrUserList)-1)
' form the list of users by appending the breaks
strListToReturn = strListToReturn & arrUserList(i) & " "
Next
Else
' split did not result in array. Return empty
strListToReturn = ""
End If
getAsListFromString = strListToReturn
End Function
'---------------------------------------------------------------------
' Function name: deleteQuotaEntry
' Description: to delete the quota entry for the user
' Input Variables: objQuotas - the Quotas object
' strUser - the user to be deleted
' Output Variables: None
' Returns: QUOTAUSER_DELETED - if successfully deleted
' QUOTAUSER_NOT_DELETED - if deletion fails
' QUOTAUSER_NOT_FOUND - if user is not found
' Global Variables: None
'
' This function is called for each user specified to be deleted
'---------------------------------------------------------------------
Function deleteQuotaEntry(objQuotas, strUser)
On Error Resume Next
Err.Clear
Dim objUser ' the user to be deleted
Dim blnUserFound ' boolean to check if user is existing
' check if quota entry for the user is present
blnUserFound = False
For Each objUser In objQuotas
If LCase(Trim(strUser)) = LCase(Trim(objUser.LogonName)) Then
' user is found
blnUserFound = True
End If
Next
' return False if user is NOT found
If NOT blnUserFound Then
deleteQuotaEntry = QUOTAUSER_NOT_FOUND
' set the locally declared objects to Nothing
Set objUser = Nothing
' exit the function
Exit Function
End If
' find the user to be deleted
Set objUser = objQuotas.FindUser( strUser )
' delete the user
objQuotas.DeleteUser( objUser )
If Err.Number <> 0 Then
' delete failed
deleteQuotaEntry = QUOTAUSER_NOT_DELETED
Set objUser = Nothing
Err.Clear ' stop further error propagation
Exit Function
End IF
' return true
deleteQuotaEntry = QUOTAUSER_DELETED
' set the locally declared objects to Nothing
Set objUser = Nothing
End Function
%>