123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
- <!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
- <script:module xmlns:script="http://openoffice.org/2000/script" script:name="Protect" script:language="StarBasic">REM ***** BASIC *****
- Option Explicit
- Public PWIndex as Integer
- Function UnprotectSheetsWithPassWord(oSheets as Object, bDoUnProtect as Boolean)
- Dim i as Integer
- Dim MaxIndex as Integer
- Dim iMsgResult as Integer
- PWIndex = -1
- If bDocHasProtectedSheets Then
- If Not bDoUnprotect Then
- ' At First query if sheets shall generally be unprotected
- iMsgResult = Msgbox(sMsgUNPROTECT,36,sMsgDLGTITLE)
- bDoUnProtect = iMsgResult = 6
- End If
- If bDoUnProtect Then
- MaxIndex = oSheets.Count-1
- For i = 0 To MaxIndex
- bDocHasProtectedSheets = Not UnprotectSheet(oSheets(i))
- If bDocHasProtectedSheets Then
- ReprotectSheets()
- Exit For
- End If
- Next i
- If PWIndex = -1 Then
- ReDim UnProtectList() as String
- Else
- ReDim Preserve UnProtectList(PWIndex) as String
- End If
- Else
- Msgbox (sMsgSHEETSNOPROTECT, 64, sMsgDLGTITLE)
- End If
- End If
- UnProtectSheetsWithPassword = bDocHasProtectedSheets
- End Function
- Function UnprotectSheet(oListSheet as Object)
- Dim ListSheetName as String
- Dim sStatustext as String
- Dim i as Integer
- Dim bOneSheetIsUnprotected as Boolean
- i = -1
- ListSheetName = oListSheet.Name
- If oListSheet.IsProtected Then
- oListSheet.Unprotect("")
- If oListSheet.IsProtected Then
- ' Sheet is protected by a Password
- bOneSheetIsUnProtected = UnprotectSheetWithDialog(oListSheet, ListSheetName)
- UnProtectSheet() = bOneSheetIsUnProtected
- Else
- ' The Sheet could be unprotected without a password
- AddSheettoUnprotectionlist(ListSheetName,"")
- UnprotectSheet() = True
- End If
- Else
- UnprotectSheet() = True
- End If
- End Function
- Function UnprotectSheetWithDialog(oListSheet as Object, ListSheetName as String) as Boolean
- Dim PWIsCorrect as Boolean
- Dim QueryText as String
- oDocument.CurrentController.SetActiveSheet(oListSheet)
- QueryText = ReplaceString(sMsgPWPROTECT,"'" & ListSheetName & "'", "%1TableName%1")
- '"Please insert the password to unprotect the sheet '" & ListSheetName'"
- Do
- ExecutePasswordDialog(QueryText)
- If bCancelProtection Then
- bCancelProtection = False
- Msgbox (sMsgSHEETSNOPROTECT, 64, sMsgDLGTITLE)
- UnprotectSheetWithDialog() = False
- exit Function
- End If
- oListSheet.Unprotect(Password)
- If oListSheet.IsProtected Then
- PWIsCorrect = False
- Msgbox (sMsgWRONGPW, 64, sMsgDLGTITLE)
- Else
- ' Sheet could be unprotected
- AddSheettoUnprotectionlist(ListSheetName,Password)
- PWIsCorrect = True
- End If
- Loop Until PWIsCorrect
- UnprotectSheetWithDialog() = True
- End Function
- Sub ExecutePasswordDialog(QueryText as String)
- With PasswordModel
- .Title = QueryText
- .hlnPassword.Label = sMsgPASSWORD
- .cmdCancel.Label = sMsgCANCEL
- .cmdHelp.Label = sHELP
- .cmdGoOn.Label = sMsgOK
- .cmdGoOn.DefaultButton = True
- End With
- DialogPassword.Execute
- End Sub
- Sub ReadPassword()
- Password = PasswordModel.txtPassword.Text
- DialogPassword.EndExecute
- End Sub
- Sub RejectPassword()
- bCancelProtection = True
- DialogPassword.EndExecute
- End Sub
- ' Reprotects the previously protected sheets
- ' The password information is stored in the List 'UnProtectList()'
- Sub ReprotectSheets()
- Dim i as Integer
- Dim oProtectSheet as Object
- Dim ProtectList() as String
- Dim SheetName as String
- Dim SheetPassword as String
- If PWIndex > -1 Then
- SetStatusLineText(sStsREPROTECT)
- For i = 0 To PWIndex
- ProtectList() = ArrayOutOfString(UnProtectList(i),";")
- SheetName = ProtectList(0)
- If Ubound(ProtectList()) > 0 Then
- SheetPassWord = ProtectList(1)
- Else
- SheetPassword = ""
- End If
- oProtectSheet = oSheets.GetbyName(SheetName)
- If Not oProtectSheet.IsProtected Then
- oProtectSheet.Protect(SheetPassWord)
- End If
- Next i
- SetStatusLineText("")
- End If
- PWIndex = -1
- ReDim UnProtectList()
- End Sub
- ' Add a Sheet to the list of sheets that finally have to be
- ' unprotected
- Sub AddSheettoUnprotectionlist(ListSheetName as String, Password as String)
- Dim MaxIndex as Integer
- MaxIndex = Ubound(UnProtectList())
- PWIndex = PWIndex + 1
- If PWIndex > MaxIndex Then
- ReDim Preserve UnprotectList(MaxIndex + SBRANGEUBOUND)
- End If
- UnprotectList(PWIndex) = ListSheetName & ";" & Password
- End Sub
- Function CheckSheetProtection(oSheets as Object) as Boolean
- Dim MaxIndex as Integer
- Dim i as Integer
- Dim bProtectedSheets as Boolean
- bProtectedSheets = False
- MaxIndex = oSheets.Count-1
- For i = 0 To MaxIndex
- bProtectedSheets = oSheets(i).IsProtected
- If bProtectedSheets Then
- CheckSheetProtection() = True
- Exit Function
- End If
- Next i
- CheckSheetProtection() = False
- End Function</script:module>
|