diff options
-rw-r--r-- | sfx2/source/view/classificationhelper.cxx | 68 |
1 files changed, 50 insertions, 18 deletions
diff --git a/sfx2/source/view/classificationhelper.cxx b/sfx2/source/view/classificationhelper.cxx index f086ade5ed00..349c33749ce9 100644 --- a/sfx2/source/view/classificationhelper.cxx +++ b/sfx2/source/view/classificationhelper.cxx @@ -29,7 +29,8 @@ #include <sfx2/sfx.hrc> #include <sfx2/sfxresid.hxx> #include <sfx2/viewfrm.hxx> -#include <officecfg/Office/Common.hxx> +#include <tools/datetime.hxx> +#include <unotools/datetime.hxx> #include <config_folders.h> using namespace com::sun::star; @@ -37,6 +38,24 @@ using namespace com::sun::star; namespace { +const OUString& PROP_BACNAME() +{ + static OUString sProp("urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Name"); + return sProp; +} + +const OUString& PROP_STARTVALIDITY() +{ + static OUString sProp("urn:bails:IntellectualProperty:Authorization:StartValidity"); + return sProp; +} + +const OUString& PROP_NONE() +{ + static OUString sProp("None"); + return sProp; +} + /// Represents one category of a classification policy. class SfxClassificationCategory { @@ -151,15 +170,15 @@ throw (xml::sax::SAXException, uno::RuntimeException, std::exception) rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Identifier"] = aIdentifier; // Also initialize defaults. - rCategory.m_aLabels["urn:bails:IntellectualProperty:PolicyAuthority:Identifier"] = "None"; - rCategory.m_aLabels["urn:bails:IntellectualProperty:PolicyAuthority:Country"] = "None"; - rCategory.m_aLabels["urn:bails:IntellectualProperty:Policy:Identifier"] = "None"; - rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorization:Name"] = "None"; - rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorization:Locator"] = "None"; - rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Identifier:OID"] = "None"; - rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Locator"] = "None"; - rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorization:Locator"] = "None"; - rCategory.m_aLabels["urn:bails:IntellectualProperty:MarkingPrecedence"] = "None"; + rCategory.m_aLabels["urn:bails:IntellectualProperty:PolicyAuthority:Identifier"] = PROP_NONE(); + rCategory.m_aLabels["urn:bails:IntellectualProperty:PolicyAuthority:Country"] = PROP_NONE(); + rCategory.m_aLabels["urn:bails:IntellectualProperty:Policy:Identifier"] = PROP_NONE(); + rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorization:Name"] = PROP_NONE(); + rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorization:Locator"] = PROP_NONE(); + rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Identifier:OID"] = PROP_NONE(); + rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Locator"] = PROP_NONE(); + rCategory.m_aLabels["urn:bails:IntellectualProperty:BusinessAuthorization:Locator"] = PROP_NONE(); + rCategory.m_aLabels["urn:bails:IntellectualProperty:MarkingPrecedence"] = PROP_NONE(); rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-summary"].clear(); rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-warning-statement"].clear(); rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:general-warning-statement:ext:2"].clear(); @@ -176,8 +195,8 @@ throw (xml::sax::SAXException, uno::RuntimeException, std::exception) rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:email-last-line-of-text"].clear(); rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:email-subject-prefix"].clear(); rCategory.m_aLabels["urn:bails:IntellectualProperty:Marking:email-subject-suffix"].clear(); - rCategory.m_aLabels["urn:bails:IntellectualProperty:Authorization:StartValidity"] = "None"; - rCategory.m_aLabels["urn:bails:IntellectualProperty:Authorization:StopValidity"] = "None"; + rCategory.m_aLabels[PROP_STARTVALIDITY()] = PROP_NONE(); + rCategory.m_aLabels["urn:bails:IntellectualProperty:Authorization:StopValidity"] = PROP_NONE(); m_pCategory = &rCategory; } } @@ -280,12 +299,6 @@ void SAL_CALL SfxClassificationParser::setDocumentLocator(const uno::Reference<x { } -const OUString& PROP_BACNAME() -{ - static OUString sProp("urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Name"); - return sProp; -} - } // anonymous namespace /// Implementation details of SfxClassificationHelper. @@ -301,6 +314,8 @@ public: void parsePolicy(); /// Synchronize m_aLabels back to the object shell. void pushToObjectShell(); + /// Set the classification start date to the system time. + void setStartValidity(); }; SfxClassificationHelper::Impl::Impl(SfxObjectShell& rObjectShell) @@ -341,6 +356,21 @@ bool lcl_containsProperty(const uno::Sequence<beans::Property>& rProperties, con }) != rProperties.end(); } +void SfxClassificationHelper::Impl::setStartValidity() +{ + std::map<OUString, OUString>::iterator it = m_aCategory.m_aLabels.find(PROP_STARTVALIDITY()); + if (it != m_aCategory.m_aLabels.end()) + { + if (it->second == PROP_NONE()) + { + // The policy left the start date unchanged, replace it with the system time. + util::DateTime aDateTime = DateTime(DateTime::SYSTEM).GetUNODateTime(); + OUStringBuffer aBuffer = utl::toISO8601(aDateTime); + it->second = aBuffer.toString(); + } + } +} + void SfxClassificationHelper::Impl::pushToObjectShell() { uno::Reference<document::XDocumentProperties> xDocumentProperties = m_rObjectShell.getDocProperties(); @@ -538,6 +568,8 @@ void SfxClassificationHelper::SetBACName(const OUString& rName) } m_pImpl->m_aCategory = *it; + + m_pImpl->setStartValidity(); m_pImpl->pushToObjectShell(); SfxViewFrame* pViewFrame = SfxViewFrame::Current(); if (!pViewFrame) |