1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_cui.hxx" 26 27 // include --------------------------------------------------------------- 28 29 #define _SVX_OPTIMPROVE_CXX 30 31 #include <optimprove.hxx> 32 #include <dialmgr.hxx> 33 #include <vcl/msgbox.hxx> 34 35 #include "optimprove.hrc" 36 #include "helpid.hrc" 37 #include <cuires.hrc> 38 #include <svx/dialogs.hrc> 39 #include <com/sun/star/beans/PropertyValue.hpp> 40 #include <com/sun/star/lang/XComponent.hpp> 41 #include <com/sun/star/oooimprovement/XCore.hpp> 42 #include <com/sun/star/oooimprovement/XCoreController.hpp> 43 #include <com/sun/star/system/SystemShellExecute.hpp> 44 #include <com/sun/star/system/SystemShellExecuteFlags.hpp> 45 #include <com/sun/star/util/XStringSubstitution.hpp> 46 #include <comphelper/configurationhelper.hxx> 47 #include <comphelper/processfactory.hxx> 48 #include <comphelper/synchronousdispatch.hxx> 49 #include <comphelper/uieventslogger.hxx> 50 #include <tools/testtoolloader.hxx> 51 #include <osl/file.hxx> 52 53 #define C2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) 54 55 namespace beans = ::com::sun::star::beans; 56 namespace lang = ::com::sun::star::lang; 57 namespace uno = ::com::sun::star::uno; 58 namespace util = ::com::sun::star::util; 59 using namespace com::sun::star::system; 60 61 62 namespace 63 { 64 bool lcl_doesLogfileExist(const ::rtl::OUString& sLogPath) 65 { 66 ::rtl::OUString sLogFile( sLogPath ); 67 sLogFile += C2S("/Current.csv"); 68 ::osl::File aLogFile(sLogFile); 69 return aLogFile.open(osl_File_OpenFlag_Read) == ::osl::FileBase::E_None; 70 } 71 } 72 73 // class SvxImprovementOptionsPage --------------------------------------- 74 75 SvxImprovementOptionsPage::SvxImprovementOptionsPage( Window* pParent, const SfxItemSet& rSet ) : 76 77 SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_IMPROVEMENT ), rSet ), 78 79 m_aImproveFL ( this, CUI_RES( FL_IMPROVE ) ), 80 m_aInvitationFT ( this, CUI_RES( FT_INVITATION ) ), 81 m_aYesRB ( this, CUI_RES( RB_YES ) ), 82 m_aNoRB ( this, CUI_RES( RB_NO ) ), 83 m_aInfoFI ( this, CUI_RES( FI_INFO ) ), 84 m_aDataFL ( this, CUI_RES( FL_DATA ) ), 85 m_aNumberOfReportsFT ( this, CUI_RES( FT_NR_REPORTS ) ), 86 m_aNumberOfReportsValueFT ( this, CUI_RES( FT_NR_REPORTS_VALUE ) ), 87 m_aNumberOfActionsFT ( this, CUI_RES( FT_NR_ACTIONS ) ), 88 m_aNumberOfActionsValueFT ( this, CUI_RES( FT_NR_ACTIONS_VALUE ) ), 89 m_aShowDataPB ( this, CUI_RES( PB_SHOWDATA ) ), 90 91 m_sInfo ( CUI_RES( STR_INFO ) ), 92 m_sMoreInfo ( CUI_RES( STR_MOREINFO ) ) 93 94 { 95 FreeResource(); 96 97 m_aInfoFI.SetURL( C2S( "www.sun.com/privacy/" ) ); 98 m_aInfoFI.SetClickHdl( LINK( this, SvxImprovementOptionsPage, HandleHyperlink ) ); 99 m_aShowDataPB.SetClickHdl( LINK( this, SvxImprovementOptionsPage, HandleShowData ) ); 100 } 101 102 SvxImprovementOptionsPage::~SvxImprovementOptionsPage() 103 { 104 } 105 106 IMPL_LINK( SvxImprovementOptionsPage, HandleHyperlink, svt::FixedHyperlinkImage*, EMPTYARG ) 107 { 108 ::rtl::OUString sURL( m_aInfoFI.GetURL() ); 109 110 if ( sURL.getLength() > 0 ) 111 { 112 try 113 { 114 uno::Reference< XSystemShellExecute > xSystemShell( 115 com::sun::star::system::SystemShellExecute::create( 116 ::comphelper::getProcessComponentContext() ) ); 117 if ( xSystemShell.is() ) 118 { 119 xSystemShell->execute( 120 sURL, ::rtl::OUString(), SystemShellExecuteFlags::DEFAULTS ); 121 } 122 } 123 catch( const uno::Exception& e ) 124 { 125 OSL_TRACE( "Caught exception: %s\n thread terminated.\n", 126 rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() ); 127 } 128 } 129 130 return 0; 131 } 132 133 IMPL_LINK( SvxImprovementOptionsPage, HandleShowData, PushButton*, EMPTYARG ) 134 { 135 uno::Reference < uno::XInterface > xDesktop( ::comphelper::getProcessServiceFactory()->createInstance( 136 C2S("com.sun.star.frame.Desktop") ), uno::UNO_QUERY ); 137 if ( xDesktop.is() ) 138 { 139 ::rtl::OUString sLogFile( m_sLogPath ); 140 sLogFile += C2S("/Current.csv"); 141 uno::Sequence< beans::PropertyValue > aArgs(3); 142 aArgs[0].Name = ::rtl::OUString::createFromAscii("FilterName"); 143 aArgs[0].Value = uno::makeAny(::rtl::OUString::createFromAscii("Text - txt - csv (StarCalc)")); 144 aArgs[1].Name = ::rtl::OUString::createFromAscii("FilterOptions"); 145 aArgs[1].Value = uno::makeAny(::rtl::OUString::createFromAscii("44,34,12,1,")); 146 aArgs[2].Name = ::rtl::OUString::createFromAscii("ReadOnly"); 147 aArgs[2].Value = uno::makeAny(true); 148 149 uno::Reference< lang::XComponent > xDoc = ::comphelper::SynchronousDispatch::dispatch( 150 xDesktop, sLogFile, C2S("_default"), 0, aArgs ); 151 if ( xDoc.is() ) 152 { 153 dynamic_cast<Dialog*>(GetParent())->EndDialog( RET_CANCEL ); 154 return 1; 155 } 156 } 157 158 return 0; 159 } 160 161 SfxTabPage* SvxImprovementOptionsPage::Create( Window* pParent, const SfxItemSet& rSet ) 162 { 163 return new SvxImprovementOptionsPage( pParent, rSet ); 164 } 165 166 sal_Bool SvxImprovementOptionsPage::FillItemSet( SfxItemSet& /*rSet*/ ) 167 { 168 uno::Reference< lang::XMultiServiceFactory > xSMGR = ::comphelper::getProcessServiceFactory(); 169 uno::Reference< uno::XInterface > xConfig; 170 171 try 172 { 173 xConfig = ::comphelper::ConfigurationHelper::openConfig( 174 xSMGR, C2S("/org.openoffice.Office.OOoImprovement.Settings"), 175 ::comphelper::ConfigurationHelper::E_STANDARD ); 176 ::comphelper::ConfigurationHelper::writeRelativeKey( 177 xConfig, C2S("Participation"), C2S("ShowedInvitation"), uno::makeAny( true ) ); 178 ::comphelper::ConfigurationHelper::writeRelativeKey( 179 xConfig, C2S("Participation"), C2S("InvitationAccepted"), uno::makeAny( m_aYesRB.IsChecked() != sal_False ) ); 180 ::comphelper::ConfigurationHelper::flush( xConfig ); 181 // TODO: refactor 182 ::comphelper::UiEventsLogger::reinit(); 183 ::tools::InitTestToolLib(); 184 } 185 catch( uno::Exception& ) 186 { 187 } 188 189 return sal_False; 190 } 191 192 void SvxImprovementOptionsPage::Reset( const SfxItemSet& /*rSet*/ ) 193 { 194 uno::Reference< lang::XMultiServiceFactory > xSMGR = ::comphelper::getProcessServiceFactory(); 195 uno::Reference< com::sun::star::oooimprovement::XCore > xCore( 196 xSMGR->createInstance( C2S("com.sun.star.oooimprovement.Core") ), 197 uno::UNO_QUERY ); 198 uno::Reference< uno::XInterface > xConfig; 199 200 try 201 { 202 m_aNoRB.Check(); 203 xConfig = ::comphelper::ConfigurationHelper::openConfig( 204 xSMGR, C2S("/org.openoffice.Office.OOoImprovement.Settings"), 205 ::comphelper::ConfigurationHelper::E_READONLY ); 206 if ( xConfig.is() ) 207 { 208 bool bYesChecked = false; 209 uno::Any aAny = ::comphelper::ConfigurationHelper:: 210 readRelativeKey( xConfig, C2S("Participation"), C2S("ShowedInvitation") ); 211 if ( ( aAny >>= bYesChecked ) && bYesChecked ) 212 { 213 bool bTemp = false; 214 aAny = ::comphelper::ConfigurationHelper:: 215 readRelativeKey( xConfig, C2S("Participation"), C2S("InvitationAccepted") ); 216 if ( aAny >>= bTemp ) 217 { 218 bYesChecked &= bTemp; 219 if ( bYesChecked ) 220 m_aYesRB.Check(); 221 } 222 } 223 224 ::rtl::OUString sURL; 225 aAny = ::comphelper::ConfigurationHelper:: 226 readRelativeKey( xConfig, C2S("Participation"), C2S("HelpUrl") ); 227 if ( aAny >>= sURL ) 228 m_aInfoFI.SetURL( sURL ); 229 230 sal_Int32 nCount = 0; 231 aAny = ::comphelper::ConfigurationHelper:: 232 readRelativeKey( xConfig, C2S("Counters"), C2S("UploadedReports") ); 233 if ( aAny >>= nCount ) 234 m_aNumberOfReportsValueFT.SetText( String::CreateFromInt32( nCount ) ); 235 aAny = ::comphelper::ConfigurationHelper:: 236 readRelativeKey( xConfig, C2S("Counters"), C2S("LoggedEvents") ); 237 if ( aAny >>= nCount ) 238 { 239 if ( xCore.is() ) 240 nCount += xCore->getSessionLogEventCount(); 241 m_aNumberOfActionsValueFT.SetText( String::CreateFromInt32( nCount ) ); 242 } 243 244 ::rtl::OUString sPath; 245 aAny = ::comphelper::ConfigurationHelper::readDirectKey( 246 xSMGR, C2S("/org.openoffice.Office.Logging"), C2S("OOoImprovement"), 247 C2S("LogPath"), ::comphelper::ConfigurationHelper::E_READONLY ); 248 if ( aAny >>= sPath ) 249 { 250 uno::Reference< util::XStringSubstitution > xSubst( 251 xSMGR->createInstance( C2S("com.sun.star.util.PathSubstitution") ), 252 uno::UNO_QUERY ); 253 if ( xSubst.is() ) 254 sPath = xSubst->substituteVariables( sPath, sal_False ); 255 m_sLogPath = sPath; 256 m_aShowDataPB.Enable(lcl_doesLogfileExist(m_sLogPath)); 257 } 258 } 259 } 260 catch( uno::Exception& ) 261 { 262 m_aShowDataPB.Enable(false); 263 } 264 } 265 266