diff --git a/include/unotools/securityoptions.hxx b/include/unotools/securityoptions.hxx
index 5322f2615ba3..debd0a772b82 100644
--- a/include/unotools/securityoptions.hxx
+++ b/include/unotools/securityoptions.hxx
@@ -40,6 +40,7 @@ namespace SvtSecurityOptions
DocWarnSigning,
DocWarnPrint,
DocWarnCreatePdf,
+ DocWarnRemoveEditingTimeInfo,
DocWarnRemovePersonalInfo,
DocWarnKeepRedlineInfo,
DocWarnKeepDocUserInfo,
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 3b6ca946acde..afab119c23d1 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -2436,6 +2436,12 @@
false
+
+
+ Specifies whether to remove editing duration on saving.
+
+ false
+
Specifies whether to remove personal information on
diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx
index daf4ce7cd281..ffe41fd79afb 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -770,7 +770,7 @@ writeAppProperties( XmlFilterBase& rSelf, const Reference< XDocumentProperties >
writeElement( pAppProps, XML_Notes, "notes" );
#endif /* def OOXTODO */
// EditingDuration is in seconds, TotalTime is in minutes.
- if (!bRemovePersonalInfo)
+ if (!bRemovePersonalInfo && !SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemoveEditingTimeInfo))
writeElement(pAppProps, XML_TotalTime, xProperties->getEditingDuration() / 60);
#ifdef OOXTODO
writeElement( pAppProps, XML_HiddenSlides, "hidden slides" );
diff --git a/sfx2/source/doc/objcont.cxx b/sfx2/source/doc/objcont.cxx
index 6aa790d22fc4..2da8f42a438d 100644
--- a/sfx2/source/doc/objcont.cxx
+++ b/sfx2/source/doc/objcont.cxx
@@ -236,8 +236,18 @@ void SfxObjectShell::UpdateDocInfoForSave()
::DateTime now( ::DateTime::SYSTEM );
xDocProps->setModificationDate( now.GetUNODateTime() );
xDocProps->setModifiedBy( aUserName );
- UpdateTime_Impl( xDocProps );
+ if (!SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemoveEditingTimeInfo))
+ UpdateTime_Impl( xDocProps );
}
+ // reset only editing time to zero if RemoveEditingTimeOnSaving is true
+ if (SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemoveEditingTimeInfo))
+ xDocProps->setEditingDuration(0);
+ }
+ else
+ {
+ // reset only editing time to zero if RemoveEditingTimeOnSaving is true
+ if (SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemoveEditingTimeInfo))
+ xDocProps->setEditingDuration(0);
}
}
diff --git a/sw/qa/extras/odfexport/odfexport4.cxx b/sw/qa/extras/odfexport/odfexport4.cxx
index ce5349cded29..0f39c4d1a440 100644
--- a/sw/qa/extras/odfexport/odfexport4.cxx
+++ b/sw/qa/extras/odfexport/odfexport4.cxx
@@ -129,6 +129,33 @@ CPPUNIT_TEST_FIXTURE(Test, testPersonalMetaData)
"/office:document-settings/office:settings/config:config-item-set[2]/"
"config:config-item[@config:name='PrinterSetup']",
0);
+
+ // Reset config change
+ officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(false, pBatch);
+ pBatch->commit();
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testRemoveOnlyEditTimeMetaData)
+{
+ // 1. Check we have the original edit time info
+ loadAndSave("personalmetadata.odt");
+ xmlDocUniquePtr pXmlDoc = parseExport(u"meta.xml"_ustr);
+ assertXPathContent(pXmlDoc, "/office:document-meta/office:meta/meta:editing-duration",
+ u"PT21M22S");
+
+ // Set config RemoveEditingTimeOnSaving to true
+ auto pBatch(comphelper::ConfigurationChanges::create());
+ officecfg::Office::Common::Security::Scripting::RemoveEditingTimeOnSaving::set(true, pBatch);
+ pBatch->commit();
+
+ // 2. Check edit time info is 0
+ loadAndSave("personalmetadata.odt");
+ pXmlDoc = parseExport(u"meta.xml"_ustr);
+ assertXPathContent(pXmlDoc, "/office:document-meta/office:meta/meta:editing-duration", u"P0D");
+
+ // Reset config change
+ officecfg::Office::Common::Security::Scripting::RemoveEditingTimeOnSaving::set(false, pBatch);
+ pBatch->commit();
}
CPPUNIT_TEST_FIXTURE(Test, tdf151100)
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
index fbca4c1b046b..36fa8fcf009c 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
@@ -810,6 +810,33 @@ CPPUNIT_TEST_FIXTURE(Test, testPersonalMetaData)
assertXPath(pCoreDoc, "/cp:coreProperties/cp:lastModifiedBy", 1);
assertXPath(pCoreDoc, "/cp:coreProperties/cp:lastPrinted", 1);
assertXPath(pCoreDoc, "/cp:coreProperties/cp:revision", 0);
+
+ // Reset config change
+ officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(false, pBatch);
+ officecfg::Office::Common::Security::Scripting::KeepDocUserInfoOnSaving::set(false, pBatch);
+ pBatch->commit();
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testRemoveOnlyEditTimeMetaData)
+{
+ // 1. Check we have the original edit time info
+ loadAndSave("personalmetadata.docx");
+ xmlDocUniquePtr pAppDoc = parseExport(u"docProps/app.xml"_ustr);
+ assertXPath(pAppDoc, "/extended-properties:Properties/extended-properties:TotalTime", 1);
+
+ // Set config RemoveEditingTimeOnSaving to true
+ auto pBatch(comphelper::ConfigurationChanges::create());
+ officecfg::Office::Common::Security::Scripting::RemoveEditingTimeOnSaving::set(true, pBatch);
+ pBatch->commit();
+
+ // 2. Check edit time info is removed
+ loadAndSave("personalmetadata.docx");
+ pAppDoc = parseExport(u"docProps/app.xml"_ustr);
+ assertXPath(pAppDoc, "/extended-properties:Properties/extended-properties:TotalTime", 0);
+
+ // Reset config change
+ officecfg::Office::Common::Security::Scripting::RemoveEditingTimeOnSaving::set(false, pBatch);
+ pBatch->commit();
}
DECLARE_OOXMLEXPORT_TEST(testTdf126533_noPageBitmap, "tdf126533_noPageBitmap.docx")
diff --git a/unotools/source/config/securityoptions.cxx b/unotools/source/config/securityoptions.cxx
index 19fa71b3beba..03fe5d5c0df4 100644
--- a/unotools/source/config/securityoptions.cxx
+++ b/unotools/source/config/securityoptions.cxx
@@ -317,6 +317,9 @@ bool IsOptionSet( EOption eOption )
case SvtSecurityOptions::EOption::DocWarnCreatePdf:
bSet = officecfg::Office::Common::Security::Scripting::WarnCreatePDF::get();
break;
+ case SvtSecurityOptions::EOption::DocWarnRemoveEditingTimeInfo:
+ bSet = officecfg::Office::Common::Security::Scripting::RemoveEditingTimeOnSaving::get();
+ break;
case SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo:
bSet = officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::get();
break;
@@ -373,6 +376,9 @@ void SetOption( EOption eOption, bool bValue )
case SvtSecurityOptions::EOption::DocWarnCreatePdf:
officecfg::Office::Common::Security::Scripting::WarnCreatePDF::set(bValue, xChanges);
break;
+ case SvtSecurityOptions::EOption::DocWarnRemoveEditingTimeInfo:
+ officecfg::Office::Common::Security::Scripting::RemoveEditingTimeOnSaving::set(bValue, xChanges);
+ break;
case SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo:
officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(bValue, xChanges);
break;
diff --git a/xmloff/source/meta/xmlmetae.cxx b/xmloff/source/meta/xmlmetae.cxx
index 608ba86de7da..db05f2923737 100644
--- a/xmloff/source/meta/xmlmetae.cxx
+++ b/xmloff/source/meta/xmlmetae.cxx
@@ -162,15 +162,15 @@ void SvXMLMetaExport::MExport_()
// editing duration
// property is a int32 (seconds)
- if (!bRemovePersonalInfo)
+ if (!bRemovePersonalInfo && !SvtSecurityOptions::IsOptionSet(SvtSecurityOptions::EOption::DocWarnRemoveEditingTimeInfo))
{
sal_Int32 secs = mxDocProps->getEditingDuration();
SvXMLElementExport aElem( mrExport,
- XML_NAMESPACE_META, XML_EDITING_DURATION,
- true, false );
+ XML_NAMESPACE_META, XML_EDITING_DURATION,
+ true, false );
OUStringBuffer buf;
::sax::Converter::convertDuration(buf, util::Duration(
- false, 0, 0, 0, secs/3600, (secs%3600)/60, secs%60, 0));
+ false, 0, 0, 0, secs/3600, (secs%3600)/60, secs%60, 0));
mrExport.Characters(buf.makeStringAndClear());
}