// svcprop1.cpp : implementation file
//

#include "stdafx.h"
#include "compdata.h"
#include "resource.h"
#include "shrpub.h"
#include "mvedit.h"
#include "filesvc.h"
#include "dataobj.h" // CFileMgmtDataObject::m_CFMachineName

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSharePagePublish property page

IMPLEMENT_DYNCREATE(CSharePagePublish, CSharePage)

CSharePagePublish::CSharePagePublish() : 
  CSharePage(CSharePagePublish::IDD)
{
  m_bExposeKeywords = TRUE;
  m_bExposeManagedBy = TRUE;

  //{{AFX_DATA_INIT(CSharePagePublish)
  m_iPublish = BST_UNCHECKED;
  //}}AFX_DATA_INIT
}

CSharePagePublish::~CSharePagePublish()
{
    m_handle = NULL; // let General page call MMCFreeNotifyHandle
}

BOOL CSharePagePublish::Load( CFileMgmtComponentData* pFileMgmtData, LPDATAOBJECT piDataObject )
{
  if ( FALSE == CSharePage::Load (pFileMgmtData, piDataObject) )
      return FALSE;

  if (FILEMGMT_SMB != m_transport)
      return FALSE;

  return TRUE;
}

void CSharePagePublish::DoDataExchange(CDataExchange* pDX)
{
  CSharePage::DoDataExchange(pDX);
  //{{AFX_DATA_MAP(CSharePagePublish)
  DDX_Check(pDX, IDC_CHECK_SHRPUB_PUBLISH, m_iPublish);

  DDX_Text(pDX, IDC_STATIC_SHRPUB_ERRORMSG, m_strError);
  DDX_Text(pDX, IDC_EDIT_SHRPUB_UNCPATH, m_strUNCPath);
  DDX_Text(pDX, IDC_EDIT_SHRPUB_DESCRIPTION, m_strDescription);
  DDX_Text(pDX, IDC_EDIT_SHRPUB_KEYWORDS, m_strKeywords);
  DDX_Text(pDX, IDC_EDIT_SHRPUB_MANAGEDBY, m_strManagedBy);
  DDV_MaxChars(pDX, m_strDescription, 1024);  // AD schema defines its upper to be 1024
  //}}AFX_DATA_MAP
  if ( !pDX->m_bSaveAndValidate )
  {
    if (BST_CHECKED != m_iPublish)
    {
      GetDlgItem(IDC_LABEL_SHRPUB_UNCPATH)->EnableWindow(FALSE);
      GetDlgItem(IDC_EDIT_SHRPUB_UNCPATH)->EnableWindow(FALSE);
      GetDlgItem(IDC_LABEL_SHRPUB_DESCRIPTION)->EnableWindow(FALSE);
      GetDlgItem(IDC_EDIT_SHRPUB_DESCRIPTION)->EnableWindow(FALSE);
      GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
      GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
      GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
      GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
      GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->EnableWindow(FALSE);
    }
  }
} // CSharePagePublish::DoDataExchange()



BEGIN_MESSAGE_MAP(CSharePagePublish, CSharePage)
  //{{AFX_MSG_MAP(CSharePagePublish)
  ON_MESSAGE(WM_HELP, OnHelp)
  ON_MESSAGE(WM_CONTEXTMENU, OnContextHelp)
  ON_EN_CHANGE(IDC_EDIT_SHRPUB_DESCRIPTION, OnChangeEditDescription)
  ON_BN_CLICKED(IDC_BUTTON_SHRPUB_CHANGE, OnChangeKeywords)
  ON_EN_CHANGE(IDC_EDIT_SHRPUB_MANAGEDBY, OnChangeEditManagedBy)
  ON_BN_CLICKED(IDC_CHECK_SHRPUB_PUBLISH, OnShrpubPublish)
  //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSharePagePublish message handlers
#define MAX_RDN_KEY_SIZE            64   // ds\src\inc\ntdsa.h

BOOL CSharePagePublish::OnInitDialog()
{
    BOOL bPublish = FALSE;
    HRESULT hr = S_OK;

    BOOL bLongShareName = (lstrlen(m_strShareName) > MAX_RDN_KEY_SIZE);
    if (!bLongShareName)
        m_pFileMgmtData->GetFileServiceProvider(FILEMGMT_SMB)->ReadSharePublishInfo(
                                        m_strMachineName,
                                        m_strShareName,
                                        &bPublish,
                                        m_strUNCPath,
                                        m_strDescription,
                                        m_strKeywords,
                                        m_strManagedBy
                                        );
    if (bLongShareName || FAILED(hr))
    {
        if (bLongShareName)
        {
            (void) GetMsg(m_strError, 0, IDS_MSG_SHRPUB_ERRMSG_64);
        } else
        {
            (void) GetMsg(m_strError, hr, IDS_MSG_READ_SHRPUB, m_strShareName);
        }

        //
        // show errmsg, hide all the other controls
        //
        GetDlgItem(IDC_CHECK_SHRPUB_PUBLISH)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_CHECK_SHRPUB_PUBLISH)->EnableWindow(FALSE);

        GetDlgItem(IDC_LABEL_SHRPUB_UNCPATH)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_LABEL_SHRPUB_UNCPATH)->EnableWindow(FALSE);
        GetDlgItem(IDC_EDIT_SHRPUB_UNCPATH)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_EDIT_SHRPUB_UNCPATH)->EnableWindow(FALSE);
        GetDlgItem(IDC_LABEL_SHRPUB_DESCRIPTION)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_LABEL_SHRPUB_DESCRIPTION)->EnableWindow(FALSE);
        GetDlgItem(IDC_EDIT_SHRPUB_DESCRIPTION)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_EDIT_SHRPUB_DESCRIPTION)->EnableWindow(FALSE);
        GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
        GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
        GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->EnableWindow(FALSE);
        GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
        GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
    } else
    {
        GetDlgItem(IDC_STATIC_SHRPUB_ERRORMSG)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_STATIC_SHRPUB_ERRORMSG)->EnableWindow(FALSE);

        if (!m_bExposeKeywords)
        {
            GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->ShowWindow(SW_HIDE);
            GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
            GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->ShowWindow(SW_HIDE);
            GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
            GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->ShowWindow(SW_HIDE);
            GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->EnableWindow(FALSE);
        }

        if (!m_bExposeManagedBy)
        {
            GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->ShowWindow(SW_HIDE);
            GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
            GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->ShowWindow(SW_HIDE);
            GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
        }

        if (!bPublish)
        {
            if (m_strMachineName.Left(2) == _T("\\\\"))
            {
                m_strUNCPath = m_strMachineName;
            } else
            {
                m_strUNCPath = _T("\\\\");
                m_strUNCPath += m_strMachineName;
            }
            m_strUNCPath += _T("\\");
            m_strUNCPath += m_strShareName;
        }

        m_iPublish = (bPublish ? BST_CHECKED : BST_UNCHECKED);
    }

    return CSharePage::OnInitDialog();
}

/////////////////////////////////////////////////////////////////////
//  Help
BOOL CSharePagePublish::OnHelp(WPARAM /*wParam*/, LPARAM lParam)
{
  return DoHelp(lParam, HELP_DIALOG_TOPIC(IDD_SHAREPROP_PUBLISH));
}

BOOL CSharePagePublish::OnContextHelp(WPARAM wParam, LPARAM /*lParam*/)
{
  return DoContextHelp(wParam, HELP_DIALOG_TOPIC(IDD_SHAREPROP_PUBLISH));
}

BOOL CSharePagePublish::OnApply()
{  
  if ( IsModified () )
  {
    ASSERT(NULL != m_pFileMgmtData);
    // UpdateData (TRUE) has already been called by OnKillActive () just before OnApply ()

    HRESULT hr =
      m_pFileMgmtData->GetFileServiceProvider(FILEMGMT_SMB)->WriteSharePublishInfo(
                                        m_strMachineName,
                                        m_strShareName,
                                        (BST_CHECKED==m_iPublish),
                                        m_strDescription,
                                        m_strKeywords,
                                        m_strManagedBy);
    if (FAILED(hr))
    {
      DoErrMsgBox(m_hWnd, MB_OK | MB_ICONEXCLAMATION, hr, IDS_POPUP_WRITE_SHRPUB, m_strShareName);
      return FALSE;
    }
  }

  return CSharePage::OnApply();
}

void CSharePagePublish::OnChangeEditDescription() 
{
  SetModified (TRUE);
}

#define KEYTWORDS_UPPER_RANGER  256

void CSharePagePublish::OnChangeKeywords() 
{
    if (S_OK == InvokeMultiValuedStringEditDlg(
                                this,
                                m_strKeywords,
                                _T(";"), 
                                IDS_MVSTRINGEDIT_TITLE_KEYWORDS,
                                IDS_MVSTRINGEDIT_TEXT_KEYWORDS,
                                KEYTWORDS_UPPER_RANGER))
    {
        SetDlgItemText(IDC_EDIT_SHRPUB_KEYWORDS, m_strKeywords);
        SetModified (TRUE);
    }
}

void CSharePagePublish::OnChangeEditManagedBy() 
{
  SetModified (TRUE);
}

void CSharePagePublish::OnShrpubPublish() 
{
  BOOL bPublish = (BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_SHRPUB_PUBLISH));

  GetDlgItem(IDC_LABEL_SHRPUB_UNCPATH)->EnableWindow(bPublish);
  GetDlgItem(IDC_EDIT_SHRPUB_UNCPATH)->EnableWindow(bPublish);
  GetDlgItem(IDC_LABEL_SHRPUB_DESCRIPTION)->EnableWindow(bPublish);
  GetDlgItem(IDC_EDIT_SHRPUB_DESCRIPTION)->EnableWindow(bPublish);
  GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->EnableWindow(bPublish);
  GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->EnableWindow(bPublish);
  GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->EnableWindow(bPublish);
  GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->EnableWindow(bPublish);
  GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->EnableWindow(bPublish);

  SetModified (TRUE);
}