using System;
using System.Collections;
using CMS.CMSHelper;
using CMS.Community;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.ExtendedControls;
using CMS.SiteProvider;
public partial class CMSModules_Friends_Controls_Friends_Request : FriendsActionControl
{
#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
{
base.IsLiveSite = value;
selectUser.IsLiveSite = value;
plcMess.IsLiveSite = value;
}
}
#endregion
#region "Methods"
protected void Page_Load(object sender, EventArgs e)
{
// Set user id
UserID = QueryHelper.GetInteger("userid", 0);
RequestedUserID = QueryHelper.GetInteger("requestid", 0);
int siteId = QueryHelper.GetInteger("siteid", -1);
if (RequestedUserID != 0)
{
plcUserSelect.Visible = false;
}
bool isGlobalAdmin = CMSContext.CurrentUser.IsGlobalAdministrator;
RedirectIfRequestIsInvalid(UserID, RequestedUserID);
// Show site filter for global admin only in sitemanager
selectUser.ShowSiteFilter = ((siteId == 0) && isGlobalAdmin);
selectUser.WhereCondition = "UserName NOT LIKE N'public'";
if (IsLiveSite && !isGlobalAdmin)
{
selectUser.HideDisabledUsers = true;
selectUser.HideHiddenUsers = true;
selectUser.HideNonApprovedUsers = true;
}
// Enable automatic approval
plcAdministrator.Visible = CanApprove();
if (!ModuleEntry.IsModuleLoaded(ModuleEntry.MESSAGING))
{
chkSendMessage.Visible = false;
chkSendMessage.Checked = false;
}
}
///
/// Formats username of sender and recipients.
///
public override string GetFormattedUserName(string userName, string fullName, string nickName)
{
return Functions.GetFormattedUserName(userName, fullName, nickName, IsLiveSite);
}
///
/// Redirects user to an AccessDenied Page with proper error message if
/// request parameters are not correct.
///
/// ID of the user, sending the request.
/// ID of th recepient of the request.
private void RedirectIfRequestIsInvalid(int userID, int requestID)
{
string message = VerifyRequestParameters(userID, requestID);
if (!String.IsNullOrEmpty(message))
{
UseCMSDeskAccessDeniedPage = !IsLiveSite;
RedirectToAccessDenied(message);
}
}
///
/// Verifies request parameters and generates a proper erroe message if
/// request parameters are not correct.
///
/// ID of the user, sending the request.
/// ID of th recepient of the request.
private string VerifyRequestParameters(int userID, int requestID)
{
UserInfo requestedUser = null;
if (requestID > 0)
{
requestedUser = UserInfoProvider.GetUserInfo(requestID);
}
UserInfo requestingUser = UserInfoProvider.GetUserInfo(userID);
if (((requestedUser == null) && (requestID != 0)) || (requestingUser == null))
{
return GetString("user.error_doesnoteexist");
}
string errMsg = VerifyRequestedUser(requestedUser) ?? VerifyRequestingUser(requestingUser);
return errMsg;
}
///
/// Verifies whether current user has permissions to create a friend-request on behalf of
///
/// User on behalf of which the friend request is attempted.
/// Error message if there is an error. Null otherwise.
private string VerifyRequestingUser(UserInfo requestingUser)
{
if (!currentUser.IsGlobalAdministrator)
{
if (CanApprove())
{
if (!requestingUser.IsInSite(CMSContext.CurrentSiteName))
{
return GetString("user.error_doesnoteexist");
}
}
else if (requestingUser.UserID != currentUser.UserID)
{
return GetString("friends.error_permission_createfriendsonbehalf");
}
}
return null;
}
///
/// Verifies whether current user has permissions to send a friend-request to
///
/// User to which the friend request is being sent.
/// Error message if there is an error. Null otherwise.
private string VerifyRequestedUser(UserInfo requestedUser)
{
if (!currentUser.IsGlobalAdministrator && (requestedUser != null))
{
if (!requestedUser.IsInSite(CMSContext.CurrentSiteName)
|| (requestedUser.UserIsHidden)
|| (!requestedUser.Enabled)
|| (requestedUser.UserSettings.UserWaitingForApproval))
{
return GetString("user.error_doesnoteexist");
}
}
return null;
}
#endregion
#region "Button handling"
protected void btnRequest_Click(object senderObject, EventArgs e)
{
RaiseOnCheckPermissions(PERMISSION_MANAGE, this);
string message = string.Empty;
// Requested user id not set explicitly
if (RequestedUserID == 0)
{
RequestedUserID = ValidationHelper.GetInteger(selectUser.Value, 0);
}
// Both users have to be specified
if ((RequestedUserID == 0) || (UserID == 0))
{
message = GetString("friends.friendrequired");
}
else
{
UserInfo requestedUser = UserInfoProvider.GetUserInfo(RequestedUserID);
message = requestedUser == null ? GetString("user.error_doesnoteexist") : VerifyRequestedUser(requestedUser);
if (String.IsNullOrEmpty(message))
{
if (!FriendInfoProvider.FriendshipExists(UserID, RequestedUserID))
{
// Set up control
Comment = txtComment.Text;
SendMail = chkSendEmail.Checked;
SendMessage = chkSendMessage.Checked;
SelectedFriends = new ArrayList();
SelectedFriends.Add(RequestedUserID);
AutomaticApprovment = chkAutomaticApprove.Checked;
message = PerformAction(FriendsActionEnum.Request);
}
else
{
message = GetString("friends.friendshipexists");
}
}
}
if (!String.IsNullOrEmpty(message))
{
ShowError(message);
}
else
{
// Register wopener script
ScriptHelper.RegisterWOpenerScript(Page);
btnRequest.Enabled = false;
selectUser.Enabled = false;
txtComment.Enabled = false;
chkAutomaticApprove.Enabled = false;
chkSendEmail.Enabled = false;
chkSendMessage.Enabled = false;
btnCancel.ResourceString = "general.close";
ShowConfirmation(GetString("friends.friendshiprequested"));
btnCancel.OnClientClick = "if((wopener != null) && (wopener.refreshList != null)){wopener.refreshList();}CloseDialog();return false;";
}
}
#endregion
}