1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> 3<!--*********************************************************** 4 * 5 * Licensed to the Apache Software Foundation (ASF) under one 6 * or more contributor license agreements. See the NOTICE file 7 * distributed with this work for additional information 8 * regarding copyright ownership. The ASF licenses this file 9 * to you under the Apache License, Version 2.0 (the 10 * "License"); you may not use this file except in compliance 11 * with the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, 16 * software distributed under the License is distributed on an 17 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18 * KIND, either express or implied. See the License for the 19 * specific language governing permissions and limitations 20 * under the License. 21 * 22 ***********************************************************--> 23<script:module xmlns:script="http://openoffice.org/2000/script" script:name="FilesModul" script:language="StarBasic">Option Explicit 24 25Public AbsTemplateFound as Integer 26Public AbsDocuFound as Integer 27Public oLogDocument as Object 28Public oLogTable as Object 29Public bLogExists as Boolean 30Public sComment as String 31Public MaxCollectIndex as Integer 32Public bInsertRow as Boolean 33Public sLogUrl as String 34Public sCurPassWord as String 35Public FileCount as Integer 36Public XMLTemplateCount as Integer 37Public PathCollection(7,3) as String 38Public bIsFirstLogTable as Boolean 39Public bFilterTracerIsinsideTable as Boolean 40 41 42Function ReadCollectionPaths(FilesList() as String, sFilterName() as String) 43Dim FilterIndex as Integer 44Dim bRecursive as Boolean 45Dim SearchDir as String 46Dim i as Integer 47Dim n as Integer 48Dim a as Integer 49Dim s as Integer 50Dim t as Integer 51Dim sFileContent() as String 52Dim NewList(0,1) as String 53Dim Index as Integer 54Dim CurFileName as String 55Dim CurExtension as String 56Dim CurFileContent as String 57Dim XMLTemplateContentList() as String 58Dim bIsTemplatePath as Boolean 59Dim MaxIndex as Integer 60Dim NewContentList() as String 61Dim XMLTemplateContentString as String 62Dim ApplIndex as Integer 63Dim bAssignFileName as Boolean 64 bInterruptSearch = False 65 For i = 0 To MaxCollectIndex 66 SearchDir = PathCollection(i,0) 67 bRecursive = PathCollection(i,1) 68 sFileContent() = ArrayoutofString(PathCollection(i,2), "|") 69 NewList() = ReadDirectories(SearchDir, bRecursive, False, False, sFileContent(), "") 70 If InterruptProcess Then 71 ReadCollectionPaths() = False 72 Exit Function 73 End If 74 If Ubound(NewList()) > -1 Then 75 bIsTemplatePath = FieldInList("vor", sFileContent) 76 If bIsTemplatePath Then 77 XMLTemplateContentString = PathCollection(i,3) 78 XMLTemplateContentList() = ArrayoutofString(XMLTemplateContentString, "|") 79 If Ubound(XMLTemplateContentList()) > -1 Then 80 MaxIndex = Ubound(NewList()) 81 ReDim Preserve NewList(MaxIndex, 1) as String 82 ReDim Preserve NewContentList(MaxIndex) as String 83 a = -1 84 For n = 0 To MaxIndex 85 bAssignFileName = True 86 If InterruptProcess() Then 87 ReadCollectionPaths() = False 88 Exit Function 89 End If 90 CurFileContent = "" 91 CurFileName = NewList(n,0) 92 If (FieldInList(NewList(n,1), XMLTemplateList())) Then 93 CurFileContent = GetRealFileContent(CurFileName) 94 t = SearchArrayforPartString(CurFileContent, XMLTemplateContentList()) 95 bAssignFileName = (t > -1) 96 If bAssignFileName Then 97 CurFileContent = XMLTemplateContentList(t) 98 End If 99 NewList(n,1) = CurFileContent 100 End If 101 CurExtension = NewList(n,1) 102 If bAssignFileName Then 103 If a < n Then 104 a = a + 1 105 NewList(a,0) = CurFileName 106 NewList(a,1) = CurExtension 107 If CurFileContent = "" Then 108 CurFileContent = CurExtension 109 End If 110 ApplIndex = GetApplicationIndex(CurFileContent, sFiltername()) 111 NewContentList(a) = ApplIndex 112 End If 113 End If 114 Next n 115 If a < MaxIndex And a > -1 Then 116 ReDim Preserve NewList(a, 1) as String 117 End If 118 If a > -1 Then 119 AddListtoFilesList(FilesList(), NewList(), NewContentList()) 120 End If 121 End If 122 Else 123 MaxIndex = Ubound(NewList()) 124 ReDim Preserve NewContentList(MaxIndex) as String 125 For s = 0 To MaxIndex 126 CurExtension = NewList(s,1) 127 NewContentList(s) = GetApplicationIndex(CurExtension, sFiltername()) 128 Next s 129 AddListtoFilesList(FilesList(), NewList(), NewContentList()) 130 End If 131 End If 132 Next i 133 ReadCollectionPaths() = Ubound(FilesList()) > -1 134End Function 135 136 137Function GetApplicationIndex(CurFileContent as String, sFilterName() as String) as Integer 138Dim Index as Integer 139Dim i as Integer 140 Index = GetIndexForPartStringinMultiArray(sFilterName(), CurFileContent, 0) 141 If Index >= MaxApplCount Then 142 Index = Index - MaxApplCount 143 End If 144 For i = 0 To MaxApplCount - 1 145 If Applications(i, SBAPPLKEY) = Index Then 146 GetApplicationIndex() = i 147 Exit Function 148 End If 149 Next i 150 GetApplicationIndex() = - 1 151End Function 152 153 154Function InterruptProcess() as Boolean 155 If bCancelTask Or RetValue = 0 Then 156 bConversionIsRunning = False 157 InterruptProcess() = True 158 Exit Function 159 End if 160 InterruptProcess() = False 161End Function 162 163 164Sub AddCollectionPath(ApplIndex as Integer, DocIndex as Integer, RecursiveIndex as Integer, sFiltername() as String, DistIndex as Integer) 165 MaxCollectIndex = MaxCollectIndex + 1 166 PathCollection(MaxCollectIndex, 0) = Applications(ApplIndex, DocIndex) 167 PathCollection(MaxCollectIndex, 1) = Applications(ApplIndex, RecursiveIndex) 168 AddFilterNameToPathItem(ApplIndex, MaxCollectIndex, sFiltername(), DistIndex) 169End Sub 170 171 172Function SetExtension(LocExtension) as String 173 if (Instr(LocExtension, "vnd.sun.xml.impress")) > 0 then 174 SetExtension() = "vor|sti|std" 175 elseif (Instr(LocExtension, "vnd.sun.xml.writer")) > 0 then 176 SetExtension() = "vor|stw" 177 elseif (Instr(LocExtension, "vnd.sun.xml.calc")) > 0 then 178 SetExtension() = "vor|stc" 179 elseif (Instr(LocExtension, "vnd.sun.xml.draw")) > 0 then 180 SetExtension() = "vor|std|sti" 181 endif 182End Function 183 184Sub AddFilterNameToPathItem(ApplIndex as Integer, CollectIndex as Integer, sFiltername() as String, DistIndex as Integer) 185Dim iKey as Integer 186Dim CurListString as String 187Dim LocExtension as String 188Dim LocContentString as String 189Dim LocXMLTemplateContent as String 190 iKey = Applications(ApplIndex, SBAPPLKEY) 191 CurListString = PathCollection(CollectIndex, 2) 192 LocExtension = sFilterName(iKey +DistIndex, 0) 193 If Len(LocExtension) > SBMAXEXTENSIONLENGTH Then ' 7 == Length of two extensions like 'sda|sdd 194 LocExtension = SetExtension(LocExtension) 195 LocContentString = sFilterName(iKey +DistIndex, 0) 196 LocContentString = ReplaceString(LocContentString, "|", ";") 197 LocXMLTemplateContent = PathCollection(CollectIndex, 3) 198 If LocXMLTemplateContent = "" Then 199 LocXMLTemplateContent = LocContentString 200 Else 201 LocXMLTemplateContent = LocXMLTemplateContent & "|" & LocContentString 202 End If 203 PathCollection(CollectIndex, 3) = LocXMLTemplateContent 204 End If 205 If CurListString = "" Then 206 PathCollection(CollectIndex, 2) = LocExtension 207 Else 208 If Instr(CurListString, LocExtension) = 0 Then 209 PathCollection(CollectIndex, 2) = CurListString & "|" & LocExtension 210 End If 211 End If 212End Sub 213 214 215Sub CheckIfToAddPathToCollection(ApplIndex as Integer, bDoConvertIndex as Integer, DocIndex as Integer, RecursiveIndex as Integer, sFiltername() as String, DistIndex as Integer) 216Dim CollectIndex as Integer 217Dim bCheckDocuType as Boolean 218 bCheckDocuType = Applications(ApplIndex, bDoConvertIndex) 219 If bCheckDocuType Then 220 CollectIndex = GetIndexInMultiArray(PathCollection(), Applications(ApplIndex,DocIndex), 0) 221 If (CollectIndex >-1) Then 222 If Applications(ApplIndex, RecursiveIndex) <> PathCollection(CollectIndex, 1) Then 223 AddCollectionPath(ApplIndex, DocIndex, RecursiveIndex, sFilterName(), DistIndex) 224 Else 225 AddFilterNameToPathItem(ApplIndex, CollectIndex, sFilterName(), DistIndex) 226 End If 227 Else 228 AddCollectionPath(ApplIndex, DocIndex, RecursiveIndex, sFilterName(), DistIndex) 229 End If 230 End If 231End Sub 232 233 234Sub CollectPaths(sFiltername() as String) 235Dim i as Integer 236Dim XMLTemplateContentString as String 237 MaxCollectIndex = -1 238 For i = 0 To ApplCount-1 239 CheckIfToAddPathToCollection(i, SBDOCCONVERT, SBDOCSOURCE, SBDOCRECURSIVE, sFilterName(), 0) 240 Next i 241 XMLTemplateCount = 0 242 XMLTemplateContentString = "" 243 For i = 0 To ApplCount-1 244 If WizardMode = SBXMLMODE Then 245 XMLTemplateCount = XMLTemplateCount + 1 246 End If 247 CheckIfToAddPathToCollection(i, SBTEMPLCONVERT, SBTEMPLSOURCE, SBTEMPLRECURSIVE, sFilterName(), MaxApplCount) 248 Next i 249End Sub 250 251 252Sub ConvertAllDocuments(sFilterName() as String) 253Dim FileProperties(1) as new com.sun.star.beans.PropertyValue 254Dim PWFileProperties(2) as New com.sun.star.beans.PropertyValue 255Dim WriterWebProperties(0) as new com.sun.star.beans.PropertyValue 256Dim OpenProperties(4) as new com.sun.star.beans.PropertyValue 257Dim oInteractionHandler as Object 258Dim InteractionTypes(0) as Long 259Dim FilesList(0,2) as String 260Dim sViewPath as String 261Dim i as Integer 262Dim FilterIndex as Integer 263Dim sSourceUrl as String 264Dim CurFilename as String 265Dim oDocument as Object 266Dim sExtension as String 267Dim OldExtension as String 268Dim CurFound as Integer 269Dim TotFound as Integer 270Dim TargetStemDir as String 271Dim SourceStemDir as String 272Dim TargetDir as String 273Dim sTargetUrl as String 274Dim CurFilterName as String 275Dim ApplIndex as Integer 276Dim Index as Integer 277Dim bIsDocument as Boolean 278Dim bDoSave as Boolean 279Dim sCurFileExists as String 280Dim MaxFileIndex as Integer 281Dim bContainsBasicMacro as Boolean 282Dim bIsPassWordProtected as Boolean 283Dim iOverwrite as Integer 284Dim sMimeTypeorExtension as String 285Dim sPrevMimeTypeorExtension as String 286 bConversionisrunning = True 287 InteractionTypes(0) = com.sun.star.task.PasswordRequestMode.PASSWORD_REENTER 288 oInteractionHandler = createUnoService("com.sun.star.task.InteractionHandler") 289 oInteractionHandler.initialize(InteractionTypes()) 290 iGeneralOverwrite = SBOVERWRITEUNDEFINED 291 bConversionIsRunning = True 292 bLogExists = false 293 AbsTemplateFound = 0 294 AbsDocuFound = 0 295 CollectPaths(sFiltername()) 296 If Not ReadCollectionPaths(FilesList(), sFilterName()) Then 297 TotFound = 0 298 SetProgressDisplay(0) 299 bConversionisrunning = false 300 FinalizeDialogButtons() 301 Exit Sub 302 End If 303 TotFound = Ubound(FilesList()) + 1 304 If FilesList(0,0) = "" Then ' Querying the number of fields in a multidimensionl Array is unsecure 305 TotFound = 0 ' because it will return the value 0 (and not -1) even when the Array is empty 306 SetProgressDisplay(0) 307 End If 308 BubbleSortList(FilesList(), true) 309 If TotFound > 0 Then 310 CreateLogDocument(OpenProperties()) 311 InitializeProgressPage(ImportDialog) 312 OpenProperties(0).Name = "Hidden" 313 OpenProperties(0).Value = True 314 OpenProperties(1).Name = "AsTemplate" 315 OpenProperties(1).Value = False 316 OpenProperties(2).Name = "MacroExecutionMode" 317 OpenProperties(2).Value = com.sun.star.document.MacroExecMode.NEVER_EXECUTE 318 OpenProperties(3).Name = "UpdateDocMode" 319 OpenProperties(3).Value = com.sun.star.document.UpdateDocMode.NO_UPDATE 320 OpenProperties(4).Name = "InteractionHandler" 321 OpenProperties(4).Value = oInteractionHandler 322 MaxFileIndex = Ubound(FilesList(),1) 323 FileCount = 0 324 For i = 0 To MaxFileIndex 325 sComment = "" 326 If InterruptProcess() Then 327 Exit For 328 End If 329 bDoSave = True 330 sSourceUrl = FilesList(i,0) 331 sPrevMimeTypeorExtension = sMimeTypeorExtension 332 sMimeTypeorExtension = FilesList(i,1) 333 CurFiltername = GetFilterName(sMimeTypeorExtension, sFilterName(), sExtension, FilterIndex) 334 ApplIndex = FilesList(i,2) 335 If sMimeTypeorExtension <> sPrevMimeTypeorExtension Then 336 CreateLogTable(ApplIndex, sMimeTypeOrExtension, sFiltername() 337 End If 338 If ApplIndex > Ubound(Applications) or (ApplIndex < 0) Then 339 Msgbox "Applicationindex out of bounds:" & sSourcUrl 340 End If 341 sViewPath = ConvertFromUrl(sSourceUrl) ' CutPathView(sSourceUrl, 70) 342 ImportDialog.LabelCurDocument.Label = Str(i+1) & "/" & MaxFileIndex + 1 & " (" & sViewPath & ")" 343 Select Case lcase(sExtension) 344 Case "odt", "ods", "odp", "odg", "odm", "odf" 345 SourceStemDir = RTrimStr(Applications(ApplIndex,SBDOCSOURCE), "/") 346 TargetStemDir = RTrimStr(Applications(ApplIndex,SBDOCTARGET), "/") 347 Case Else ' Templates and Helper-Applications remain 348 SourceStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLSOURCE), "/") 349 TargetStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLTARGET), "/") 350 End Select 351 sTargetUrl = ReplaceString(sSourceUrl, TargetStemDir, SourceStemDir) 352 CurFilename = GetFileNameWithoutExtension(sTargetUrl, "/") 353 OldExtension = GetFileNameExtension(sTargetUrl) 354 sTargetUrl = RTrimStr(sTargetUrl, OldExtension) 355 sTargetUrl = sTargetUrl & sExtension 356 TargetDir = RTrimStr(sTargetUrl, CurFilename & "." & sExtension) 357 If (oUcb.Exists(sTargetUrl)) Then 358 If (iGeneralOverwrite <> SBOVERWRITEALWAYS) Then 359 If (iGeneralOverwrite = SBOVERWRITEUNDEFINED) Then 360 ShowOverwriteAllDialog(sTargetUrl, sTitle) 361 bDoSave = (iGeneralOverwrite = SBOVERWRITEQUERY) Or (iGeneralOverwrite = SBOVERWRITEALWAYS) 362 Elseif iGeneralOverwrite = SBOVERWRITENEVER Then 363 bDoSave = False 364 ElseIf ((iGeneralOverWrite = SBOVERWRITEQUERY) OR (iGeneralOverwrite = SBOVERWRITECANCEL)) Then 365 ' Todo: According to AS there might come a new feature that storeasUrl could possibly rise a UI dialog. 366 ' In this case my own UI becomes obsolete 367 sCurFileExists = ReplaceString(sFileExists, ConvertFromUrl(sTargetUrl), "<1>") 368 sCurFileExists = ReplaceString(sCurFileExists, chr(13), "<CR>") 369 iOverWrite = Msgbox (sCurFileExists, 32 + 3, sTitle) 370 Select Case iOverWrite 371 Case 1 ' OK 372 ' In the FileProperty-Bean this is already default 373 bDoSave = True 374 Case 2 ' Abort 375 CancelTask(False) 376 bDoSave = False 377 Case 7 ' No 378 bDoSave = False 379 End Select 380 End If 381 End If 382 End If 383 If bDoSave Then 384 If Not oUcb.Exists(TargetDir) Then 385 bDoSave = CreateFolder(TargetDir) 386 End If 387 If bDoSave Then 388 oDocument = StarDesktop.LoadComponentFromURL(sSourceUrl, "_default", 0, OpenProperties()) 389 If Not IsNull(oDocument) Then 390 InsertSourceUrlToLogDocument(sSourceUrl, "") 391 bIsPassWordProtected = CheckPassWordProtection(oDocument) 392 CheckIfMacroExists(oDocument.BasicLibraries, sComment) 393 On Local Error Goto NOSAVING 394 If bIsPassWordProtected Then 395 PWFileProperties(0).Name = "FilterName" 396 PWFileProperties(0).Value = CurFilterName 397 PWFileProperties(1).Name = "Overwrite" 398 PWFileProperties(1).Value = True 399 PWFileProperties(2).Name = "Password" 400 PWFileProperties(2).Value = sCurPassWord 401 oDocument.StoreAsUrl(sTargetUrl, PWFileProperties()) 402 Else 403 FileProperties(0).Name = "FilterName" 404 FileProperties(0).Value = CurFilterName 405 FileProperties(1).Name = "Overwrite" 406 FileProperties(1).Value = True 407 oDocument.StoreAsUrl(sTargetUrl,FileProperties()) 408 End If 409 ' Todo: Make sure that an errorbox pops up when saving fails 410 NOSAVING: 411 If Err <> 0 Then 412 sCurcouldnotsaveDocument = ReplaceString(scouldnotsaveDocument, ConvertFromUrl(sTargetUrl), "<1>") 413 sComment = ConcatComment(sComment, sCurCouldnotsaveDocument) 414 Resume LETSGO 415 LETSGO: 416 Else 417 FileCount = FileCount + 1 418 End If 419 oDocument.Dispose() 420 InsertTargetUrlToLogDocument(sTargetUrl, sComment, ApplIndex) 421 Else 422 sCurcouldnotopenDocument = ReplaceString(scouldnotopenDocument, ConvertFromUrl(sSourceUrl), "<1>") 423 sComment = ConcatComment(sComment, sCurCouldnotopenDocument) 424 InsertSourceUrlToLogDocument(sSourceUrl, sComment) 425 End If 426 End If 427 End If 428 Next i 429 End If 430 AddLogStatistics() 431 FinalizeDialogButtons() 432 bConversionIsRunning = False 433 Exit Sub 434RTError: 435 Msgbox sRTErrorDesc, 16, sRTErrorHeader 436End Sub 437 438 439 440Sub AddListtoFilesList(FirstList(), SecList(), NewContentList() as String) 441Dim sLocExtension as String 442Dim FirstStart as Integer 443Dim FirstEnd as Integer 444Dim i as Integer 445Dim s as Integer 446 If FirstList(0,0) = "" Then 447 FirstStart = Ubound(FirstList(),1) 448 Else 449 FirstStart = Ubound(FirstList(),1) + 1 450 End If 451 FirstEnd = FirstStart + Ubound(SecList(),1) 452 ReDim Preserve FirstList(FirstEnd,2) 453 s = 0 454 For i = FirstStart To FirstEnd 455 FirstList(i,0) = SecList(s,0) 456 FirstList(i,1) = SecList(s,1) 457 sLocExtension = lcase(FirstList(i,1)) 458 Select Case sLocExtension 459 Case "sdw", "sdc", "sda", "sdd", "smf", "sgl", "doc", "xls", "ppt", "sxi" , "sxw" , "sxd" , "sxg" , "sxm" , "sxc" , "pps" , "docx" , "docm" , "xlsx" , "xlsm" , "xlsb" , "pptx" , "pptm" 460 AbsDocuFound = AbsDocuFound + 1 461 Case else 462 AbsTemplateFound = AbsTemplateFound + 1 463 End Select 464 FirstList(i,2) = CStr(NewContentList(s)) 465 s = s + 1 466 Next i 467 SetProgressDisplay(Ubound(FirstList()) + 1) 468End Sub 469 470 471 472Function GetTargetTemplatePath(Index as Integer) 473 Select Case WizardMode 474 Case SBMICROSOFTMODE 475 GetTargetTemplatePath() = SOTemplatePath & "/" & sTemplateGroupName 476 Case SBXMLMODE 477 If Index = 3 Then 478 ' Helper Application 479 GetTargetTemplatePath = SOWorkPath 480 Else 481 GetTargetTemplatePath = SOTemplatePath 482 End If 483 End Select 484End Function 485 486 487' Retrieves the second value for a next to 'SearchString' in 488' a two-dimensional string-Array 489Function GetFilterName(sMimetypeorExtension as String, sFilterName(), sExtension as string, FilterIndex as Integer) as String 490Dim i as Integer 491Dim MaxIndex as Integer 492Dim sLocFilterlist() as String 493 For i = 0 To Ubound(sFiltername(),1) 494 If Instr(1,sFilterName(i,0),sMimeTypeOrExtension) <> 0 Then 495 sLocFilterList() = ArrayoutofString(sFiltername(i,0),"|", MaxIndex) 496 If MaxIndex = 0 Then 497 sExtension = sFiltername(i,2) 498 GetFilterName = sFilterName(i,1) 499 Else 500 Dim b as Integer 501 Dim sLocExtensionList() as String 502 b = SearchArrayForPartString(sMimetypeOrExtension, sLocFilterList()) 503 sLocFilterList() = ArrayoutofString(sFiltername(i,1),"|", MaxIndex) 504 GetFilterName = sLocFilterList(b) 505 sLocExtensionList() = ArrayoutofString(sFilterName(i,2), "|", MaxIndex) 506 sExtension = sLocExtensionList(b) 507 End If 508 Exit For 509 End If 510 Next 511 FilterIndex = i 512End Function 513 514 515Function SearchArrayforPartString(SearchString as String, LocList()) as Integer 516Dim i as Integer 517Dim a as Integer 518Dim StringList() as String 519 For i = Lbound(LocList(),1) to Ubound(LocList(),1) 520 StringList() = ArrayoutofString(LocList(i), "|") 521 For a = 0 To Ubound(StringList()) 522 If (Instr(1, SearchString, StringList(a)) <> 0) Then 523 SearchArrayForPartString() = i 524 Exit Function 525 End If 526 Next a 527 Next i 528 SearchArrayForPartString() = -1 529End Function 530 531 532Sub CreateLogTable(ApplIndex as Integer, CurFileContent as String, sFilterName() as String) 533Dim oLogCursor as Object 534Dim oLogRows as Object 535Dim FilterIndex as Integer 536Dim sDocumentType as String 537Dim oTextCursor 538Dim oCell 539 If Not bLogExists Then 540 Exit Sub 541 End If 542 bFilterTracerIsinsideTable = False 543 FilterIndex = GetIndexForPartStringinMultiArray(sFilterName(), CurFileContent, 0) 544 sDocumentType = sFiltername(FilterIndex,3) 545 oLogCursor = oLogDocument.Text.createTextCursor() 546 oLogCursor.GotoEnd(False) 547 If Not bIsFirstLogTable Then 548 oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) 549 Else 550 bisFirstLogTable = False 551 End If 552 oLogCursor.HyperLinkURL = "" 553 oLogCursor.HyperLinkName = "" 554 oLogCursor.HyperLinkTarget = "" 555 oLogCursor.ParaStyleName = "Heading 1" 556 oLogCursor.setString(sDocumentType) 557 If WizardMode = SBMICROSOFTMODE Then 558 If bFilterTracingAvailable Then 559 If bMSApplFilterTracingAvailable(ApplIndex) Then 560 Dim CurFilterTracingPath as String 561 CurFilterTracingPath = FilterTracingLogPath(ApplIndex) 562 bFilterTracerIsinsideTable = (bTakeOverTargetName(ApplIndex) Or bTakeOverPathName(ApplIndex)) 563 If Not bFilterTracerIsinsideTable Then 564 oLogCursor.CollapseToEnd() 565 oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) 566 InsertCommandButtonatViewCursor(oLogDocument, oLogCursor, CurFilterTracingPath) 567 End If 568 End If 569 End If 570 End If 571 oLogCursor.CollapsetoEnd() 572 oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) 573 oLogTable = oLogDocument.CreateInstance("com.sun.star.text.TextTable") 574 oLogTable.RepeatHeadline = true 575 If bFilterTracerIsinsideTable Then 576 oLogTable.initialize(2,3) 577 End If 578 oLogCursor.Text.InsertTextContent(oLogCursor, oLogTable, True) 579 oTextCursor = oLogTable.GetCellbyPosition(0,0).createTextCursor() 580 oTextCursor.SetString(sSourceDocuments) 581 oTextCursor = oLogTable.GetCellbyPosition(1,0).createTextCursor() 582 oTextCursor.SetString(sTargetDocuments) 583 If bFilterTracerIsinsideTable Then 584 oTextCursor = oLogTable.GetCellbyPosition(2,0).createTextCursor() 585 oTextCursor.SetString("FilterTracer") 586 End If 587 bInsertRow = False 588End Sub 589 590 591Function GetSize(iWidth, iHeight) As New com.sun.star.awt.Size 592Dim aSize As New com.sun.star.awt.Size 593 aSize.Width = iWidth 594 aSize.Height = iHeight 595 GetSize() = aSize 596End Function 597 598 599Sub InsertCommandButtonatViewCursor(oLocDocument, oLocCursor, TargetUrl as String, Optional aSize) 600Dim oDocument 601Dim oController 602Dim oCommandButton 603Dim oShape 604Dim oDrawPage 605Dim oCommandControl 606Dim oEvent 607Dim oCell 608 oCommandButton = oLocDocument.createInstance("com.sun.star.form.component.CommandButton") 609 oShape = oLocDocument.CreateInstance ("com.sun.star.drawing.ControlShape") 610 If IsMissing(aSize) Then 611 oShape.Size = GetSize(4000, 600) 612 End If 613 oCommandButton.Label = FileNameoutofPath(Targeturl) 614 oCommandButton.TargetFrame = "_default" 615 oCommandButton.ButtonType = com.sun.star.form.FormButtonType.URL 616 oCommandbutton.DispatchUrlInternal = True 617 oCommandButton.TargetURL = ConverttoUrl(TargetUrl) 618 oShape.Control = oCommandbutton 619 oLocCursor.Text.InsertTextContent(oLocCursor, oShape, True) 620End Sub 621 622 623 624Sub CreateLogDocument(HiddenProperties()) 625Dim OpenProperties(0) as new com.sun.star.beans.PropertyValue 626Dim NoArgs() 627Dim i as Integer 628Dim bLogIsThere as Boolean 629 If ImportDialog.chkLogfile.State = 1 Then 630 i = 2 631 OpenProperties(0).Name = "Hidden" 632 OpenProperties(0).Value = True 633 oLogDocument = StarDesktop.LoadComponentFromURL("private:factory/swriter", "_default", 4, OpenProperties()) 634 SOWorkPath = RTrimStr(SOWorkPath,"/") 635 sLogUrl = SOWorkPath & "/Logfile.odt" 636 Do 637 bLogIsThere = oUcb.Exists(sLogUrl) 638 If bLogIsThere Then 639 If i = 2 Then 640 sLogUrl = ReplaceString(sLogUrl, "/Logfile_2.odt", "/Logfile.odt") 641 Else 642 sLogUrl = ReplaceString(sLogUrl, "/Logfile_" & cStr(i) & ".odt", "/Logfile_" & cStr(i-1) & ".odt") 643 End If 644 i = i + 1 645 End If 646 Loop Until Not bLogIsThere 647 bLogExists = True 648 oLogDocument.StoreAsUrl(sLogUrl, NoArgs()) 649 End If 650End Sub 651 652 653Function GetFilterTracingLogPath(sTargetUrl as String, ApplIndex) as String 654Dim TargetFileName as String 655Dim sTargetFolder as String 656Dim CurFilterTracingPath as String 657Dim CurFilterTracingname as String 658Dim CurFilterFolder as String 659 CurFilterTracingPath = FilterTracingLogPath(ApplIndex) 660 If bTakeOverTargetName(ApplIndex) Then 661 TargetFilename = GetFileNameWithoutextension(sTargetUrl, "/") 662 CurFilterFolder = DirectoryNameoutofPath(FilterTracingLogPath(ApplIndex), "/") 663 CurFilterTracingpath = CurFilterFolder & "/" & TargetFilename & ".log" 664 End If 665 If bTakeOverPathName(ApplIndex) Then 'Replace the Folder in the FilterTracerpath by the Folder of the targetUrl 666 sTargetFolder = DirectoryNameoutofPath(sTargetUrl,"/") 667 CurFilterTracingPath = sTargetFolder & "/" & FileNameoutofPath(CurFilterTracingPath, "/") 668 End If 669 GetFilterTracingLogPath() = CurFilterTracingPath 670End Function 671 672 673Sub InsertTargetUrlToLogDocument(sTargetUrl as String, sComment as String, ApplIndex as Integer) 674Dim oCell 675Dim oTextCursor 676Dim CurFilterTracingpath as String 677 If (bLogExists) And (sTargetUrl <> "") Then 678 If sTargetUrl <> "" Then 679 oCell = oLogTable.GetCellbyPosition(1,oLogTable.Rows.Count-1) 680 InsertCommentToLogCell(sComment, oCell) 681 InsertHyperLinkToLogCell(sTargetUrl, oCell) 682 If bFilterTracerIsinsideTable Then 683 oCell = oLogTable.getCellByPosition(2, oLogTable.Rows.Count-1) 684 oTextCursor = oCell.Text.CreateTextCursor() 685 CurFilterTracingpath = GetFilterTracingLogPath(sTargetUrl, ApplIndex) 686 InsertCommandButtonatViewCursor(oLogDocument, oTextCursor, CurFilterTracingPath) 687 End If 688 oLogDocument.Store() 689 End If 690 End If 691End Sub 692 693 694Sub InsertSourceUrlToLogDocument(SourceUrl as String, sComment) ' 695Dim oCell as Object 696 If bLogExists Then 697 If bInsertRow Then 698 oLogTable.Rows.InsertByIndex(oLogTable.Rows.Count,1) 699 Else 700 bInsertRow = True 701 End If 702 oCell = oLogTable.GetCellbyPosition(0,oLogTable.Rows.Count-1) 703 InsertCommentToLogCell(sComment, oCell) 704 InsertHyperLinkToLogCell(SourceUrl, oCell) 705 oLogDocument.Store() 706 End If 707End Sub 708 709 710Sub InsertHyperLinkToLogCell(sUrl as String, oCell as Object) 711Dim oLogCursor as Object 712Dim LocFileName as String 713 oLogCursor = oCell.createTextCursor() 714 oLogCursor.CollapseToStart() 715 oLogCursor.HyperLinkURL = sUrl 716 oLogCursor.HyperLinkName = sUrl 717 oLogCursor.HyperLinkTarget = sUrl 718 LocFileName = FileNameOutOfPath(sUrl) 719 oCell.InsertString(oLogCursor, LocFileName,False) 720End Sub 721 722 723Sub InsertCommentToLogCell(sComment as string, oCell as Object) 724Dim oCommentCursor as Object 725 If sComment <> "" Then 726 oCommentCursor = oCell.createTextCursor() 727 oCell.insertControlCharacter(oCommentCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) 728 oCell.insertString(oCommentCursor, sComment, false) 729 End If 730End Sub 731 732 733Sub AddLogStatistics() 734Dim oCell as Object 735Dim oLogCursor as Object 736Dim MaxRowIndex as Integer 737 If bLogExists Then 738 MaxRowIndex = oLogTable.Rows.Count 739 sLogSummary = ReplaceString(sLogSummary, FileCount, "<COUNT>") 740' oLogTable.Rows.InsertByIndex(MaxRowIndex, 1) 741' oCell = oLogTable.GetCellbyPosition(0, MaxRowIndex) 742' oLogCursor = oCell.createTextCursor() 743' oCell.InsertString(oLogCursor, sLogSummary,False) 744' MergeRange(oLogTable, oCell, 1) 745 746 oLogCursor = oLogDocument.Text.CreateTextCursor 747 oLogCursor.gotoEnd(False) 748 oLogCursor.HyperLinkURL = "" 749 oLogCursor.HyperLinkName = "" 750 oLogCursor.HyperLinkTarget = "" 751 oLogCursor.SetString(sLogSummary) 752 oLogDocument.Store() 753 oLogDocument.Dispose() 754 bLogExists = False 755 End If 756End Sub 757 758 759 760Function CheckIfMacroExists(oBasicLibraries as Object, sComment as String) as Boolean 761Dim ModuleNames() as String 762Dim ModuleName as String 763Dim MaxLibIndex as Integer 764Dim MaxModuleIndex as Integer 765Dim bMacroExists as Boolean 766Dim n as Integer 767Dim m as Integer 768Dim LibName as String 769Dim sBasicCode as String 770Dim oLibrary as Object 771 bMacroExists = False 772 bMacroExists = oBasicLibraries.hasElements 773 If bMacroExists Then 774 MaxLibIndex = Ubound(oBasicLibraries.ElementNames()) 775 For n = 0 To MaxLibIndex 776 LibName = oBasicLibraries.ElementNames(n) 777 If oBasicLibraries.isLibraryLoaded(LibName) Then 778 oLibrary = oBasicLibraries.getbyName(LibName) 779 If oLibrary.hasElements() Then 780 MaxModuleIndex = Ubound(oLibrary.ElementNames()) 781 For m = 0 To MaxModuleIndex 782 ModuleName = oLibrary.ElementNames(m) 783 sBasicCode = oLibrary.getbyName(ModuleName) 784 If sBasicCode <> "" Then 785 ConcatComment(sComment, sReeditMacro) 786 CheckIfMacroExists() = True 787 Exit Function 788 End If 789 Next m 790 End If 791 End If 792 Next n 793 End If 794 CheckIfMacroExists() = False 795End Function 796 797 798 799Function CheckPassWordProtection(oDocument as Object) 800Dim bIsPassWordProtected as Boolean 801Dim i as Integer 802Dim oArgs() 803Dim MaxIndex as Integer 804Dim sblabla as String 805 bIsPassWordProtected = false 806 oArgs() = oDocument.getArgs() 807 MaxIndex = Ubound(oArgs()) 808 For i = 0 To MaxIndex 809 sblabla = oArgs(i).Name 810 If oArgs(i).Name = "Password" Then 811 bIsPassWordProtected = True 812 sCurPassWord = oArgs(i).Value 813 Exit For 814 End If 815 Next i 816 CheckPassWordProtection() = bIsPassWordProtected 817End Function 818 819 820Sub OpenLogDocument() 821 822 bShowLogFile = True 823 ImportDialogArea.endexecute() 824 825End Sub 826 827 828Sub MergeRange(oTable as Object, oCell as Object, MergeCount as Integer) 829Dim oTableCursor as Object 830 oTableCursor = oTable.createCursorByCellName(oCell.CellName) 831 oTableCursor.goRight(MergeCount, True) 832 oTableCursor.mergeRange() 833End Sub 834 835 836Function ConcatComment(sComment as String, AdditionalComment as String) 837 If sComment = "" Then 838 sComment = AdditionalComment 839 Else 840 sComment = sComment & chr(13) + AdditionalComment 841 End If 842 ConcatComment = sComment 843End Function 844</script:module> 845