sc/qa/unit/data/ods/change-tracking.ods                |binary
 sc/qa/unit/subsequent_export_test4.cxx                 |   23 +++++++++++++++++
 sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx |   19 ++++++++++----
 3 files changed, 37 insertions(+), 5 deletions(-)

New commits:
commit 2d60017a66cca4668c87f64f6d048566656b3b1c
Author:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
AuthorDate: Thu Jun 20 10:51:11 2024 +0200
Commit:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
CommitDate: Mon Jun 24 07:51:52 2024 +0200

    ods: Don't export changes author/date when in privacy mode
    
    Change-Id: I8c542f398bb70da96a64b61a9931398b6a78ea72
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169258
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>

diff --git a/sc/qa/unit/data/ods/change-tracking.ods 
b/sc/qa/unit/data/ods/change-tracking.ods
new file mode 100644
index 000000000000..01077fffc749
Binary files /dev/null and b/sc/qa/unit/data/ods/change-tracking.ods differ
diff --git a/sc/qa/unit/subsequent_export_test4.cxx 
b/sc/qa/unit/subsequent_export_test4.cxx
index 041a7b0bb9cf..0814c915d81b 100644
--- a/sc/qa/unit/subsequent_export_test4.cxx
+++ b/sc/qa/unit/subsequent_export_test4.cxx
@@ -1868,6 +1868,29 @@ CPPUNIT_TEST_FIXTURE(ScExportTest4, testTdf157318)
                          
static_cast<sal_uInt16>(pDoc->GetRangeName(0)->size()));
 }
 
+CPPUNIT_TEST_FIXTURE(ScExportTest4, testChangesAuthorDate)
+{
+    createScDoc("ods/change-tracking.ods");
+
+    auto pBatch(comphelper::ConfigurationChanges::create());
+    // Remove all personal info
+    
officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(true,
 pBatch);
+    pBatch->commit();
+
+    save(u"calc8"_ustr);
+    xmlDocUniquePtr pXmlDoc = parseExport(u"content.xml"_ustr);
+    CPPUNIT_ASSERT(pXmlDoc);
+
+    assertXPathContent(
+        pXmlDoc,
+        
"/office:document-content/office:body/office:spreadsheet/table:tracked-changes/table:cell-content-change[1]/office:change-info/dc:creator"_ostr,
+        u"Author1"_ustr);
+    assertXPathContent(
+        pXmlDoc,
+        
"/office:document-content/office:body/office:spreadsheet/table:tracked-changes/table:cell-content-change[1]/office:change-info/dc:date"_ostr,
+        u"1970-01-01T12:00:00"_ustr);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx 
b/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx
index 1a3b22e6aad0..80f70da9f53e 100644
--- a/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx
+++ b/sc/source/filter/xml/XMLChangeTrackingExportHelper.cxx
@@ -37,6 +37,8 @@
 #include <svl/sharedstring.hxx>
 #include <sal/log.hxx>
 
+#include <com/sun/star/util/DateTime.hpp>
+
 using namespace ::com::sun::star;
 using namespace xmloff::token;
 
@@ -94,21 +96,28 @@ void ScChangeTrackingExportHelper::WriteBigRange(const 
ScBigRange& rBigRange, XM
 
 void ScChangeTrackingExportHelper::WriteChangeInfo(const ScChangeAction* 
pAction)
 {
+    bool bRemovePersonalInfo
+        = 
SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo)
+          && 
!SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnKeepRedlineInfo);
+
     SvXMLElementExport aElemInfo (rExport, XML_NAMESPACE_OFFICE, 
XML_CHANGE_INFO, true, true);
 
     {
         SvXMLElementExport aCreatorElem( rExport, XML_NAMESPACE_DC,
                                             XML_CREATOR, true,
                                             false );
-        rExport.Characters(pAction->GetUser());
+        rExport.Characters(bRemovePersonalInfo
+                               ? "Author" + 
OUString::number(rExport.GetInfoID(pAction->GetUser()))
+                               : pAction->GetUser());
     }
 
     {
         OUStringBuffer sDate;
-        ScXMLConverter::ConvertDateTimeToString(pAction->GetDateTimeUTC(), 
sDate);
-        SvXMLElementExport aDateElem( rExport, XML_NAMESPACE_DC,
-                                          XML_DATE, true,
-                                          false );
+        ScXMLConverter::ConvertDateTimeToString(bRemovePersonalInfo
+                                                    ? util::DateTime(0, 0, 0, 
12, 1, 1, 1970, true)
+                                                    : 
pAction->GetDateTimeUTC(),
+                                                sDate);
+        SvXMLElementExport aDateElem(rExport, XML_NAMESPACE_DC, XML_DATE, 
true, false);
         rExport.Characters(sDate.makeStringAndClear());
     }
 

Reply via email to