using System;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.Messaging;
using CMS.SettingsProvider;
using CMS.SiteProvider;
using CMS.UIControls;
using CMS.ExtendedControls;
using TimeZoneInfo = CMS.SiteProvider.TimeZoneInfo;
public partial class CMSModules_Messaging_Controls_ViewMessage : CMSUserControl
{
#region "Variables"
private MessageModeEnum mMessageMode = MessageModeEnum.Inbox;
protected MessageInfo mMessage = null;
protected UserInfo currentUserInfo = null;
protected UserInfo messageUserInfo = null;
private TimeZoneInfo usedTimeZone = null;
#endregion
#region "Public properties"
///
/// Messages placeholder
///
public override MessagesPlaceHolder MessagesPlaceHolder
{
get
{
return plcMess;
}
}
///
/// Indicates if control is used on live site.
///
public override bool IsLiveSite
{
get
{
return base.IsLiveSite;
}
set
{
plcMess.IsLiveSite = value;
base.IsLiveSite = value;
}
}
///
/// Message ID.
///
public int MessageId
{
get
{
return ValidationHelper.GetInteger(ViewState["MessageId"], 0);
}
set
{
ViewState["MessageId"] = value;
if (value <= 0)
{
mMessage = null;
}
}
}
///
/// Message.
///
public MessageInfo Message
{
get
{
if ((mMessage == null) && (MessageId > 0))
{
mMessage = MessageInfoProvider.GetMessageInfo(MessageId);
}
return mMessage;
}
set
{
mMessage = value;
if (mMessage != null)
{
ViewState["MessageId"] = mMessage.MessageID;
}
}
}
///
/// Message mode.
///
public MessageModeEnum MessageMode
{
get
{
return mMessageMode;
}
set
{
mMessageMode = value;
}
}
///
/// Information text.
///
public string InformationText
{
get
{
return ucMessageUserButtons.InformationText;
}
}
///
/// Error text.
///
public string ErrorText
{
get
{
return ucMessageUserButtons.ErrorText;
}
}
#endregion
#region "Page events"
///
/// Page load.
///
protected void Page_Load(object sender, EventArgs e)
{
// Message id is set, display message details
if (Message != null)
{
// Find postback invoker
string invokerName = Page.Request.Params.Get("__EVENTTARGET");
// If postback was caused by user buttons
if (invokerName.Contains(ucMessageUserButtons.UniqueID))
{
StopProcessing = false;
}
ReloadData();
}
}
#endregion
#region "Other methods"
public void ReloadData()
{
if (StopProcessing)
{
// Do nothing
ucMessageUserButtons.StopProcessing = true;
ucUserPicture.StopProcessing = true;
}
else
{
ucMessageUserButtons.StopProcessing = false;
ucUserPicture.StopProcessing = false;
if (Message != null)
{
// Get current user info
currentUserInfo = CMSContext.CurrentUser;
// Get message user info
if (MessageMode == MessageModeEnum.Inbox)
{
messageUserInfo = UserInfoProvider.GetUserInfo(Message.MessageSenderUserID);
}
else
{
messageUserInfo = UserInfoProvider.GetUserInfo(Message.MessageRecipientUserID);
}
// Display only to authorized user
if ((currentUserInfo.UserID == Message.MessageRecipientUserID) || (currentUserInfo.UserID == Message.MessageSenderUserID) || currentUserInfo.IsGlobalAdministrator)
{
pnlViewMessage.Visible = true;
lblDateCaption.Text = GetString("Messaging.Date");
lblSubjectCaption.Text = GetString("general.subject");
lblFromCaption.Text = (MessageMode == MessageModeEnum.Inbox) ? GetString("Messaging.From") : GetString("Messaging.To");
// Sender exists
if (messageUserInfo != null)
{
ucUserPicture.Visible = true;
ucUserPicture.UserID = messageUserInfo.UserID;
// Gravatar support
string avType = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSAvatarType");
if (avType == AvatarInfoProvider.USERCHOICE)
{
avType = messageUserInfo.UserSettings.UserAvatarType;
}
ucUserPicture.UserAvatarType = avType;
// Disable message user buttons on live site for hidden or disabled users
if (IsLiveSite && !currentUserInfo.IsGlobalAdministrator && (messageUserInfo.UserIsDisabledManually || messageUserInfo.UserIsHidden))
{
ucMessageUserButtons.RelatedUserId = 0;
}
else
{
ucMessageUserButtons.RelatedUserId = messageUserInfo.UserID;
}
lblFrom.Text = HTMLHelper.HTMLEncode(Functions.GetFormattedUserName(messageUserInfo.UserName, messageUserInfo.FullName, messageUserInfo.UserNickName, IsLiveSite));
}
else
{
ucMessageUserButtons.RelatedUserId = 0;
lblFrom.Text = HTMLHelper.HTMLEncode(Message.MessageSenderNickName);
}
string body = Message.MessageBody;
// Resolve macros
DiscussionMacroHelper dmh = new DiscussionMacroHelper();
body = dmh.ResolveMacros(body);
lblSubject.Text = HTMLHelper.HTMLEncodeLineBreaks(Message.MessageSubject);
if (IsLiveSite)
{
lblDate.Text = CMSContext.ConvertDateTime(Message.MessageSent, this).ToString();
}
else
{
lblDate.Text = TimeZoneHelper.GetCurrentTimeZoneDateTimeString(Message.MessageSent, currentUserInfo, CMSContext.CurrentSite, out usedTimeZone);
}
lblBody.Text = body;
}
}
else
{
ShowError(GetString("Messaging.MessageDoesntExist"));
}
}
}
#endregion
}