/*++ Copyright (c) 1994-2001 Microsoft Corporation Module Name : machsht.cpp Abstract: IIS Machine Property sheet classes Author: Ronald Meijer (ronaldm) Sergei Antonov (sergeia) Project: Internet Services Manager Revision History: --*/ #include "stdafx.h" #include "common.h" #include "inetprop.h" #include "InetMgrApp.h" #include "shts.h" #include "machsht.h" #include "mime.h" #include #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif #define new DEBUG_NEW // // CIISMachineSheet class // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< CIISMachineSheet::CIISMachineSheet( CComAuthInfo * pAuthInfo, LPCTSTR lpszMetaPath, CWnd * pParentWnd, LPARAM lParam, LPARAM lParamParent, UINT iSelectPage ) /*++ Routine Description: IIS Machine Property sheet constructor Arguments: CComAuthInfo * pAuthInfo : Authentication information LPCTSTR lpszMetPath : Metabase path CWnd * pParentWnd : Optional parent window LPARAM lParam : MMC Console parameter UINT iSelectPage : Initial page to be selected Return Value: N/A --*/ : CInetPropertySheet( pAuthInfo, lpszMetaPath, pParentWnd, lParam, lParamParent, iSelectPage ), m_ppropMachine(NULL) { } CIISMachineSheet::~CIISMachineSheet() { FreeConfigurationParameters(); } /* virtual */ HRESULT CIISMachineSheet::LoadConfigurationParameters() /*++ Routine Description: Load configuration parameters information Arguments: None Return Value: HRESULT --*/ { // // Load base values // CError err(CInetPropertySheet::LoadConfigurationParameters()); if (err.Failed()) { return err; } ASSERT(m_ppropMachine == NULL); m_ppropMachine = new CMachineProps(QueryAuthInfo()); if (!m_ppropMachine) { err = ERROR_NOT_ENOUGH_MEMORY; return err; } err = m_ppropMachine->LoadData(); if (err.Failed()) { return err; } return err; } /* virtual */ void CIISMachineSheet::FreeConfigurationParameters() { // // Free Base values // CInetPropertySheet::FreeConfigurationParameters(); ASSERT_PTR(m_ppropMachine); SAFE_DELETE(m_ppropMachine); } // // Message Map // BEGIN_MESSAGE_MAP(CIISMachineSheet, CInetPropertySheet) //{{AFX_MSG_MAP(CInetPropertySheet) //}}AFX_MSG_MAP END_MESSAGE_MAP() IMPLEMENT_DYNCREATE(CIISMachinePage, CInetPropertyPage) CIISMachinePage::CIISMachinePage( CIISMachineSheet * pSheet ) : CInetPropertyPage(CIISMachinePage::IDD, pSheet), m_ppropMimeTypes(NULL) { } CIISMachinePage::~CIISMachinePage() { } void CIISMachinePage::DoDataExchange( CDataExchange * pDX ) { CInetPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CIISMachinePage) DDX_Control(pDX, IDC_ENABLE_MB_EDIT, m_EnableMetabaseEdit); DDX_Check(pDX, IDC_ENABLE_MB_EDIT, m_fEnableMetabaseEdit); DDX_Control(pDX, IDC_WEBLOG_UTF8, m_UTF8Web); DDX_Check(pDX, IDC_WEBLOG_UTF8, m_fUTF8Web); //}}AFX_DATA_MAP } // // Message Map // BEGIN_MESSAGE_MAP(CIISMachinePage, CInetPropertyPage) //{{AFX_MSG_MAP(CIISMachinePage) ON_BN_CLICKED(IDC_ENABLE_MB_EDIT, OnCheckEnableEdit) ON_BN_CLICKED(IDC_WEBLOG_UTF8, OnCheckUTF8) ON_BN_CLICKED(IDC_BUTTON_FILE_TYPES, OnButtonFileTypes) //}}AFX_MSG_MAP END_MESSAGE_MAP() // // Message Handlers // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< /* virtual */ HRESULT CIISMachinePage::FetchLoadedValues() /*++ Routine Description: Move configuration data from sheet to dialog controls Arguments: None Return Value: HRESULT --*/ { CError err; BEGIN_META_MACHINE_READ(CIISMachineSheet) FETCH_MACHINE_DATA_FROM_SHEET(m_fEnableMetabaseEdit) FETCH_MACHINE_DATA_FROM_SHEET(m_fUTF8Web) END_META_MACHINE_READ(err); m_fUTF8Web_Init = m_fUTF8Web; CMetabasePath mime_path(FALSE, QueryMetaPath(), SZ_MBN_MIMEMAP); m_ppropMimeTypes = new CMimeTypes( QueryAuthInfo(), mime_path ); if (m_ppropMimeTypes) { err = m_ppropMimeTypes->LoadData(); if (err.Succeeded()) { m_strlMimeTypes = m_ppropMimeTypes->m_strlMimeTypes; } } else { err = ERROR_NOT_ENOUGH_MEMORY; } return err; } /* virtual */ HRESULT CIISMachinePage::SaveInfo() /*++ Routine Description: Save the information on this property page. --*/ { ASSERT(IsDirty()); CError err; BeginWaitCursor(); BEGIN_META_MACHINE_WRITE(CIISMachineSheet) STORE_MACHINE_DATA_ON_SHEET(m_fEnableMetabaseEdit) STORE_MACHINE_DATA_ON_SHEET(m_fUTF8Web) END_META_MACHINE_WRITE(err); if (m_fUTF8Web_Init != m_fUTF8Web) { GetSheet()->SetRestartRequired(TRUE, PROP_CHANGE_NO_UPDATE); m_fUTF8Web_Init = m_fUTF8Web; } if (err.Succeeded() && m_ppropMimeTypes) { m_ppropMimeTypes->m_strlMimeTypes = m_strlMimeTypes; err = m_ppropMimeTypes->WriteDirtyProps(); } EndWaitCursor(); return err; } BOOL CIISMachinePage::OnInitDialog() { CInetPropertyPage::OnInitDialog(); CError err; CIISMBNode * pMachine = (CIISMBNode *)GetSheet()->GetParameter(); ASSERT(pMachine != NULL); if (pMachine) { err = CheckForMetabaseAccess(METADATA_PERMISSION_READ,pMachine,TRUE); if (err.Succeeded()) { if ( GetSheet()->QueryMajorVersion() < VER_IISMAJORVERSION || GetSheet()->QueryMinorVersion() < VER_IISMINORVERSION ) { m_EnableMetabaseEdit.EnableWindow(FALSE); m_UTF8Web.EnableWindow(FALSE); } else { BOOL bWeb = FALSE; IConsoleNameSpace2 * pConsoleNameSpace = (IConsoleNameSpace2 *)pMachine->GetConsoleNameSpace(); if (!pMachine->IsExpanded()) { err = pConsoleNameSpace->Expand(pMachine->QueryScopeItem()); } HSCOPEITEM child = NULL; MMC_COOKIE cookie = 0; err = pConsoleNameSpace->GetChildItem(pMachine->QueryScopeItem(), (MMC_COOKIE *) &child, &cookie); while (err.Succeeded()) { CIISService * pService = (CIISService *)cookie; ASSERT(pService != NULL); if (0 == _tcsicmp(pService->GetNodeName(), SZ_MBN_WEB)) { bWeb = TRUE; } err = pConsoleNameSpace->GetNextItem(child, &child, (MMC_COOKIE *) &cookie); } m_UTF8Web.EnableWindow(bWeb); } return TRUE; } else { return FALSE; } } else { return FALSE; } } void CIISMachinePage::OnCheckEnableEdit() { SetModified(TRUE); } void CIISMachinePage::OnCheckUTF8() { SetModified(TRUE); } void CIISMachinePage::OnButtonFileTypes() /*++ Routine Description: 'file types' button handler Arguments: None Return Value: None --*/ { CMimeDlg dlg(m_strlMimeTypes, this); if (dlg.DoModal() == IDOK) { SetModified(TRUE); } }