This commit is contained in:
Virtuworks 2012-11-25 20:19:58 -05:00
commit 89f1cb7e39
94 changed files with 1352 additions and 431 deletions

View file

@ -577,9 +577,9 @@ ALTER TABLE [dbo].[ExchangeAccounts] ADD
END
GO
IF NOT EXISTS(SELECT * FROM [dbo].[ExchangeAccounts] WHERE UserPrincipalName IS NOT NULL)
IF NOT EXISTS(SELECT 1 FROM [dbo].[ExchangeAccounts] WHERE UserPrincipalName IS NOT NULL)
BEGIN
UPDATE [dbo].[ExchangeAccounts] SET [UserPrincipalName] = PrimaryEmailAddress
UPDATE [dbo].[ExchangeAccounts] SET [UserPrincipalName] = PrimaryEmailAddress WHERE AccountType IN (1,7)
END
GO
@ -6924,13 +6924,76 @@ AS
UPDATE LyncUsers SET
SipAddress = @SipAddress
WHERE
AccountID = @AccountID AND AccountType IN (1,7)
AccountID = @AccountID
RETURN'
END
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'CheckDomainUsedByHostedOrganization')
BEGIN
EXEC sp_executesql N'CREATE PROCEDURE [dbo].[CheckDomainUsedByHostedOrganization]
@DomainName nvarchar(100),
@Result int OUTPUT
AS
SET @Result = 0
IF EXISTS(SELECT 1 FROM ExchangeAccounts WHERE UserPrincipalName LIKE ''%@''+ @DomainName)
BEGIN
SET @Result = 1
END
ELSE
IF EXISTS(SELECT 1 FROM ExchangeAccountEmailAddresses WHERE EmailAddress LIKE ''%@''+ @DomainName)
BEGIN
SET @Result = 1
END
ELSE
IF EXISTS(SELECT 1 FROM LyncUsers WHERE SipAddress LIKE ''%@''+ @DomainName)
BEGIN
SET @Result = 1
END
RETURN @Result'
END
GO
IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedSolution.AllowChangeUPN')
BEGIN
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (230, 13, 4, N'HostedSolution.AllowChangeUPN', N'Allow to Change UserPrincipalName', 1, 0, NULL)
END
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'UpdateExchangeAccountUserPrincipalName')
BEGIN
EXEC sp_executesql N' CREATE PROCEDURE [dbo].[UpdateExchangeAccountUserPrincipalName]
(
@AccountID int,
@UserPrincipalName nvarchar(300)
)
AS
UPDATE ExchangeAccounts SET
UserPrincipalName = @UserPrincipalName
WHERE
AccountID = @AccountID
RETURN'
END
GO
IF NOT EXISTS (SELECT 1 FROM LyncUsers WHERE SipAddress IS NOT NULL)
BEGIN
UPDATE LyncUsers SET SipAddress=EA.PrimaryEmailAddress FROM ExchangeAccounts AS EA WHERE LyncUsers.SipAddress IS NULL AND LyncUsers.AccountID = EA.AccountID
END
GO
-- Version 2.1 section
IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Hosted Microsoft Exchange Server 2013')
BEGIN

View file

@ -36,6 +36,7 @@ namespace WebsitePanel.EnterpriseServer
{
string emailAddress;
bool isPrimary;
bool iSuserPrincipalName;
public string EmailAddress
{
@ -48,5 +49,12 @@ namespace WebsitePanel.EnterpriseServer
get { return this.isPrimary; }
set { this.isPrimary = value; }
}
public bool IsUserPrincipalName
{
get { return iSuserPrincipalName; }
set { iSuserPrincipalName = value; }
}
}
}

View file

@ -150,6 +150,7 @@ order by rg.groupOrder
public const string ORGANIZATIONS = "HostedSolution.Organizations";
public const string ORGANIZATION_USERS = "HostedSolution.Users";
public const string ORGANIZATION_DOMAINS = "HostedSolution.Domains";
public const string ORGANIZATION_ALLOWCHANGEUPN = "HostedSolution.AllowChangeUPN";
public const string CRM_USERS = "HostedCRM.Users";
public const string CRM_ORGANIZATION = "HostedCRM.Organization";

View file

@ -29,7 +29,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.6387
// Runtime Version:2.0.50727.6400
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -54,7 +54,6 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
using WebsitePanel.Providers.ResultObjects;
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
@ -104,6 +103,10 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
private System.Threading.SendOrPostCallback SetUserGeneralSettingsOperationCompleted;
private System.Threading.SendOrPostCallback SetUserPrincipalNameOperationCompleted;
private System.Threading.SendOrPostCallback SetUserPasswordOperationCompleted;
private System.Threading.SendOrPostCallback SearchAccountsOperationCompleted;
private System.Threading.SendOrPostCallback DeleteUserOperationCompleted;
@ -175,6 +178,12 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
/// <remarks/>
public event SetUserGeneralSettingsCompletedEventHandler SetUserGeneralSettingsCompleted;
/// <remarks/>
public event SetUserPrincipalNameCompletedEventHandler SetUserPrincipalNameCompleted;
/// <remarks/>
public event SetUserPasswordCompletedEventHandler SetUserPasswordCompleted;
/// <remarks/>
public event SearchAccountsCompletedEventHandler SearchAccountsCompleted;
@ -1336,6 +1345,103 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/SetUserPrincipalName", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int SetUserPrincipalName(int itemId, int accountId, string userPrincipalName, bool inherit) {
object[] results = this.Invoke("SetUserPrincipalName", new object[] {
itemId,
accountId,
userPrincipalName,
inherit});
return ((int)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginSetUserPrincipalName(int itemId, int accountId, string userPrincipalName, bool inherit, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("SetUserPrincipalName", new object[] {
itemId,
accountId,
userPrincipalName,
inherit}, callback, asyncState);
}
/// <remarks/>
public int EndSetUserPrincipalName(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((int)(results[0]));
}
/// <remarks/>
public void SetUserPrincipalNameAsync(int itemId, int accountId, string userPrincipalName, bool inherit) {
this.SetUserPrincipalNameAsync(itemId, accountId, userPrincipalName, inherit, null);
}
/// <remarks/>
public void SetUserPrincipalNameAsync(int itemId, int accountId, string userPrincipalName, bool inherit, object userState) {
if ((this.SetUserPrincipalNameOperationCompleted == null)) {
this.SetUserPrincipalNameOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetUserPrincipalNameOperationCompleted);
}
this.InvokeAsync("SetUserPrincipalName", new object[] {
itemId,
accountId,
userPrincipalName,
inherit}, this.SetUserPrincipalNameOperationCompleted, userState);
}
private void OnSetUserPrincipalNameOperationCompleted(object arg) {
if ((this.SetUserPrincipalNameCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.SetUserPrincipalNameCompleted(this, new SetUserPrincipalNameCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/SetUserPassword", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int SetUserPassword(int itemId, int accountId, string password) {
object[] results = this.Invoke("SetUserPassword", new object[] {
itemId,
accountId,
password});
return ((int)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginSetUserPassword(int itemId, int accountId, string password, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("SetUserPassword", new object[] {
itemId,
accountId,
password}, callback, asyncState);
}
/// <remarks/>
public int EndSetUserPassword(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((int)(results[0]));
}
/// <remarks/>
public void SetUserPasswordAsync(int itemId, int accountId, string password) {
this.SetUserPasswordAsync(itemId, accountId, password, null);
}
/// <remarks/>
public void SetUserPasswordAsync(int itemId, int accountId, string password, object userState) {
if ((this.SetUserPasswordOperationCompleted == null)) {
this.SetUserPasswordOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetUserPasswordOperationCompleted);
}
this.InvokeAsync("SetUserPassword", new object[] {
itemId,
accountId,
password}, this.SetUserPasswordOperationCompleted, userState);
}
private void OnSetUserPasswordOperationCompleted(object arg) {
if ((this.SetUserPasswordCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.SetUserPasswordCompleted(this, new SetUserPasswordCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/SearchAccounts", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public OrganizationUser[] SearchAccounts(int itemId, string filterColumn, string filterValue, string sortColumn, bool includeMailboxes) {
@ -2000,6 +2106,58 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void SetUserPrincipalNameCompletedEventHandler(object sender, SetUserPrincipalNameCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class SetUserPrincipalNameCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal SetUserPrincipalNameCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public int Result {
get {
this.RaiseExceptionIfNecessary();
return ((int)(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void SetUserPasswordCompletedEventHandler(object sender, SetUserPasswordCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class SetUserPasswordCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal SetUserPasswordCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public int Result {
get {
this.RaiseExceptionIfNecessary();
return ((int)(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void SearchAccountsCompletedEventHandler(object sender, SearchAccountsCompletedEventArgs e);

View file

@ -829,6 +829,22 @@ namespace WebsitePanel.EnterpriseServer
return Convert.ToInt32(prmId.Value);
}
public static int CheckDomainUsedByHostedOrganization(string domainName)
{
SqlParameter prmId = new SqlParameter("@Result", SqlDbType.Int);
prmId.Direction = ParameterDirection.Output;
SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "CheckDomainUsedByHostedOrganization",
prmId,
new SqlParameter("@domainName", domainName));
return Convert.ToInt32(prmId.Value);
}
public static int AddDomain(int actorId, int packageId, int zoneItemId, string domainName,
bool hostingAllowed, int webSiteId, int mailDomainId, bool isSubDomain, bool isInstantAlias, bool isDomainPointer)
{
@ -2338,6 +2354,16 @@ namespace WebsitePanel.EnterpriseServer
);
}
public static void UpdateExchangeAccountUserPrincipalName(int accountId, string userPrincipalName)
{
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"UpdateExchangeAccountUserPrincipalName",
new SqlParameter("@AccountID", accountId),
new SqlParameter("@UserPrincipalName", userPrincipalName));
}
public static IDataReader GetExchangeAccount(int itemId, int accountId)
{
return SqlHelper.ExecuteReader(

View file

@ -767,7 +767,7 @@ namespace WebsitePanel.EnterpriseServer
// load account
ExchangeAccount account = GetAccount(itemId, accountId);
return exchange.GetMailboxStatistics(account.AccountName);
return exchange.GetMailboxStatistics(account.UserPrincipalName);
}
catch (Exception ex)
{
@ -1241,6 +1241,9 @@ namespace WebsitePanel.EnterpriseServer
string CounterStr = "00000";
int counter = 0;
bool bFound = false;
if (!AccountExists(accountName)) return accountName;
do
{
accountName = genSamLogin(name, CounterStr);
@ -1313,8 +1316,13 @@ namespace WebsitePanel.EnterpriseServer
if (String.Compare(account.PrimaryEmailAddress, email.EmailAddress, true) == 0)
{
email.IsPrimary = true;
break;
}
if (String.Compare(account.UserPrincipalName, email.EmailAddress, true) == 0)
{
email.IsUserPrincipalName = true;
}
}
return emails.ToArray();
@ -1534,6 +1542,10 @@ namespace WebsitePanel.EnterpriseServer
if(domain == null)
return -1;
if (DataProvider.CheckDomainUsedByHostedOrganization(domain.DomainName) == 1)
{
return -1;
}
// delete domain on Exchange
int[] hubTransportServiceIds;
@ -1810,10 +1822,11 @@ namespace WebsitePanel.EnterpriseServer
// delete mailbox
int serviceExchangeId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(serviceExchangeId, org.ServiceId);
exchange.DisableMailbox(account.AccountName);
exchange.DisableMailbox(account.UserPrincipalName);
account.AccountType = ExchangeAccountType.User;
account.MailEnabledPublicFolder = false;
account.MailEnabledPublicFolder = false;
account.AccountPassword = null;
UpdateAccount(account);
DataProvider.DeleteUserEmailAddresses(account.AccountId, account.PrimaryEmailAddress);
@ -1859,7 +1872,7 @@ namespace WebsitePanel.EnterpriseServer
// delete mailbox
int serviceExchangeId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(serviceExchangeId, org.ServiceId);
exchange.DeleteMailbox(account.AccountName);
exchange.DeleteMailbox(account.UserPrincipalName);
@ -1934,7 +1947,7 @@ namespace WebsitePanel.EnterpriseServer
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
return exchange.GetMailboxGeneralSettings(account.AccountName);
return exchange.GetMailboxGeneralSettings(account.UserPrincipalName);
}
catch (Exception ex)
{
@ -1981,7 +1994,7 @@ namespace WebsitePanel.EnterpriseServer
hideAddressBook = true;
exchange.SetMailboxGeneralSettings(
account.AccountName,
account.UserPrincipalName,
hideAddressBook,
disabled);
@ -2053,7 +2066,7 @@ namespace WebsitePanel.EnterpriseServer
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
exchange.SetMailboxEmailAddresses(
account.AccountName,
account.UserPrincipalName,
GetAccountSimpleEmailAddresses(itemId, accountId));
return 0;
@ -2109,7 +2122,7 @@ namespace WebsitePanel.EnterpriseServer
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
exchange.SetMailboxPrimaryEmailAddress(
account.AccountName,
account.UserPrincipalName,
emailAddress);
if (DataProvider.CheckOCSUserExists(account.AccountId))
@ -2125,6 +2138,7 @@ namespace WebsitePanel.EnterpriseServer
}
// save account
account.AccountPassword = null;
UpdateAccount(account);
return 0;
@ -2158,7 +2172,8 @@ namespace WebsitePanel.EnterpriseServer
List<string> toDelete = new List<string>();
foreach (string emailAddress in emailAddresses)
{
if (String.Compare(account.PrimaryEmailAddress, emailAddress, true) != 0)
if ((String.Compare(account.PrimaryEmailAddress, emailAddress, true) != 0) &
(String.Compare(account.UserPrincipalName, emailAddress, true) != 0))
toDelete.Add(emailAddress);
}
@ -2175,7 +2190,7 @@ namespace WebsitePanel.EnterpriseServer
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
exchange.SetMailboxEmailAddresses(
account.AccountName,
account.UserPrincipalName,
GetAccountSimpleEmailAddresses(itemId, accountId));
return 0;
@ -2216,7 +2231,7 @@ namespace WebsitePanel.EnterpriseServer
// get mailbox settings
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
ExchangeMailbox mailbox = exchange.GetMailboxMailFlowSettings(account.AccountName);
ExchangeMailbox mailbox = exchange.GetMailboxMailFlowSettings(account.UserPrincipalName);
mailbox.DisplayName = account.DisplayName;
return mailbox;
}
@ -2261,7 +2276,7 @@ namespace WebsitePanel.EnterpriseServer
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
exchange.SetMailboxMailFlowSettings(account.AccountName,
exchange.SetMailboxMailFlowSettings(account.UserPrincipalName,
enableForwarding,
forwardingAccountName,
forwardToBoth,
@ -2309,7 +2324,7 @@ namespace WebsitePanel.EnterpriseServer
// get mailbox settings
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
ExchangeMailbox mailbox = exchange.GetMailboxAdvancedSettings(account.AccountName);
ExchangeMailbox mailbox = exchange.GetMailboxAdvancedSettings(account.UserPrincipalName);
mailbox.DisplayName = account.DisplayName;
return mailbox;
}
@ -2352,6 +2367,7 @@ namespace WebsitePanel.EnterpriseServer
else account.MailboxManagerActions &= ~action;
// update account
account.AccountPassword = null;
UpdateAccount(account);
return 0;
@ -2516,7 +2532,7 @@ namespace WebsitePanel.EnterpriseServer
// get mailbox settings
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
ExchangeMailbox mailbox = exchange.GetMailboxPermissions(org.OrganizationId, account.AccountName);
ExchangeMailbox mailbox = exchange.GetMailboxPermissions(org.OrganizationId, account.UserPrincipalName);
mailbox.DisplayName = account.DisplayName;
return mailbox;
}
@ -2558,7 +2574,7 @@ namespace WebsitePanel.EnterpriseServer
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
exchange.SetMailboxPermissions(org.OrganizationId, account.AccountName, sendAsaccounts, fullAccessAcounts);
exchange.SetMailboxPermissions(org.OrganizationId, account.UserPrincipalName, sendAsaccounts, fullAccessAcounts);
return 0;
@ -2643,7 +2659,7 @@ namespace WebsitePanel.EnterpriseServer
exchange.SetMailboxAdvancedSettings(
org.OrganizationId,
account.AccountName,
account.UserPrincipalName,
plan.EnablePOP,
plan.EnableIMAP,
plan.EnableOWA,
@ -3188,6 +3204,7 @@ namespace WebsitePanel.EnterpriseServer
// update account
account.DisplayName = displayName;
account.PrimaryEmailAddress = emailAddress;
account.AccountPassword = null;
UpdateAccount(account);
return 0;
@ -3516,6 +3533,7 @@ namespace WebsitePanel.EnterpriseServer
// update account
account.DisplayName = displayName;
account.AccountPassword = null;
UpdateAccount(account);
return 0;
@ -3736,6 +3754,7 @@ namespace WebsitePanel.EnterpriseServer
addressLists.ToArray());
// save account
account.AccountPassword = null;
UpdateAccount(account);
return 0;
@ -4138,6 +4157,7 @@ namespace WebsitePanel.EnterpriseServer
account.AccountName = accountName;
account.MailEnabledPublicFolder = true;
account.PrimaryEmailAddress = email;
account.AccountPassword = null;
UpdateAccount(account);
// register e-mail
@ -4190,6 +4210,7 @@ namespace WebsitePanel.EnterpriseServer
// update and save account
account.MailEnabledPublicFolder = false;
account.PrimaryEmailAddress = "";
account.AccountPassword = null;
UpdateAccount(account);
@ -4309,6 +4330,7 @@ namespace WebsitePanel.EnterpriseServer
{
// rename original folder
account.DisplayName = newFullName;
account.AccountPassword = null;
UpdateAccount(account);
// rename nested folders
@ -4526,6 +4548,7 @@ namespace WebsitePanel.EnterpriseServer
emailAddress);
// save account
account.AccountPassword = null;
UpdateAccount(account);
return 0;
@ -4743,7 +4766,7 @@ namespace WebsitePanel.EnterpriseServer
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
return exchange.GetMobileDevices(account.AccountName);
return exchange.GetMobileDevices(account.UserPrincipalName);
}
catch (Exception ex)
{

View file

@ -249,7 +249,7 @@ namespace WebsitePanel.EnterpriseServer
OrganizationResult serverRes =
crm.CreateOrganization(orgId, org.OrganizationId, org.Name, baseCurrencyCode, baseCurrencyName,
baseCurrencySymbol, user.AccountName, user.FirstName, user.LastName, user.PrimaryEmailAddress,
baseCurrencySymbol, user.SamAccountName, user.FirstName, user.LastName, user.PrimaryEmailAddress,
collation);
if (!serverRes.IsSuccess)

View file

@ -84,20 +84,23 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
private static OCSEdgeServer[] GetEdgeServers(string edgeServices)
{
List<OCSEdgeServer> list = new List<OCSEdgeServer>();
string[] services = edgeServices.Split(';');
foreach (string current in services)
if (!string.IsNullOrEmpty(edgeServices))
{
string[] data = current.Split(',');
try
string[] services = edgeServices.Split(';');
foreach (string current in services)
{
int serviceId = int.Parse(data[1]);
OCSEdgeServer ocs = new OCSEdgeServer();
ServiceProviderProxy.Init(ocs, serviceId);
list.Add(ocs);
}
catch(Exception ex)
{
TaskManager.WriteError(ex);
string[] data = current.Split(',');
try
{
int serviceId = int.Parse(data[1]);
OCSEdgeServer ocs = new OCSEdgeServer();
ServiceProviderProxy.Init(ocs, serviceId);
list.Add(ocs);
}
catch (Exception ex)
{
TaskManager.WriteError(ex);
}
}
}

View file

@ -41,6 +41,7 @@ using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.Providers.SharePoint;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.DNS;
using WebsitePanel.Providers.OCS;
using System.IO;
using System.Xml;
@ -425,7 +426,15 @@ namespace WebsitePanel.EnterpriseServer
DomainInfo domain = ServerController.GetDomain(domainId);
if (domain == null)
return -1;
if (!string.IsNullOrEmpty(org.GlobalAddressList))
{
if (DataProvider.CheckDomainUsedByHostedOrganization(domain.DomainName) == 1)
{
return -1;
}
}
// unregister domain
DataProvider.DeleteExchangeOrganizationDomain(itemId, domainId);
@ -1327,11 +1336,11 @@ namespace WebsitePanel.EnterpriseServer
if (orgProxy.CreateUser(org.OrganizationId, sAMAccountName, displayName, upn, password, enabled) == 0)
{
OrganizationUser retUser = orgProxy.GetUserGeneralSettings(upn, org.OrganizationId);
accountName = sAMAccountName;
OrganizationUser retUser = orgProxy.GetUserGeneralSettings(sAMAccountName, org.OrganizationId);
TaskManager.Write("sAMAccountName :" + retUser.DomainUserName);
userId = AddOrganizationUser(itemId, upn, displayName, email, retUser.DomainUserName, password, subscriberNumber);
accountName = upn;
userId = AddOrganizationUser(itemId, sAMAccountName, displayName, email, retUser.DomainUserName, password, subscriberNumber);
// register email address
AddAccountEmailAddress(userId, email);
@ -1423,7 +1432,7 @@ namespace WebsitePanel.EnterpriseServer
TaskManager.Write("sAMAccountName :" + retUser.DomainUserName);
userId = AddOrganizationUser(itemId, accountName, displayName, email, retUser.DomainUserName, password, subscriberNumber);
userId = AddOrganizationUser(itemId, retUser.SamAccountName, displayName, email, retUser.DomainUserName, password, subscriberNumber);
AddAccountEmailAddress(userId, email);
@ -1452,6 +1461,9 @@ namespace WebsitePanel.EnterpriseServer
string CounterStr = "00000";
int counter = 0;
bool bFound = false;
if (!AccountExists(accountName)) return accountName;
do
{
accountName = genSamLogin(name, CounterStr);
@ -1662,7 +1674,7 @@ namespace WebsitePanel.EnterpriseServer
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_GENERAL");
TaskManager.StartTask("ORGANIZATION", "UPDATE_USER_GENERAL");
TaskManager.ItemId = itemId;
try
@ -1727,7 +1739,7 @@ namespace WebsitePanel.EnterpriseServer
if (!String.IsNullOrEmpty(password))
account.AccountPassword = CryptoUtils.Encrypt(password);
else
account.AccountPassword = string.Empty;
account.AccountPassword = null;
UpdateAccount(account);
@ -1744,6 +1756,162 @@ namespace WebsitePanel.EnterpriseServer
}
}
public static int SetUserPrincipalName(int itemId, int accountId, string userPrincipalName, bool inherit)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("ORGANIZATION", "SET_USER_USERPRINCIPALNAME");
TaskManager.ItemId = itemId;
try
{
// load organization
Organization org = GetOrganization(itemId);
if (org == null)
return -1;
// check package
int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
if (packageCheck < 0) return packageCheck;
// load account
OrganizationUser user = GetUserGeneralSettings(itemId, accountId);
if (user.UserPrincipalName != userPrincipalName)
{
bool userPrincipalNameOwned = false;
ExchangeEmailAddress[] emails = ExchangeServerController.GetMailboxEmailAddresses(itemId, accountId);
foreach (ExchangeEmailAddress mail in emails)
{
if (mail.EmailAddress == userPrincipalName)
{
userPrincipalNameOwned = true;
break;
}
}
if (!userPrincipalNameOwned)
{
if (EmailAddressExists(userPrincipalName))
return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
}
}
Organizations orgProxy = GetOrganizationProxy(org.ServiceId);
orgProxy.SetUserPrincipalName(org.OrganizationId,
user.AccountName,
userPrincipalName.ToLower());
DataProvider.UpdateExchangeAccountUserPrincipalName(accountId, userPrincipalName.ToLower());
if (inherit)
{
if (user.AccountType == ExchangeAccountType.Mailbox)
{
ExchangeServerController.AddMailboxEmailAddress(itemId, accountId, userPrincipalName.ToLower());
ExchangeServerController.SetMailboxPrimaryEmailAddress(itemId, accountId, userPrincipalName.ToLower());
}
else
{
if (user.IsLyncUser)
{
if (!DataProvider.LyncUserExists(accountId, userPrincipalName.ToLower()))
{
LyncController.SetLyncUserGeneralSettings(itemId, accountId, userPrincipalName.ToLower(), null);
}
}
else
{
if (user.IsOCSUser)
{
OCSServer ocs = GetOCSProxy(itemId);
string instanceId = DataProvider.GetOCSUserInstanceID(user.AccountId);
ocs.SetUserPrimaryUri(instanceId, userPrincipalName.ToLower());
}
}
}
}
return 0;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static int SetUserPassword(int itemId, int accountId, string password)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("ORGANIZATION", "SET_USER_PASSWORD");
TaskManager.ItemId = itemId;
try
{
// load organization
Organization org = GetOrganization(itemId);
if (org == null)
return -1;
// check package
int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
if (packageCheck < 0) return packageCheck;
// load account
ExchangeAccount account = ExchangeServerController.GetAccount(itemId, accountId);
string accountName = GetAccountName(account.AccountName);
Organizations orgProxy = GetOrganizationProxy(org.ServiceId);
orgProxy.SetUserPassword( org.OrganizationId,
accountName,
password);
//account.
if (!String.IsNullOrEmpty(password))
account.AccountPassword = CryptoUtils.Encrypt(password);
else
account.AccountPassword = null;
UpdateAccount(account);
return 0;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
private static void UpdateAccount(ExchangeAccount account)
{
DataProvider.UpdateExchangeAccount(account.AccountId, account.AccountName, account.AccountType, account.DisplayName,
@ -1961,6 +2129,19 @@ namespace WebsitePanel.EnterpriseServer
}
return res;
}
private static OCSServer GetOCSProxy(int itemId)
{
Organization org = OrganizationController.GetOrganization(itemId);
int serviceId = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.OCS);
OCSServer ocs = new OCSServer();
ServiceProviderProxy.Init(ocs, serviceId);
return ocs;
}
}
}

View file

@ -444,12 +444,12 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
try
{
stats = exchange.GetMailboxStatistics(mailbox.AccountName);
stats = exchange.GetMailboxStatistics(mailbox.UserPrincipalName);
}
catch (Exception ex)
{
TaskManager.WriteError(ex, "Could not get mailbox statistics. AccountName: {0}",
mailbox.AccountName);
mailbox.UserPrincipalName);
}

View file

@ -195,6 +195,22 @@ namespace WebsitePanel.EnterpriseServer
}
[WebMethod]
public int SetUserPrincipalName(int itemId, int accountId, string userPrincipalName, bool inherit)
{
return OrganizationController.SetUserPrincipalName(itemId, accountId, userPrincipalName,
inherit);
}
[WebMethod]
public int SetUserPassword(int itemId, int accountId, string password)
{
return OrganizationController.SetUserPassword(itemId, accountId, password);
}
[WebMethod]
public List<OrganizationUser> SearchAccounts(int itemId,
string filterColumn, string filterValue, string sortColumn, bool includeMailboxes)

View file

@ -58,5 +58,7 @@ namespace WebsitePanel.Providers.HostedSolution
get { return primary; }
set { primary = value; }
}
}
}

View file

@ -51,6 +51,10 @@ namespace WebsitePanel.Providers.HostedSolution
string businessPhone, string fax, string homePhone, string mobilePhone, string pager,
string webPage, string notes, string externalEmail);
void SetUserPassword(string organizationId, string accountName, string password);
void SetUserPrincipalName(string organizationId, string accountName, string userPrincipalName);
bool OrganizationExists(string organizationId);
void DeleteOrganizationDomain(string organizationDistinguishedName, string domain);

View file

@ -43,13 +43,13 @@ namespace WebsitePanel.Providers.HostedSolution
private string RootOU
{
get { return ProviderSettings["RootOU"]; }
}
}
private string RootDomain
{
get { return ServerSettings.ADRootDomain; }
}
private string PrimaryDomainController
{
get { return ProviderSettings["PrimaryDomainController"]; }
@ -68,7 +68,7 @@ namespace WebsitePanel.Providers.HostedSolution
AppendProtocol(sb);
AppendDomainController(sb);
AppendOUPath(sb, organizationId);
AppendOUPath(sb, RootOU);
AppendOUPath(sb, RootOU);
AppendDomainPath(sb, RootDomain);
return sb.ToString();
@ -118,20 +118,20 @@ namespace WebsitePanel.Providers.HostedSolution
{
sb.Append(PrimaryDomainController + "/");
}
private static void AppendCNPath(StringBuilder sb, string organizationId)
{
if (string.IsNullOrEmpty(organizationId))
return;
sb.Append("CN=").Append(organizationId).Append(",");
}
private static void AppendProtocol(StringBuilder sb)
{
sb.Append("LDAP://");
}
private static void AppendOUPath(StringBuilder sb, string ou)
{
if (string.IsNullOrEmpty(ou))
@ -168,29 +168,29 @@ namespace WebsitePanel.Providers.HostedSolution
{
return OrganizationExistsInternal(organizationId);
}
internal bool OrganizationExistsInternal(string organizationId)
{
if (string.IsNullOrEmpty(organizationId))
throw new ArgumentNullException("organizationId");
string orgPath = GetOrganizationPath(organizationId);
return ActiveDirectoryUtils.AdObjectExists(orgPath);
}
public Organization CreateOrganization(string organizationId)
{
return CreateOrganizationInternal(organizationId);
return CreateOrganizationInternal(organizationId);
}
internal Organization CreateOrganizationInternal(string organizationId)
{
HostedSolutionLog.LogStart("CreateOrganizationInternal");
HostedSolutionLog.DebugInfo("OrganizationId : {0}", organizationId);
if (string.IsNullOrEmpty(organizationId))
throw new ArgumentNullException("organizationId");
bool ouCreated = false;
bool groupCreated = false;
@ -203,18 +203,18 @@ namespace WebsitePanel.Providers.HostedSolution
//Create OU
ActiveDirectoryUtils.CreateOrganizationalUnit(organizationId, parentPath);
ouCreated = true;
//Create security group
ActiveDirectoryUtils.CreateGroup(orgPath, organizationId);
groupCreated = true;
org = new Organization();
org.OrganizationId = organizationId;
org.DistinguishedName = ActiveDirectoryUtils.RemoveADPrefix(orgPath);
org.SecurityGroup = ActiveDirectoryUtils.RemoveADPrefix(GetGroupPath(organizationId));
org.SecurityGroup = ActiveDirectoryUtils.RemoveADPrefix(GetGroupPath(organizationId));
}
catch(Exception ex)
catch (Exception ex)
{
HostedSolutionLog.LogError(ex);
try
@ -225,7 +225,7 @@ namespace WebsitePanel.Providers.HostedSolution
ActiveDirectoryUtils.DeleteADObject(groupPath);
}
}
catch(Exception e)
catch (Exception e)
{
HostedSolutionLog.LogError(e);
}
@ -238,21 +238,21 @@ namespace WebsitePanel.Providers.HostedSolution
ActiveDirectoryUtils.DeleteADObject(orgPath);
}
}
catch(Exception e)
catch (Exception e)
{
HostedSolutionLog.LogError(e);
}
throw;
}
HostedSolutionLog.LogEnd("CreateOrganizationInternal");
return org;
return org;
}
public override void ChangeServiceItemsState(ServiceProviderItem[] items, bool enabled)
{
{
foreach (ServiceProviderItem item in items)
{
@ -261,7 +261,7 @@ namespace WebsitePanel.Providers.HostedSolution
if (item is Organization)
{
Organization org = item as Organization;
ChangeOrganizationState(org, enabled);
ChangeOrganizationState(org, enabled);
}
}
catch (Exception ex)
@ -281,7 +281,7 @@ namespace WebsitePanel.Providers.HostedSolution
string.Format(CultureInfo.InvariantCulture, "(&(objectClass=user)(!{0}=disabled))",
ADAttributes.CustomAttribute2);
using (DirectorySearcher searcher = new DirectorySearcher(entry, filter))
{
{
SearchResultCollection resCollection = searcher.FindAll();
foreach (SearchResult res in resCollection)
{
@ -303,21 +303,21 @@ namespace WebsitePanel.Providers.HostedSolution
Organization org = item as Organization;
DeleteOrganizationInternal(org.OrganizationId);
}
}
catch (Exception ex)
{
HostedSolutionLog.LogError(String.Format("Error deleting '{0}' {1}", item.Name, item.GetType().Name), ex);
}
}
}
public void DeleteOrganization(string organizationId)
{
{
DeleteOrganizationInternal(organizationId);
}
internal void DeleteOrganizationInternal(string organizationId)
{
HostedSolutionLog.LogStart("DeleteOrganizationInternal");
@ -328,11 +328,11 @@ namespace WebsitePanel.Providers.HostedSolution
string groupPath = GetGroupPath(organizationId);
ActiveDirectoryUtils.DeleteADObject(groupPath);
string path = GetOrganizationPath(organizationId);
string path = GetOrganizationPath(organizationId);
ActiveDirectoryUtils.DeleteADObject(path, true);
HostedSolutionLog.LogEnd("DeleteOrganizationInternal");
}
@ -371,7 +371,7 @@ namespace WebsitePanel.Providers.HostedSolution
userPath = GetUserPath(organizationId, loginName);
if (!ActiveDirectoryUtils.AdObjectExists(userPath))
{
userPath = ActiveDirectoryUtils.CreateUser(path, upn, loginName, displayName, password, enabled);
userPath = ActiveDirectoryUtils.CreateUser(path, null, loginName, displayName, password, enabled);
DirectoryEntry entry = new DirectoryEntry(userPath);
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.UserPrincipalName, upn);
entry.CommitChanges();
@ -416,12 +416,12 @@ namespace WebsitePanel.Providers.HostedSolution
{
return GetPasswordPolicyInternal();
}
internal PasswordPolicyResult GetPasswordPolicyInternal()
{
HostedSolutionLog.LogStart("GetPasswordPolicyInternal");
PasswordPolicyResult res = new PasswordPolicyResult {IsSuccess = true};
PasswordPolicyResult res = new PasswordPolicyResult { IsSuccess = true };
string[] policyAttributes = new[] {"minPwdLength",
"pwdProperties",
@ -437,30 +437,30 @@ namespace WebsitePanel.Providers.HostedSolution
SearchScope.Base
);
SearchResult result = ds.FindOne();
PasswordPolicy ret = new PasswordPolicy
{
MinLength = ((int) result.Properties["minPwdLength"][0]),
IsComplexityEnable = ((int) result.Properties["pwdProperties"][0] == 1)
};
res.Value = ret;
{
MinLength = ((int)result.Properties["minPwdLength"][0]),
IsComplexityEnable = ((int)result.Properties["pwdProperties"][0] == 1)
};
res.Value = ret;
}
catch(Exception ex)
catch (Exception ex)
{
HostedSolutionLog.LogError(ex);
res.IsSuccess = false;
res.ErrorCodes.Add(ErrorCodes.CANNOT_GET_PASSWORD_COMPLEXITY);
res.ErrorCodes.Add(ErrorCodes.CANNOT_GET_PASSWORD_COMPLEXITY);
}
HostedSolutionLog.LogEnd("GetPasswordPolicyInternal");
HostedSolutionLog.LogEnd("GetPasswordPolicyInternal");
return res;
}
public void DeleteUser(string loginName, string organizationId)
{
{
DeleteUserInternal(loginName, organizationId);
}
@ -469,37 +469,37 @@ namespace WebsitePanel.Providers.HostedSolution
HostedSolutionLog.LogStart("DeleteUserInternal");
HostedSolutionLog.DebugInfo("loginName : {0}", loginName);
HostedSolutionLog.DebugInfo("organizationId : {0}", organizationId);
if (string.IsNullOrEmpty(loginName))
throw new ArgumentNullException("loginName");
if (string.IsNullOrEmpty(organizationId))
throw new ArgumentNullException("organizationId");
string path = GetUserPath(organizationId, loginName);
string path = GetUserPath(organizationId, loginName);
if (ActiveDirectoryUtils.AdObjectExists(path))
ActiveDirectoryUtils.DeleteADObject(path,true);
ActiveDirectoryUtils.DeleteADObject(path, true);
HostedSolutionLog.LogEnd("DeleteUserInternal");
}
public OrganizationUser GetUserGeneralSettings(string loginName, string organizationId)
{
return GetUserGeneralSettingsInternal(loginName, organizationId);
}
internal OrganizationUser GetUserGeneralSettingsInternal(string loginName, string organizationId)
{
HostedSolutionLog.LogStart("GetUserGeneralSettingsInternal");
HostedSolutionLog.DebugInfo("loginName : {0}", loginName);
HostedSolutionLog.DebugInfo("organizationId : {0}", organizationId);
if (string.IsNullOrEmpty(loginName))
throw new ArgumentNullException("loginName");
string path = GetUserPath(organizationId, loginName);
DirectoryEntry entry = ActiveDirectoryUtils.GetADObject(path);
OrganizationUser retUser = new OrganizationUser();
retUser.FirstName = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.FirstName);
@ -529,25 +529,25 @@ namespace WebsitePanel.Providers.HostedSolution
retUser.DomainUserName = GetDomainName(ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.SAMAccountName));
retUser.DistinguishedName = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.DistinguishedName);
retUser.Locked = (bool)entry.InvokeGet(ADAttributes.AccountLocked);
retUser.UserPrincipalName = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.UserPrincipalName);
retUser.UserPrincipalName= (string)entry.InvokeGet(ADAttributes.UserPrincipalName);
HostedSolutionLog.LogEnd("GetUserGeneralSettingsInternal");
return retUser;
}
private string GetDomainName(string username)
{
string domain = ActiveDirectoryUtils.GetNETBIOSDomainName(RootDomain);
string ret = string.Format(@"{0}\{1}", domain, username);
return ret;
}
private string GetDomainName(string username)
{
string domain = ActiveDirectoryUtils.GetNETBIOSDomainName(RootDomain);
string ret = string.Format(@"{0}\{1}", domain, username);
return ret;
}
private OrganizationUser GetManager(DirectoryEntry entry)
{
OrganizationUser retUser = null;
string path = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.Manager);
if (!string.IsNullOrEmpty(path))
{
{
path = ActiveDirectoryUtils.AddADPrefix(path, PrimaryDomainController);
if (ActiveDirectoryUtils.AdObjectExists(path))
{
@ -556,18 +556,18 @@ namespace WebsitePanel.Providers.HostedSolution
retUser.DisplayName = ActiveDirectoryUtils.GetADObjectStringProperty(user, ADAttributes.DisplayName);
retUser.AccountName = ActiveDirectoryUtils.GetADObjectStringProperty(user, ADAttributes.Name);
}
}
}
return retUser;
}
public void SetUserGeneralSettings(string organizationId, string accountName, string displayName, string password,
public void SetUserGeneralSettings(string organizationId, string accountName, string displayName, string password,
bool hideFromAddressBook, bool disabled, bool locked, string firstName, string initials, string lastName,
string address, string city, string state, string zip, string country, string jobTitle,
string company, string department, string office, string managerAccountName,
string businessPhone, string fax, string homePhone, string mobilePhone, string pager,
string webPage, string notes, string externalEmail)
string webPage, string notes, string externalEmail)
{
SetUserGeneralSettingsInternal(organizationId, accountName, displayName, password, hideFromAddressBook,
disabled, locked, firstName, initials, lastName, address, city, state, zip, country, jobTitle,
@ -583,10 +583,10 @@ namespace WebsitePanel.Providers.HostedSolution
string webPage, string notes, string externalEmail)
{
string path = GetUserPath(organizationId, accountName);
DirectoryEntry entry = ActiveDirectoryUtils.GetADObject(path);
DirectoryEntry entry = ActiveDirectoryUtils.GetADObject(path);
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.FirstName, firstName);
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.FirstName, firstName);
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.LastName, lastName);
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.DisplayName, displayName);
@ -609,7 +609,7 @@ namespace WebsitePanel.Providers.HostedSolution
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.Notes, notes);
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.ExternalEmail, externalEmail);
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.CustomAttribute2, (disabled ? "disabled" : null));
string manager = string.Empty;
if (!string.IsNullOrEmpty(managerAccountName))
@ -619,7 +619,7 @@ namespace WebsitePanel.Providers.HostedSolution
}
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.Manager, ActiveDirectoryUtils.RemoveADPrefix(manager));
entry.InvokeSet(ADAttributes.AccountDisabled, disabled);
if (!string.IsNullOrEmpty(password))
entry.Invoke(ADAttributes.SetPassword, password);
@ -629,13 +629,44 @@ namespace WebsitePanel.Providers.HostedSolution
bool isLoked = (bool)entry.InvokeGet(ADAttributes.AccountLocked);
if (isLoked)
entry.InvokeSet(ADAttributes.AccountLocked, locked);
}
entry.CommitChanges();
}
public void SetUserPassword(string organizationId, string accountName, string password)
{
SetUserPasswordInternal(organizationId, accountName, password);
}
internal void SetUserPasswordInternal(string organizationId, string accountName, string password)
{
string path = GetUserPath(organizationId, accountName);
DirectoryEntry entry = ActiveDirectoryUtils.GetADObject(path);
if (!string.IsNullOrEmpty(password))
entry.Invoke(ADAttributes.SetPassword, password);
entry.CommitChanges();
}
public void SetUserPrincipalName(string organizationId, string accountName, string userPrincipalName)
{
SetUserPrincipalNameInternal(organizationId, accountName, userPrincipalName);
}
internal void SetUserPrincipalNameInternal(string organizationId, string accountName, string userPrincipalName)
{
string path = GetUserPath(organizationId, accountName);
DirectoryEntry entry = ActiveDirectoryUtils.GetADObject(path);
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.UserPrincipalName, userPrincipalName);
entry.CommitChanges();
}
public string GetSamAccountNameByUserPrincipalName(string organizationId, string userPrincipalName)
{
@ -679,15 +710,15 @@ namespace WebsitePanel.Providers.HostedSolution
}
#endregion
#endregion
#region Domains
public void CreateOrganizationDomain(string organizationDistinguishedName, string domain)
{
CreateOrganizationDomainInternal(organizationDistinguishedName, domain);
}
/// <summary>
/// Creates organization domain
/// </summary>
@ -702,7 +733,7 @@ namespace WebsitePanel.Providers.HostedSolution
HostedSolutionLog.LogEnd("CreateOrganizationDomainInternal");
}
public void DeleteOrganizationDomain(string organizationDistinguishedName, string domain)
{
DeleteOrganizationDomainInternal(organizationDistinguishedName, domain);
@ -730,6 +761,6 @@ namespace WebsitePanel.Providers.HostedSolution
return Environment.UserDomainName != Environment.MachineName;
}
}
}

View file

@ -26,10 +26,11 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.5456
// Runtime Version:2.0.50727.6400
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -37,7 +38,7 @@
//------------------------------------------------------------------------------
//
// This source code was auto-generated by wsdl, Version=2.0.50727.42.
// This source code was auto-generated by wsdl, Version=2.0.50727.3038.
//
namespace WebsitePanel.Providers.HostedSolution {
using System.Xml.Serialization;
@ -47,12 +48,13 @@ namespace WebsitePanel.Providers.HostedSolution {
using System;
using System.Diagnostics;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.ResultObjects;
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="OrganizationsSoap", Namespace="http://tempuri.org/")]
@ -76,6 +78,10 @@ namespace WebsitePanel.Providers.HostedSolution {
private System.Threading.SendOrPostCallback SetUserGeneralSettingsOperationCompleted;
private System.Threading.SendOrPostCallback SetUserPasswordOperationCompleted;
private System.Threading.SendOrPostCallback SetUserPrincipalNameOperationCompleted;
private System.Threading.SendOrPostCallback DeleteOrganizationDomainOperationCompleted;
private System.Threading.SendOrPostCallback CreateOrganizationDomainOperationCompleted;
@ -86,7 +92,7 @@ namespace WebsitePanel.Providers.HostedSolution {
/// <remarks/>
public Organizations() {
this.Url = "http://localhost:9006/Organizations.asmx";
this.Url = "http://localhost:9003/Organizations.asmx";
}
/// <remarks/>
@ -110,6 +116,12 @@ namespace WebsitePanel.Providers.HostedSolution {
/// <remarks/>
public event SetUserGeneralSettingsCompletedEventHandler SetUserGeneralSettingsCompleted;
/// <remarks/>
public event SetUserPasswordCompletedEventHandler SetUserPasswordCompleted;
/// <remarks/>
public event SetUserPrincipalNameCompletedEventHandler SetUserPrincipalNameCompleted;
/// <remarks/>
public event DeleteOrganizationDomainCompletedEventHandler DeleteOrganizationDomainCompleted;
@ -627,6 +639,98 @@ namespace WebsitePanel.Providers.HostedSolution {
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/SetUserPassword", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public void SetUserPassword(string organizationId, string accountName, string password) {
this.Invoke("SetUserPassword", new object[] {
organizationId,
accountName,
password});
}
/// <remarks/>
public System.IAsyncResult BeginSetUserPassword(string organizationId, string accountName, string password, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("SetUserPassword", new object[] {
organizationId,
accountName,
password}, callback, asyncState);
}
/// <remarks/>
public void EndSetUserPassword(System.IAsyncResult asyncResult) {
this.EndInvoke(asyncResult);
}
/// <remarks/>
public void SetUserPasswordAsync(string organizationId, string accountName, string password) {
this.SetUserPasswordAsync(organizationId, accountName, password, null);
}
/// <remarks/>
public void SetUserPasswordAsync(string organizationId, string accountName, string password, object userState) {
if ((this.SetUserPasswordOperationCompleted == null)) {
this.SetUserPasswordOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetUserPasswordOperationCompleted);
}
this.InvokeAsync("SetUserPassword", new object[] {
organizationId,
accountName,
password}, this.SetUserPasswordOperationCompleted, userState);
}
private void OnSetUserPasswordOperationCompleted(object arg) {
if ((this.SetUserPasswordCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.SetUserPasswordCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/SetUserPrincipalName", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public void SetUserPrincipalName(string organizationId, string accountName, string userPrincipalName) {
this.Invoke("SetUserPrincipalName", new object[] {
organizationId,
accountName,
userPrincipalName});
}
/// <remarks/>
public System.IAsyncResult BeginSetUserPrincipalName(string organizationId, string accountName, string userPrincipalName, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("SetUserPrincipalName", new object[] {
organizationId,
accountName,
userPrincipalName}, callback, asyncState);
}
/// <remarks/>
public void EndSetUserPrincipalName(System.IAsyncResult asyncResult) {
this.EndInvoke(asyncResult);
}
/// <remarks/>
public void SetUserPrincipalNameAsync(string organizationId, string accountName, string userPrincipalName) {
this.SetUserPrincipalNameAsync(organizationId, accountName, userPrincipalName, null);
}
/// <remarks/>
public void SetUserPrincipalNameAsync(string organizationId, string accountName, string userPrincipalName, object userState) {
if ((this.SetUserPrincipalNameOperationCompleted == null)) {
this.SetUserPrincipalNameOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetUserPrincipalNameOperationCompleted);
}
this.InvokeAsync("SetUserPrincipalName", new object[] {
organizationId,
accountName,
userPrincipalName}, this.SetUserPrincipalNameOperationCompleted, userState);
}
private void OnSetUserPrincipalNameOperationCompleted(object arg) {
if ((this.SetUserPrincipalNameCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.SetUserPrincipalNameCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/DeleteOrganizationDomain", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
@ -804,11 +908,11 @@ namespace WebsitePanel.Providers.HostedSolution {
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void OrganizationExistsCompletedEventHandler(object sender, OrganizationExistsCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class OrganizationExistsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
@ -830,11 +934,11 @@ namespace WebsitePanel.Providers.HostedSolution {
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void CreateOrganizationCompletedEventHandler(object sender, CreateOrganizationCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class CreateOrganizationCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
@ -856,15 +960,15 @@ namespace WebsitePanel.Providers.HostedSolution {
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void DeleteOrganizationCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void CreateUserCompletedEventHandler(object sender, CreateUserCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class CreateUserCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
@ -886,15 +990,15 @@ namespace WebsitePanel.Providers.HostedSolution {
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void DeleteUserCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void GetUserGeneralSettingsCompletedEventHandler(object sender, GetUserGeneralSettingsCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetUserGeneralSettingsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
@ -916,23 +1020,31 @@ namespace WebsitePanel.Providers.HostedSolution {
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void SetUserGeneralSettingsCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void SetUserPasswordCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void SetUserPrincipalNameCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void DeleteOrganizationDomainCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void CreateOrganizationDomainCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void GetPasswordPolicyCompletedEventHandler(object sender, GetPasswordPolicyCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetPasswordPolicyCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
@ -954,11 +1066,11 @@ namespace WebsitePanel.Providers.HostedSolution {
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void GetSamAccountNameByUserPrincipalNameCompletedEventHandler(object sender, GetSamAccountNameByUserPrincipalNameCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetSamAccountNameByUserPrincipalNameCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {

View file

@ -125,6 +125,20 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public void SetUserPassword(string organizationId, string accountName, string password)
{
Organization.SetUserPassword(organizationId, accountName, password);
}
[WebMethod, SoapHeader("settings")]
public void SetUserPrincipalName(string organizationId, string accountName, string userPrincipalName)
{
Organization.SetUserPrincipalName(organizationId, accountName, userPrincipalName);
}
[WebMethod, SoapHeader("settings")]
public void DeleteOrganizationDomain(string organizationDistinguishedName, string domain)
{

View file

@ -2896,6 +2896,9 @@
<data name="ServiceItemType.Organization" xml:space="preserve">
<value>Hosted Organization</value>
</data>
<data name="Error.EXCHANGE_UNABLE_TO_DELETE_DOMAIN" xml:space="preserve">
<value>Unable to delete domain, verify if domain is in use by hosted organization objects.</value>
</data>
<data name="Error.EXCHANGE_CREATE_MAILBOX" xml:space="preserve">
<value>Error creating mailbox. See audit log for more details.</value>
</data>
@ -3080,6 +3083,19 @@
<data name="Success.ORGANIZATION_UPDATE_USER_SETTINGS" xml:space="preserve">
<value>User general settings have been successfully updated.</value>
</data>
<data name="Success.ORGANIZATION_SET_USER_PASSWORD" xml:space="preserve">
<value>User password has been successfully updated.</value>
</data>
<data name="Error.ORGANIZATION_SET_USER_PASSWORD" xml:space="preserve">
<value>Failed to update user password.</value>
</data>
<data name="Success.ORGANIZATION_SET_USER_USERPRINCIPALNAME" xml:space="preserve">
<value>User login name has been successfully updated.</value>
</data>
<data name="Error.ORGANIZATION_SET_USER_USERPRINCIPALNAME" xml:space="preserve">
<value>Failed to update user login name.</value>
</data>
<data name="Success.EXCHANGE_MAILBOX_SET_DEFAULT_EMAIL" xml:space="preserve">
<value>Mailbox primary e-mail address has been changed.</value>
</data>
@ -3260,6 +3276,9 @@
<data name="Quota.HostedSolution.Users" xml:space="preserve">
<value>Users per Organization</value>
</data>
<data name="Quota.HostedSolution.AllowChangeUPN" xml:space="preserve">
<value>Allow to Change UserPrincipalName</value>
</data>
<data name="Quota.HostedSolution.Domains" xml:space="preserve">
<value>Domains per Organization</value>
</data>
@ -5072,6 +5091,9 @@
<data name="Error.DELETE_LYNC_USER" xml:space="preserve">
<value>Cannot delete Lync User, the following errors have been occured:</value>
</data>
<data name="Error.LYNC_UNABLE_TO_ADD_PLAN" xml:space="preserve">
<value>Unabled to add plan</value>
</data>
<data name="Success.UPDATE_LYNC_USER" xml:space="preserve">
<value>General Lync User settings have been successfully updated.</value>
</data>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreateNewBlackBerryUser.Text" xml:space="preserve">
<value>Add BlackBerry User</value>
@ -139,6 +139,6 @@
<value>BlackBerry users</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>The BlackBerry solution allows mobile users to access communications and information wirelessly, including Microsoft Exchange email, calendar, contacts and scheduling, mobile phone, text messaging, instant messaging, internet and intranet access.</value>
<value />
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreate.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Creating BlackBerry user...');</value>
@ -130,6 +130,6 @@
<value>BlackBarry Users</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>Please specify an existing Microsoft Exchange mailbox for a new BlackBerry user.</value>
<value />
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnDelete.OnClientClick" xml:space="preserve">
<value>if (confirm('Are you sure you want to delete the user?')){ShowProgressDialog('Deleting BlackBerry user...');return true;} else {return false};</value>
@ -157,6 +157,6 @@
<value>BlackBerry User</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>Specify here a short term password which will be used to active the account(s) wirelessly. The password will be created when the account is activated or if the activation does not succeed before the expiration time.</value>
<value />
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreate.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Creating CRM Organization...');</value>
@ -133,8 +133,7 @@
<value>Failed</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;CRM organization represents the top level of the Microsoft Dynamics CRM business hierarchy. The organization can be a specific business, holding company, or corporation. The organization is divided into business units.&lt;/p&gt;&lt;p&gt;The base currency is used for financial data, such as reporting, profit and loss statements, and balance sheets. After the base currency is set, it cannot be changed.&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;The collation defines comparison and sort-ordering for items. After the collation is set, it cannot be changed.&lt;/p&gt;</value>
<value />
</data>
<data name="lblAdministrator.Text" xml:space="preserve">
<value>Administrator:</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="locDisplayName.Text" xml:space="preserve">
<value>Display Name:</value>
@ -139,9 +139,7 @@
<value>CRM User roles</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;How a user accesses data is determined by a combination of the user license, security role, business unit and one or more teams.&lt;/p&gt;
&lt;p&gt;Security roles are predefined groups of common privileges based on the types of tasks users perform. The security roles listed are those that have been created for the business unit associated with the user. Note that this means users can be assigned only the security roles for the business unit with which they have been associated.&lt;/p&gt;</value>
<value />
</data>
<data name="btnActivate.Text" xml:space="preserve">
<value>Enable</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreateUser.Text" xml:space="preserve">
<value>Create new CRM user</value>
@ -145,6 +145,6 @@
<value>Primary Email Address</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;CRM user is any person who works for a business unit who uses the Microsoft Dynamics CRM application.&lt;/p&gt; &lt;p&gt;Each user has a user account. Included in the user's account is information such as the user's telephone numbers, e-mail address, and a link to the user's manager. &lt;/p&gt; &lt;p&gt;Each user corresponds to a user in the Active Directory for that organization.&lt;/p&gt;&lt;p&gt;You can disable a user's record to prevent the user from being able to access Microsoft Dynamics CRM. You can only disable a user record, not delete it.&lt;/p&gt;</value>
<value />
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreate.Text" xml:space="preserve">
<value>Create CRM User</value>
@ -130,6 +130,6 @@
<value>Create New CRM User</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>CRM user is any person who works for a business unit who uses the Microsoft Dynamics CRM application. Each user corresponds to a user in the Active Directory for that organization. All users must be associated with only one business unit. This association controls which customer data the user will have access to.</value>
<value />
</data>
</root>

View file

@ -151,9 +151,7 @@
<value>Windows SharePoint Services</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Exchange Server enables users who have mobile devices to synchronize mailbox data by using Exchange ActiveSync. Users can synchronize e-mail, contacts, calendars, and task folders. &lt;/p&gt;&lt;p&gt;
ActiveSync mailbox policy allows you to apply a common set of security settings to all users in organization.
&lt;/p&gt;</value>
<value />
</data>
<data name="lblRefreshInterval.Text" xml:space="preserve">
<value>Refresh interval:</value>

View file

@ -121,7 +121,7 @@
<value>Cancel</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>Select a domain name, e.g. "mydomain.com" or "sub.mydomain.com"</value>
<value />
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Add Domain Name</value>

View file

@ -136,7 +136,7 @@
<value>POP3</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt; A Mailbox plan is a template that defines the characteristics of a mailbox &lt;/p&gt; &lt;p&gt;The mailbox plan name needs to be unique. A mailbox plan cannot be modified. In case a mailbox needs a mailbox plan with another characteristics, a new mailbox plan needs to be created and assigned to the mailbox. A mailbox plan can only be deleted when the plan is not assigned to any mailboxes. &lt;/p&gt;&lt;p&gt; Empty value indicates &lt;b&gt;'Unlimited'&lt;/b&gt;, percentages have to be a value between 0 and 100 (a value of 0 can block the mailbox from sending and receiving email) &lt;/p&gt; &lt;p&gt; Unllimited values can only be used when the hosting plan allows to do so&lt;/p&gt;</value>
<value />
</data>
<data name="locDays.Text" xml:space="preserve">
<value>days</value>

View file

@ -127,7 +127,7 @@
<value>Hide from Address Book</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Display Name&lt;/b&gt; will be shown in the GAL in Outlook and OWA.&lt;/p&gt;&lt;p&gt;You can specify both internal and external e-mail addresses in "E-Mail Address" field.&lt;/p&gt;&lt;p&gt;You can specify contact's manager to build organizational structure of your company.&lt;/p&gt;</value>
<value />
</data>
<data name="locAddress.Text" xml:space="preserve">
<value>Address:</value>

View file

@ -127,7 +127,7 @@
<value>Require that all senders are authenticated</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;When editing Accepted and Rejected lists of accounts, please make sure that the same account (mailbox, contact or distribution list) is not included in both lists.&lt;/p&gt;</value>
<value />
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit Contact</value>

View file

@ -139,7 +139,7 @@
<value>E-mail Address</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Company Contacts&lt;/b&gt; will be visible in GAL to all members of Exchange organization.&lt;/p&gt;&lt;p&gt;You can also create contacts to use them as forwarding accounts in mailbox properties.&lt;/p&gt;</value>
<value />
</data>
<data name="gvContacts.Empty" xml:space="preserve">
<value>No contacts have been created. To create a new contact click "Create New Contact" button.</value>

View file

@ -124,7 +124,7 @@
<value>Create Contact</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Display Name&lt;/b&gt; will be shown in the GAL in Outlook and OWA.&lt;/p&gt;&lt;p&gt;You can specify both internal and external e-mail addresses in "E-Mail Address" field.&lt;/p&gt;</value>
<value />
</data>
<data name="locDisplayName.Text" xml:space="preserve">
<value>Display Name: *</value>

View file

@ -124,7 +124,7 @@
<value>Create Distribution List</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Display Name&lt;/b&gt; will be shown in the GAL in Outlook and OWA.&lt;/p&gt;&lt;p&gt;You can add new Domain Names on "Domain Names" page. &lt;/p&gt;&lt;p&gt;&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is shown in the GAL and in "From" field of all messages sent from this DL.&lt;/p&gt;</value>
<value />
</data>
<data name="locAccount.Text" xml:space="preserve">
<value>E-mail Address: *</value>

View file

@ -130,13 +130,7 @@
<value>Equipment Mailbox</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Display Name&lt;/b&gt; is a “friendly” name used by other programs, such as Microsoft Exchange or SharePoint.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It is used as a logon name in Outlook, Outlook Web Access (OWA) or SharePoint.&lt;/p&gt;
&lt;p&gt;New organization domains can be added on "Domain Names" page.&lt;/p&gt;
&lt;p&gt;Make sure your password is strong enough, i.e. contains lower and capital letters, numbers and symbols.</value>
<value />
</data>
<data name="lbtnCreateNewMailbox.Text" xml:space="preserve">
<value>Create mailbox for new user</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreate.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Creating public folder...');</value>
@ -127,7 +127,7 @@
<value>Mail Enabled Public Folder</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;You can create both "General Purpose" and "Mail Enabled" public folders. You can post and send messages to mail enabled public folder, but only post new messages to general purpose folder.&lt;/p&gt;</value>
<value />
</data>
<data name="locEmail.Text" xml:space="preserve">
<value>E-mail Address: *</value>

View file

@ -127,7 +127,7 @@
<value>Set As Primary</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It will be used as a login in Outlook and Outlook Web Access (OWA). Also, Primary E-Mail Address will be shown in "From" field of messages sent from this mailbox.&lt;/p&gt;&lt;p&gt;You can add new Domain Names on "Domain Names" page.&lt;/p&gt;&lt;p&gt;E-mail addresses of all Exchange accounts should be unique across the organization. You cannot add the same e-mail address to several accounts.&lt;/p&gt;</value>
<value />
</data>
<data name="gvEmailAddress.Header" xml:space="preserve">
<value>E-mail Address</value>

View file

@ -127,7 +127,7 @@
<value>Hide from Address Book</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Display Name&lt;/b&gt; will be shown in the GAL in Outlook and OWA.&lt;/p&gt;&lt;p&gt;You can specify distribution list's manager to build organizational structure of your company.&lt;/p&gt;</value>
<value />
</data>
<data name="locManager.Text" xml:space="preserve">
<value>Managed By: *</value>

View file

@ -127,7 +127,7 @@
<value>Require that all senders are authenticated</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;When editing Accepted and Rejected lists of accounts, please make sure that the same account (mailbox, contact or distribution list) is not included in both lists.&lt;/p&gt;</value>
<value />
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit Distribution List</value>

View file

@ -112,13 +112,13 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;When you grant &lt;b&gt;Full Access&lt;/b&gt; permission to a user, that user can open this mailbox and access all of its content.&lt;/p&gt; &lt;br&gt;&lt;p&gt;When you grant &lt;b&gt;Send As&lt;/b&gt; permission to a user, that user can send messages as this mailbox. &lt;/p&gt;&lt;br&gt;&lt;p&gt;We do not recommend to use this setting together “Send on behalf” (“Send as”) it may work unpredictable.&lt;/p&gt;</value>
<value />
</data>
<data name="lblGrandPermissions.Text" xml:space="preserve">
<value>Grant this permission to:</value>

View file

@ -139,7 +139,7 @@
<value>E-mail Address</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Distribution List&lt;/b&gt; is a group of mailboxes, contacts and other distribution lists. Distribution lists are ideal for creating "Sales", "Support" and other "virtual" organization-wide mailboxes.&lt;/p&gt;&lt;p&gt;Each distribution list can have any number of e-mail Addresses. These e-mail addresses will be used for receiving incoming messages and distributing them to all DL members.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is shown in the GAL and in "From" field of all messages sent from this DL.&lt;/p&gt;</value>
<value />
</data>
<data name="gvLists.Empty" xml:space="preserve">
<value>No distribution lists have been created. To create a new distribution list click "Create New Distribution List" button.</value>

View file

@ -142,9 +142,7 @@
<value>Domain Name</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Each organization can have several domain names. These domain names are used as part of the primary e-mail address (UPN) of the new accounts. Exchange-enabled organizations use domain name when creating e-mail addresses for mailboxes, and distribution lists. Domain name is also used when creating new site collection in SharePoint.&lt;/p&gt;
&lt;p&gt;Default domain name is selected by default when creating a new e-mail address. You can always change default domain name and it will not affect existing accounts.&lt;/p&gt;
&lt;p&gt;For each domain name a corresponding DNS Zone is created. You can edit DNS zone records by clicking domain name link. If you are unsure about the structure of DNS zone, please do not modify zone records.&lt;/p&gt;</value>
<value />
</data>
<data name="locQuota.Text" xml:space="preserve">
<value>Total Domain Names Used:</value>

View file

@ -130,7 +130,7 @@
<value>Save</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;For each domain name a corresponding DNS Zone is created. If you are unsure about the structure of DNS zone, please do not modify zone records.&lt;/p&gt;</value>
<value />
</data>
<data name="gvRecords.Empty" xml:space="preserve">
<value>No DNS records defined.</value>

View file

@ -130,7 +130,7 @@
<value>Allow these settings to be managed from &lt;b&gt;Personal Mailbox Manager&lt;/b&gt;</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It will be used as a login in Outlook and Outlook Web Access (OWA). Also, Primary E-Mail Address will be shown in "From" field of messages sent from this mailbox.&lt;/p&gt;&lt;p&gt;You can add new Domain Names on "Domain Names" page. &lt;/p&gt;&lt;p&gt;E-mail addresses of all Exchange accounts should be unique across the organization. You cannot add the same e-mail address to several accounts.&lt;/p&gt;</value>
<value />
</data>
<data name="gvEmailAddress.Header" xml:space="preserve">
<value>E-mail Address</value>
@ -139,7 +139,7 @@
<value>The list of e-mails is empty. Add at least one e-mail address.</value>
</data>
<data name="gvPrimaryEmail.Header" xml:space="preserve">
<value>Primary E-mail Address (UPN)</value>
<value>Primary E-mail Address</value>
</data>
<data name="lblAddEmail.Text" xml:space="preserve">
<value>Add New E-mail Address</value>

View file

@ -133,7 +133,7 @@
<value>Allow these settings to be managed from &lt;b&gt;Personal Mailbox Manager&lt;/b&gt;</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;The General tab displays general information about the mailbox Use this tab to view or modify the mailbox characteristics such as size and show in your address book in the Exchange address lists. You can also specify whether to disable the mailbox user.&lt;/p&gt;</value>
<value />
</data>
<data name="locMailboxplanName.Text" xml:space="preserve">
<value>Mailbox plan:</value>

View file

@ -136,7 +136,7 @@
<value>Require that all senders are authenticated</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;When "Deliver messages to both forwarding address and mailbox" checkbox is unchecked all incoming mail will be delivered to forwarding e-mail and deleted from local mailbox.&lt;/p&gt;&lt;p&gt;When editing Accepted and Rejected lists of accounts, please make sure that the same account (mailbox, contact or distribution list) is not included in both lists.&lt;/p&gt;</value>
<value />
</data>
<data name="locForwardTo.Text" xml:space="preserve">
<value>Forward To:</value>

View file

@ -133,7 +133,7 @@
<value>There are no mobile devices.</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Manage mobile devices here.&lt;/p&gt;&lt;p&gt;To add a new device, begin a partnership with Microsoft Exchange from the device and it will appear in the device list.&lt;/p&gt;&lt;p&gt;You can remove devices that you are no longer using. If you forget your device password, you can access it here. If you lose your phone or mobile device, you can initiate a remote device wipe to protect your information.&lt;/p&gt;</value>
<value />
</data>
<data name="lastSyncTimeColumn.HeaderText" xml:space="preserve">
<value>Last Sync Time</value>

View file

@ -130,7 +130,7 @@
<value>Wipe All Data from Device</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Manage the mobile device here.&lt;/p&gt;&lt;p&gt;If you forget your device password, you can access it here. If you lose your phone or mobile device, you can initiate a remote device wipe to protect your information . You can also cancel a wipe request if it was initiated by accident or the device was found subsequently.&lt;/p&gt;</value>
<value />
</data>
<data name="locDeviceAcnowledgeTime.Text" xml:space="preserve">
<value>Device wipe acnowledge time:</value>

View file

@ -124,7 +124,7 @@
<value>Save Changes</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;When you grant &lt;b&gt;Full Access&lt;/b&gt; permission to a user, that user can open this mailbox and access all of its content.&lt;/p&gt; &lt;br&gt;&lt;p&gt;When you grant &lt;b&gt;Send As&lt;/b&gt; permission to a user, that user can send messages as this mailbox. &lt;/p&gt; &lt;br&gt;&lt;p&gt;We do not recommend to use this setting together “Send on behalf” (“Send as”) it may work unpredictable&lt;/p&gt;</value>
<value />
</data>
<data name="grandPermission.Text" xml:space="preserve">
<value>Grant this permission to:</value>

View file

@ -145,7 +145,7 @@
<value>No mailbox plans have been added yet. To add a new mailbox plan click "Add New Mailbox plan" button.</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt; A Mailbox plan is a template that defines the characteristics of a mailbox &lt;/p&gt; &lt;p&gt;The mailbox plan name needs to be unique. A mailbox plan cannot be modified. In case a mailbox needs a mailbox plan with another characteristics, a new mailbox plan needs to be created and assigned to the mailbox. A mailbox plan can only be deleted when the plan is not assigned to any mailboxes. &lt;/p&gt;</value>
<value />
</data>
<data name="locSourcePlan.Text" xml:space="preserve">
<value>Source plan: </value>

View file

@ -121,7 +121,7 @@
<value>Send</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;You can send setup instructions to the newly created mailbox user.&lt;/p&gt;</value>
<value />
</data>
<data name="lblCC.Text" xml:space="preserve">
<value>CC:</value>

View file

@ -157,13 +157,7 @@
<value>Subscriber</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Mailboxes&lt;/b&gt; are used to receive and send electronic messages. Each mailbox is a separate Exchange account which may be a person, room or inventory unit.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It is used as a logon name in Outlook, Outlook Web Access (OWA) or SharePoint. Also, Primary E-Mail Address is shown in "From" field of messages sent from this mailbox.&lt;/p&gt;
&lt;p&gt;You can always change your primary e-mail address on "E-Mail Addresses" tab of mailbox settings.&lt;/p&gt;
&lt;p&gt;Note that deleting mailbox will not delete corresponding Active Directory account. You can delete Active Directory account on “Users” page.&lt;/p&gt;</value>
<value />
</data>
<data name="locQuota.Text" xml:space="preserve">
<value>Total Mailboxes Created:</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnAddEmail.Text" xml:space="preserve">
<value>Add E-mail Address</value>
@ -127,7 +127,7 @@
<value>Set As Primary</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It will be used as a login in Outlook 2003/2007 and Outlook Web Access (OWA). Also, Primary E-Mail Address will be shown in "From" field of messages sent from this mailbox.&lt;/p&gt;&lt;p&gt;You can add new Domain Names on "Domain Names" page. We always provide you with a free domain that would allow your organization migrating to Exchange as soon as possible.&lt;/p&gt;&lt;p&gt;E-mail addresses of all Exchange accounts should be unique across the organization. You cannot add the same e-mail address to several accounts.&lt;/p&gt;</value>
<value />
</data>
<data name="gvEmailAddress.Header" xml:space="preserve">
<value>E-mail Address</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating public folder settings...');</value>
@ -130,7 +130,7 @@
<value>Mail Enabled Public Folder</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;To rename public folder just specify its new name in "Folder Name" folder.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Authors&lt;/b&gt; list contains Exchange mailboxes that are able to post/send messages to public folder. All other organization members can view folder contents only.&lt;/p&gt;</value>
<value />
</data>
<data name="locAuthors.Text" xml:space="preserve">
<value>Authors:</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
@ -127,7 +127,7 @@
<value>Enable Mail Public Folder</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>To create a new public folder ...</value>
<value />
</data>
<data name="locEmail.Text" xml:space="preserve">
<value>E-mail Address: *</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating public folder settings...');</value>
@ -127,7 +127,7 @@
<value>Require that all senders are authenticated</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;When editing Accepted and Rejected lists of accounts, please make sure that the same account (mailbox, contact or distribution list) is not included in both lists.&lt;/p&gt;</value>
<value />
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit Public Folder</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreatePublicFolder.Text" xml:space="preserve">
<value>Create New Public Folder</value>
@ -127,7 +127,7 @@
<value>Delete Selected Folders</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Public Folders&lt;/b&gt; can be used to share various information across Exchange organization.&lt;/p&gt;&lt;p&gt;All public folders of each Exchange organization are nested within a default root organization folder which is not visible to other organizations and which you cannot maintain.&lt;/p&gt;&lt;p&gt;If you need to delete a whole branch of folders you may check only top ones.&lt;/p&gt;</value>
<value />
</data>
<data name="locQuota.Text" xml:space="preserve">
<value>Total Public Folders Created:</value>

View file

@ -127,7 +127,7 @@
<value>ShowProgressDialog('Please wait...');</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Organization disk space actual usage is calculated on timely basis (usually once a day). You can recalculate it right now by clicking "Recalculate Disk Space" button.&lt;/p&gt;&lt;p&gt;Click on the link with used disk space to see actual usage breakdown by all organization mailboxes.&lt;/p&gt;</value>
<value />
</data>
<data name="locAllocatedSize.Text" xml:space="preserve">
<value>Allocated Disk Space (MB):</value>

View file

@ -121,7 +121,7 @@
<value> OK </value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;</value>
<value />
</data>
<data name="gvFolders.Empty" xml:space="preserve">
<value>There are no public folders in the organization.</value>

View file

@ -121,7 +121,7 @@
<value>Cancel</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>Select a domain name, e.g. "mydomain.com" or "sub.mydomain.com"</value>
<value />
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Add Domain Name</value>

View file

@ -124,7 +124,7 @@
<value>Create Organization</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Organization name&lt;/b&gt; is used just as display name for references purposes. It will not be used somewhere on Exchange Server.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Organization ID&lt;/b&gt; is an unique organization identifier. Organization ID will be used as GAL name.&lt;/p&gt;</value>
<value />
</data>
<data name="locOrganizationID.Text" xml:space="preserve">
<value>Organization ID: *</value>

View file

@ -127,13 +127,7 @@
<value>Send Summary Letter</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Display Name&lt;/b&gt; is a “friendly” name used by other programs, such as Microsoft Exchange or SharePoint.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It is used as a logon name in Outlook, Outlook Web Access (OWA) or SharePoint.&lt;/p&gt;
&lt;p&gt;New organization domains can be added on "Domain Names" page.&lt;/p&gt;
&lt;p&gt;Make sure your password is strong enough, i.e. contains lower and capital letters, numbers and symbols.&lt;/p&gt;</value>
<value />
</data>
<data name="locAccount.Text" xml:space="preserve">
<value>E-mail Address: *</value>

View file

@ -142,9 +142,7 @@
<value>Domain Name</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Each organization can have several domain names. These domain names are used as part of the primary e-mail address (UPN) of the new accounts. Exchange-enabled organizations use domain name when creating e-mail addresses for mailboxes, and distribution lists. Domain name is also used when creating new site collection in SharePoint.&lt;/p&gt;
&lt;p&gt;Default domain name is selected by default when creating a new e-mail address. You can always change default domain name and it will not affect existing accounts.&lt;/p&gt;
&lt;p&gt;For each domain name a corresponding DNS Zone is created. You can edit DNS zone records by clicking domain name link. If you are unsure about the structure of DNS zone, please do not modify zone records.&lt;/p&gt;</value>
<value />
</data>
<data name="locQuota.Text" xml:space="preserve">
<value>Total Domain Names Used:</value>

View file

@ -118,9 +118,7 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Welcome to the organization home page!&lt;/p&gt;
&lt;p&gt;Using the left menu you can manage organization domain names and users.&lt;/p&gt;
&lt;p&gt;Organization statistics displays current status of the organization.&lt;/p&gt;</value>
<value />
</data>
<data name="lblCreated.Text" xml:space="preserve">
<value>Created:</value>

View file

@ -133,9 +133,7 @@
<value>Set Password</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Display Name&lt;/b&gt; is a “friendly” name used by other programs, such as Microsoft Exchange or SharePoint.&lt;/p&gt;
&lt;p&gt;Make sure your password is strong enough, i.e. contains lower and capital letters, numbers and symbols.&lt;/p&gt;
&lt;p&gt;You can specify manager account to build organizational structure of your company.&lt;/p&gt;</value>
<value />
</data>
<data name="locAddress.Text" xml:space="preserve">
<value>Address:</value>
@ -239,4 +237,13 @@
<data name="lblUserPrincipalName" xml:space="preserve">
<value>Login Name:</value>
</data>
<data name="btnSetUserPassword.Text" xml:space="preserve">
<value>Set Password</value>
</data>
<data name="btnSetUserPrincipalName.Text" xml:space="preserve">
<value>Set Login Name</value>
</data>
<data name="chkInherit.Text" xml:space="preserve">
<value>Update Services</value>
</data>
</root>

View file

@ -121,7 +121,7 @@
<value>Send</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;You can send setup instructions to the newly created user.&lt;/p&gt;</value>
<value />
</data>
<data name="lblCC.Text" xml:space="preserve">
<value>CC:</value>

View file

@ -157,13 +157,7 @@
<value>Primary E-mail Address</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Active Directory user accounts are used to:&lt;/p&gt;
&lt;p&gt;• Authenticate the identity of a user.&lt;br&gt;
• Authorize or deny access to domain resources.&lt;br&gt;
• Administer other security principals.&lt;br&gt;
• Audit actions performed using the user account.&lt;/p&gt;
&lt;p&gt;Primary E-Mail Address is a User Principal Name (UPN). It is used as a logon name in Outlook, Outlook Web Access (OWA) or SharePoint.&lt;/p&gt;
&lt;p&gt;User account can also represent Exchange mailbox, which may be a person, room or inventory unit.&lt;/p&gt;</value>
<value />
</data>
<data name="locQuota.Text" xml:space="preserve">
<value>Total Users Created in this Organization:</value>

View file

@ -157,9 +157,7 @@
<value>Owner</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Organization&lt;/b&gt; is a group of Active Directory users, contacts and groups.&lt;br&gt;&lt;br&gt;
All accounts within one organization are located in the same Organizational Unit and are not visible to members of other organizations.&lt;br&gt;&lt;br&gt;
Exchange-enabled organization has its own Global Address List (GAL) and Offline Address Book (OAB). Mailboxes, contacts, and distribution lists of Exchange-enabled organization share the same GAL and OAB&lt;/p&gt;</value>
<value />
</data>
<data name="locQuota.Text" xml:space="preserve">
<value>Total Organizations Created:</value>

View file

@ -78,8 +78,17 @@
</td>
</tr>
</table>
<table>
<tr>
<td class="FormLabel150"><asp:Localize ID="locNotes" runat="server" meta:resourcekey="locNotes" Text="Notes:"></asp:Localize></td>
<td>
<asp:TextBox ID="txtNotes" runat="server" CssClass="TextBox200" Rows="4" TextMode="MultiLine"></asp:TextBox>
</td>
</tr>
</table>
<wsp:CollapsiblePanel id="secCompanyInfo" runat="server"
<wsp:CollapsiblePanel id="secCompanyInfo" runat="server" IsCollapsed="true"
TargetControlID="CompanyInfo" meta:resourcekey="secCompanyInfo" Text="Company Information">
</wsp:CollapsiblePanel>
<asp:Panel ID="CompanyInfo" runat="server" Height="0" style="overflow:hidden;">
@ -121,7 +130,7 @@
</asp:Panel>
<wsp:CollapsiblePanel id="secContactInfo" runat="server"
<wsp:CollapsiblePanel id="secContactInfo" runat="server" IsCollapsed="true"
TargetControlID="ContactInfo" meta:resourcekey="secContactInfo" Text="Contact Information">
</wsp:CollapsiblePanel>
<asp:Panel ID="ContactInfo" runat="server" Height="0" style="overflow:hidden;">
@ -165,7 +174,7 @@
</table>
</asp:Panel>
<wsp:CollapsiblePanel id="secAddressInfo" runat="server"
<wsp:CollapsiblePanel id="secAddressInfo" runat="server" IsCollapsed="true"
TargetControlID="AddressInfo" meta:resourcekey="secAddressInfo" Text="Address">
</wsp:CollapsiblePanel>
<asp:Panel ID="AddressInfo" runat="server" Height="0" style="overflow:hidden;">
@ -204,14 +213,6 @@
</table>
</asp:Panel>
<table>
<tr>
<td class="FormLabel150"><asp:Localize ID="locNotes" runat="server" meta:resourcekey="locNotes" Text="Notes:"></asp:Localize></td>
<td>
<asp:TextBox ID="txtNotes" runat="server" CssClass="TextBox200" Rows="4" TextMode="MultiLine"></asp:TextBox>
</td>
</tr>
</table>
<div class="FormFooterClean">
<asp:Button id="btnSave" runat="server" Text="Save Changes" CssClass="Button1" meta:resourcekey="btnSave" ValidationGroup="EditContact" OnClick="btnSave_Click"></asp:Button>

View file

@ -1,3 +1,31 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
@ -228,6 +256,24 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtLastName;
/// <summary>
/// locNotes control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locNotes;
/// <summary>
/// txtNotes control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtNotes;
/// <summary>
/// secCompanyInfo control.
/// </summary>
@ -570,24 +616,6 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.CountrySelector country;
/// <summary>
/// locNotes control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locNotes;
/// <summary>
/// txtNotes control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtNotes;
/// <summary>
/// btnSave control.
/// </summary>
@ -605,14 +633,5 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1;
/// <summary>
/// FormComments control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize FormComments;
}
}

View file

@ -103,8 +103,7 @@ namespace WebsitePanel.Portal.ExchangeServer
int result = ES.Services.Organizations.DeleteOrganizationDomain(PanelRequest.ItemID, domainId);
if (result < 0)
{
messageBox.ShowResultMessage(result);
return;
messageBox.ShowErrorMessage("EXCHANGE_UNABLE_TO_DELETE_DOMAIN");
}
// rebind domains

View file

@ -73,7 +73,7 @@
<asp:CheckBox ID="chkSelectAll" runat="server" onclick="javascript:SelectAllCheckboxes(this);" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" Enabled='<%# !(bool)Eval("IsPrimary") %>' />
<asp:CheckBox ID="chkSelect" runat="server" Enabled='<%# !((bool)Eval("IsPrimary") | (bool)Eval("IsUserPrincipalName"))%>' />
</ItemTemplate>
<ItemStyle Width="10px" />
</asp:TemplateField>
@ -87,7 +87,7 @@
<ItemTemplate>
<div style="text-align:center">
&nbsp;
<asp:Image ID="Image1" runat="server" SkinID="Checkbox16" Visible='<%# Eval("IsPrimary") %>' />
<asp:Image ID="Image1" runat="server" SkinID="Checkbox16" Visible='<%# (bool)Eval("IsPrimary")%>' />
</div>
</ItemTemplate>
</asp:TemplateField>

View file

@ -1,3 +1,31 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
@ -182,14 +210,5 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.CheckBox chkPmmAllowed;
/// <summary>
/// FormComments control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize FormComments;
}
}

View file

@ -71,7 +71,7 @@
<asp:TemplateField HeaderText="gvUsersLogin" SortExpression="UserPrincipalName">
<ItemStyle></ItemStyle>
<ItemTemplate>
<asp:hyperlink id="lnk1" runat="server"
<asp:hyperlink id="lnk2" runat="server"
NavigateUrl='<%# GetOrganizationUserEditUrl(Eval("AccountId").ToString()) %>'>
<%# Eval("UserPrincipalName") %>
</asp:hyperlink>

View file

@ -103,8 +103,7 @@ namespace WebsitePanel.Portal.ExchangeServer
int result = ES.Services.Organizations.DeleteOrganizationDomain(PanelRequest.ItemID, domainId);
if (result < 0)
{
messageBox.ShowResultMessage(result);
return;
messageBox.ShowErrorMessage("EXCHANGE_UNABLE_TO_DELETE_DOMAIN");
}
// rebind domains

View file

@ -4,10 +4,11 @@
<%@ Register Src="../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/PasswordControl.ascx" TagName="PasswordControl" TagPrefix="wsp" %>
<%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="../UserControls/CollapsiblePanel.ascx" %>
<%@ Register Src="../UserControls/CollapsiblePanel.ascx" TagName="CollapsiblePanel" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
<%@ Register Src="UserControls/Menu.ascx" TagName="Menu" TagPrefix="wsp" %>
<%@ Register Src="UserControls/Breadcrumb.ascx" TagName="Breadcrumb" TagPrefix="wsp" %>
<%@ Register Src="UserControls/EmailAddress.ascx" TagName="EmailAddress" TagPrefix="wsp" %>
@ -43,7 +44,18 @@
<table>
<tr>
<td class="FormLabel150"> <asp:Localize ID="locUserPrincipalName" runat="server" meta:resourcekey="locUserPrincipalName" Text="Login Name:"></asp:Localize></td>
<td><asp:Label runat="server" ID="lblUserPrincipalName" /></td>
<td>
<asp:Label runat="server" ID="lblUserPrincipalName" />
<wsp:EmailAddress id="upn" runat="server" ValidationGroup="CreateMailbox"></wsp:EmailAddress>
<asp:DropDownList ID="ddlEmailAddresses" runat="server" CssClass="NormalTextBox"></asp:DropDownList>
</td>
<td>
<asp:Button id="btnSetUserPrincipalName" runat="server" Text="Set Login" CssClass="Button1"
meta:resourcekey="btnSetUserPrincipalName" OnClick="btnSetUserPrincipalName_Click"></asp:Button>
</td>
<td>
<asp:CheckBox ID="chkInherit" runat="server" meta:resourcekey="chkInherit" Text="Services inherit Login Name" checked="true"/>
</td>
</tr>
<tr>
@ -58,8 +70,13 @@
<tr>
<td class="FormLabel150" valign="top"><asp:Localize ID="locPassword" runat="server" meta:resourcekey="locPassword" Text="Password:"></asp:Localize></td>
<td>
<wsp:PasswordControl id="password" runat="server" ValidationGroup="EditMailbox">
<wsp:PasswordControl id="password" runat="server" ValidationGroup="ValidatePassword">
</wsp:PasswordControl>
</td>
<td>
<asp:Button id="btnSetUserPassword" runat="server" Text="Set Password" CssClass="Button1"
meta:resourcekey="btnSetUserPassword" OnClick="btnSetUserPassword_Click" ValidationGroup="ValidatePassword"></asp:Button>
<asp:ValidationSummary ID="ValidationSummary2" runat="server" ShowMessageBox="True" ShowSummary="False" ValidationGroup="ValidatePassword" />
</td>
</tr>
@ -67,9 +84,6 @@
<tr>
<td></td>
<td>
<asp:CheckBox ID="chkSetPassword" runat="server"
meta:resourcekey="chkSetPassword" Text="Set Password"
oncheckedchanged="chkSetPassword_CheckedChanged" AutoPostBack="True" />
<br />
<asp:CheckBox ID="chkDisable" runat="server" meta:resourcekey="chkDisable" Text="Disable User" />
<br />
@ -102,8 +116,17 @@
</tr>
</table>
<table>
<tr>
<td class="FormLabel150"><asp:Localize ID="locNotes" runat="server" meta:resourcekey="locNotes" Text="Notes:"></asp:Localize></td>
<td>
<asp:TextBox ID="txtNotes" runat="server" CssClass="TextBox200" Rows="4" TextMode="MultiLine"></asp:TextBox>
</td>
</tr>
</table>
<wsp:CollapsiblePanel id="secCompanyInfo" runat="server"
<wsp:CollapsiblePanel id="secCompanyInfo" runat="server" IsCollapsed="true"
TargetControlID="CompanyInfo" meta:resourcekey="secCompanyInfo" Text="Company Information">
</wsp:CollapsiblePanel>
<asp:Panel ID="CompanyInfo" runat="server" Height="0" style="overflow:hidden;">
@ -142,7 +165,7 @@
</asp:Panel>
<wsp:CollapsiblePanel id="secContactInfo" runat="server"
<wsp:CollapsiblePanel id="secContactInfo" runat="server" IsCollapsed="true"
TargetControlID="ContactInfo" meta:resourcekey="secContactInfo" Text="Contact Information">
</wsp:CollapsiblePanel>
@ -187,7 +210,7 @@
</table>
</asp:Panel>
<wsp:CollapsiblePanel id="secAddressInfo" runat="server"
<wsp:CollapsiblePanel id="secAddressInfo" runat="server" IsCollapsed="true"
TargetControlID="AddressInfo" meta:resourcekey="secAddressInfo" Text="Address">
</wsp:CollapsiblePanel>
<asp:Panel ID="AddressInfo" runat="server" Height="0" style="overflow:hidden;">
@ -225,21 +248,10 @@
</table>
</asp:Panel>
<table>
<tr>
<td class="FormLabel150"><asp:Localize ID="locNotes" runat="server" meta:resourcekey="locNotes" Text="Notes:"></asp:Localize></td>
<td>
<asp:TextBox ID="txtNotes" runat="server" CssClass="TextBox200" Rows="4" TextMode="MultiLine"></asp:TextBox>
</td>
</tr>
</table>
<wsp:CollapsiblePanel id="secAdvanced" runat="server"
<wsp:CollapsiblePanel id="secAdvanced" runat="server" IsCollapsed="true"
TargetControlID="AdvancedInfo" meta:resourcekey="secAdvanced" Text="Advanced">
</wsp:CollapsiblePanel>
<asp:Panel ID="AdvancedInfo" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>

View file

@ -27,6 +27,7 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Web.UI.WebControls;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
@ -63,8 +64,6 @@ namespace WebsitePanel.Portal.HostedSolution
}
}
password.EditMode = password.ValidationEnabled = false;
// get settings
OrganizationUser user = ES.Services.Organizations.GetUserGeneralSettings(PanelRequest.ItemID,
PanelRequest.AccountID);
@ -120,6 +119,67 @@ namespace WebsitePanel.Portal.HostedSolution
}
}
if (cntx.Quotas.ContainsKey(Quotas.ORGANIZATION_ALLOWCHANGEUPN))
{
if (cntx.Quotas[Quotas.ORGANIZATION_ALLOWCHANGEUPN].QuotaAllocatedValue != 1)
{
lblUserPrincipalName.Visible = true;
upn.Visible = false;
ddlEmailAddresses.Visible = false;
btnSetUserPrincipalName.Visible = false;
chkInherit.Visible = false;
}
else
{
lblUserPrincipalName.Visible = false;
upn.Visible = false;
ddlEmailAddresses.Visible = false;
btnSetUserPrincipalName.Visible = true;
chkInherit.Visible = true;
if (user.AccountType == ExchangeAccountType.Mailbox)
{
ddlEmailAddresses.Visible = true;
WebsitePanel.EnterpriseServer.ExchangeEmailAddress[] emails = ES.Services.ExchangeServer.GetMailboxEmailAddresses(PanelRequest.ItemID, PanelRequest.AccountID);
foreach (WebsitePanel.EnterpriseServer.ExchangeEmailAddress mail in emails)
{
ListItem li = new ListItem();
li.Text = mail.EmailAddress;
li.Value = mail.EmailAddress;
li.Selected = mail.IsPrimary;
ddlEmailAddresses.Items.Add(li);
}
foreach (ListItem li in ddlEmailAddresses.Items)
{
if (li.Value == user.UserPrincipalName)
{
ddlEmailAddresses.ClearSelection();
li.Selected = true;
break;
}
}
}
else
{
upn.Visible = true;
if (!string.IsNullOrEmpty(user.UserPrincipalName))
{
string[] Tmp = user.UserPrincipalName.Split('@');
upn.AccountName = Tmp[0];
if (Tmp.Length > 1)
{
upn.DomainName = Tmp[1];
}
}
}
}
}
if (user.Locked)
chkLocked.Enabled = true;
else
@ -127,6 +187,8 @@ namespace WebsitePanel.Portal.HostedSolution
chkLocked.Checked = user.Locked;
password.ValidationEnabled = true;
password.Password = string.Empty;
}
catch (Exception ex)
{
@ -139,17 +201,12 @@ namespace WebsitePanel.Portal.HostedSolution
if (!Page.IsValid)
return;
string pwd = password.Password;
if (!chkSetPassword.Checked)
pwd = string.Empty;
try
{
int result = ES.Services.Organizations.SetUserGeneralSettings(
PanelRequest.ItemID, PanelRequest.AccountID,
txtDisplayName.Text,
pwd,
string.Empty,
false,
chkDisable.Checked,
chkLocked.Checked,
@ -204,10 +261,66 @@ namespace WebsitePanel.Portal.HostedSolution
SaveSettings();
}
protected void chkSetPassword_CheckedChanged(object sender, EventArgs e)
protected void btnSetUserPrincipalName_Click(object sender, EventArgs e)
{
password.EditMode = password.ValidationEnabled = chkSetPassword.Checked;
string userPrincipalName = string.Empty;
if (upn.Visible)
userPrincipalName = upn.Email;
else
if (ddlEmailAddresses.Visible)
userPrincipalName = (string)ddlEmailAddresses.SelectedValue;
if (string.IsNullOrEmpty(userPrincipalName)) return;
try
{
int result = ES.Services.Organizations.SetUserPrincipalName(
PanelRequest.ItemID, PanelRequest.AccountID,
userPrincipalName.ToLower(),
chkInherit.Checked);
if (result < 0)
{
messageBox.ShowResultMessage(result);
return;
}
messageBox.ShowSuccessMessage("ORGANIZATION_SET_USER_USERPRINCIPALNAME");
}
catch (Exception ex)
{
messageBox.ShowErrorMessage("ORGANIZATION_SET_USER_USERPRINCIPALNAME", ex);
}
}
protected void btnSetUserPassword_Click(object sender, EventArgs e)
{
if (!Page.IsValid)
return;
try
{
int result = ES.Services.Organizations.SetUserPassword(
PanelRequest.ItemID, PanelRequest.AccountID,
password.Password);
if (result < 0)
{
messageBox.ShowResultMessage(result);
return;
}
messageBox.ShowSuccessMessage("ORGANIZATION_SET_USER_PASSWORD");
}
catch (Exception ex)
{
messageBox.ShowErrorMessage("ORGANIZATION_SET_USER_PASSWORD", ex);
}
}
}

View file

@ -139,6 +139,42 @@ namespace WebsitePanel.Portal.HostedSolution {
/// </remarks>
protected global::System.Web.UI.WebControls.Label lblUserPrincipalName;
/// <summary>
/// upn control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.EmailAddress upn;
/// <summary>
/// ddlEmailAddresses control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlEmailAddresses;
/// <summary>
/// btnSetUserPrincipalName control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnSetUserPrincipalName;
/// <summary>
/// chkInherit control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.CheckBox chkInherit;
/// <summary>
/// locDisplayName control.
/// </summary>
@ -185,13 +221,22 @@ namespace WebsitePanel.Portal.HostedSolution {
protected global::WebsitePanel.Portal.PasswordControl password;
/// <summary>
/// chkSetPassword control.
/// btnSetUserPassword control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.CheckBox chkSetPassword;
protected global::System.Web.UI.WebControls.Button btnSetUserPassword;
/// <summary>
/// ValidationSummary2 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary2;
/// <summary>
/// chkDisable control.
@ -301,6 +346,24 @@ namespace WebsitePanel.Portal.HostedSolution {
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtExternalEmailAddress;
/// <summary>
/// locNotes control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locNotes;
/// <summary>
/// txtNotes control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtNotes;
/// <summary>
/// secCompanyInfo control.
/// </summary>
@ -643,24 +706,6 @@ namespace WebsitePanel.Portal.HostedSolution {
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.CountrySelector country;
/// <summary>
/// locNotes control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locNotes;
/// <summary>
/// txtNotes control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtNotes;
/// <summary>
/// secAdvanced control.
/// </summary>

View file

@ -37,6 +37,18 @@ namespace WebsitePanel.Portal.ExchangeServer.UserControls
public string DomainName
{
get { return ddlDomain.SelectedItem.Text; }
set
{
foreach (ListItem li in ddlDomain.Items)
{
if (li.Value == value)
{
ddlDomain.ClearSelection();
li.Selected = true;
break;
}
}
}
}
public int DomainId

View file

@ -69,13 +69,17 @@ namespace WebsitePanel.Portal.ExchangeServer.UserControls
{
return domain.DomainName;
}
set
{
domain.DomainName = value;
}
}
public string Email
{
get
{
return AccountName + "@" + DomainName;
return string.Format("{0}@{1}",AccountName, DomainName).ToLower();
}
}

View file

@ -118,7 +118,7 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt; A plan is a template that defines the characteristics of a lync users &lt;/p&gt; &lt;p&gt;The plan name needs to be unique. A plan cannot be modified. In case a user needs a plan with another characteristics, a new plan needs to be created and assigned to the user. A plan can only be deleted when the plan is not assigned to any users. &lt;/p&gt;</value>
<value />
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Add Lync User Plan</value>

View file

@ -124,7 +124,7 @@
<value>Create</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>Select an existing Organization user and click the “Create” button to enable an individual user account for Microsoft Lync Server.</value>
<value />
</data>
<data name="locDisplayName.Text" xml:space="preserve">
<value>Display name* :</value>

View file

@ -124,7 +124,7 @@
<value>Save changes</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt; A plan is a template that defines the capabilities of a lync user. In order to change the plan assigned to this user, select a plan and click the Save Changes button &lt;/p&gt;</value>
<value />
</data>
<data name="locDisplayName.Text" xml:space="preserve">
<value>Display name:</value>

View file

@ -136,11 +136,7 @@
<value>Domain Name</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;By adding a federation domain you allow your users, that are enabled for federation, to interact through Lync with users from the specified domain. Your users as well as the users from the federated domain will see eachother status. &lt;/p&gt;
&lt;p&gt;Federation is a mutual agreement between you and your federation partner (owner of the domain you want to federate with). Once you have added the federation domain to your list, your partner will need to do the same from his side&lt;/p&gt;
</value>
<value />
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Lync Federation Domains</value>

View file

@ -142,7 +142,7 @@
<value>No plans have been added yet. To add a new plan click "Add New Plan" button.</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt; A plan is a template that defines the capabilities of a lync users &lt;/p&gt; &lt;p&gt;The plan name needs to be unique. A plan cannot be modified. In case a lync user needs a plan with another characteristics, a new plan needs to be created and assigned to the lync user. A plan can only be deleted when the plan is not assigned to any lync users. &lt;/p&gt;</value>
<value />
</data>
<data name="locSourcePlan.Text" xml:space="preserve">
<value>Source plan: </value>

View file

@ -130,9 +130,7 @@
<value>Login</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Microsoft Lync Server delivers unified communications to the users, including software-powered VoIP, Web and audio/video conferencing, and enterprise instant messaging.&lt;/p&gt;
&lt;p&gt;Click the “Create Lync User” button to enable a user account for Microsoft Lync Server. &lt;/p&gt;
&lt;p&gt;If you delete an account in Microsoft Lync Server, the account is no longer available for use with Microsoft Lync Server unless you enable the account again. When you delete an account, all Lync Server settings for the account are lost, so you must configure the account again after enabling.&lt;/p&gt;</value>
<value />
</data>
<data name="gvUsersDisplayName.HeaderText" xml:space="preserve">
<value>Display name</value>

View file

@ -158,6 +158,7 @@ namespace WebsitePanel.Portal.Lync
if (result < 0)
{
messageBox.ShowResultMessage(result);
messageBox.ShowErrorMessage("LYNC_UNABLE_TO_ADD_PLAN");
return;
}

View file

@ -67,7 +67,7 @@
<asp:TemplateField HeaderText="gvUsersLogin" SortExpression="UserPrincipalName">
<ItemStyle ></ItemStyle>
<ItemTemplate>
<asp:hyperlink id="lnk1" runat="server"
<asp:hyperlink id="lnk2" runat="server"
NavigateUrl='<%# GetOrganizationUserEditUrl(Eval("AccountId").ToString()) %>'>
<%# Eval("UserPrincipalName") %>
</asp:hyperlink>

View file

@ -1,2 +1,5 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LyncUserSettings.ascx.cs" Inherits="WebsitePanel.Portal.Lync.UserControls.LyncUserSettings" %>
<asp:DropDownList ID="ddlSipAddresses" runat="server" CssClass="NormalTextBox"></asp:DropDownList>
<%@ Register Src="../../ExchangeServer/UserControls/EmailAddress.ascx" TagName="EmailAddress" TagPrefix="wsp" %>
<asp:DropDownList ID="ddlSipAddresses" runat="server" CssClass="NormalTextBox"></asp:DropDownList>
<wsp:EmailAddress id="email" runat="server" ValidationGroup="CreateMailbox"></wsp:EmailAddress>

View file

@ -28,7 +28,9 @@
using System;
using System.Web.UI.WebControls;
using EntServer = WebsitePanel.EnterpriseServer;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
namespace WebsitePanel.Portal.Lync.UserControls
{
@ -40,17 +42,50 @@ namespace WebsitePanel.Portal.Lync.UserControls
public string sipAddress
{
get { return ddlSipAddresses.SelectedItem.Value; }
get
{
if (ddlSipAddresses.Visible)
{
if ((ddlSipAddresses != null) && (ddlSipAddresses.SelectedItem != null))
return ddlSipAddresses.SelectedItem.Value;
else
return string.Empty;
}
else
{
return email.Email;
}
}
set
{
sipAddressToSelect = value;
foreach (ListItem li in ddlSipAddresses.Items)
if (ddlSipAddresses.Visible)
{
if (li.Value == value)
if ((ddlSipAddresses != null) && (ddlSipAddresses.Items != null))
{
ddlSipAddresses.ClearSelection();
li.Selected = true;
break;
foreach (ListItem li in ddlSipAddresses.Items)
{
if (li.Value == value)
{
ddlSipAddresses.ClearSelection();
li.Selected = true;
break;
}
}
}
}
else
{
if (!string.IsNullOrEmpty(value))
{
string[] Tmp = value.Split('@');
email.AccountName = Tmp[0];
if (Tmp.Length > 1)
{
email.DomainName = Tmp[1];
}
}
}
}
@ -76,25 +111,54 @@ namespace WebsitePanel.Portal.Lync.UserControls
private void BindAddresses()
{
EntServer.ExchangeEmailAddress[] emails = ES.Services.ExchangeServer.GetMailboxEmailAddresses(PanelRequest.ItemID, PanelRequest.AccountID);
OrganizationUser user = ES.Services.Organizations.GetUserGeneralSettings(PanelRequest.ItemID, PanelRequest.AccountID);
foreach (EntServer.ExchangeEmailAddress email in emails)
{
ListItem li = new ListItem();
li.Text = email.EmailAddress;
li.Value = email.EmailAddress;
li.Selected = email.IsPrimary;
ddlSipAddresses.Items.Add(li);
}
if (user == null)
return;
foreach (ListItem li in ddlSipAddresses.Items)
if (user.AccountType == ExchangeAccountType.Mailbox)
{
if (li.Value == sipAddressToSelect)
email.Visible = false;
ddlSipAddresses.Visible = true;
WebsitePanel.EnterpriseServer.ExchangeEmailAddress[] emails = ES.Services.ExchangeServer.GetMailboxEmailAddresses(PanelRequest.ItemID, PanelRequest.AccountID);
foreach (WebsitePanel.EnterpriseServer.ExchangeEmailAddress mail in emails)
{
ddlSipAddresses.ClearSelection();
li.Selected = true;
break;
ListItem li = new ListItem();
li.Text = mail.EmailAddress;
li.Value = mail.EmailAddress;
li.Selected = mail.IsPrimary;
ddlSipAddresses.Items.Add(li);
}
foreach (ListItem li in ddlSipAddresses.Items)
{
if (li.Value == sipAddressToSelect)
{
ddlSipAddresses.ClearSelection();
li.Selected = true;
break;
}
}
}
else
{
email.Visible = true;
ddlSipAddresses.Visible = false;
if (!string.IsNullOrEmpty(sipAddressToSelect))
{
string[] Tmp = sipAddressToSelect.Split('@');
email.AccountName = Tmp[0];
if (Tmp.Length > 1)
{
email.DomainName = Tmp[1];
}
}
}
}

View file

@ -48,5 +48,14 @@ namespace WebsitePanel.Portal.Lync.UserControls {
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlSipAddresses;
/// <summary>
/// email control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.EmailAddress email;
}
}

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="breadcrumb.PageName" xml:space="preserve">
<value>Create OCS User</value>
@ -124,7 +124,7 @@
<value>Create</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>Select an existing Organization user and click the “Create” button to enable an individual user account for Office Communications Server.</value>
<value />
</data>
<data name="locDisplayName.Text" xml:space="preserve">
<value>Display name* :</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="breadcrumb.PageName" xml:space="preserve">
<value>Edit OCS User</value>
@ -139,12 +139,7 @@
<value>Enable Public IM connectivity</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Sign-in name&lt;/b&gt; specifies the Session Initiation Protocol (SIP) address that is currently registered for this user and will be used to route messages to and from the user. The sign-in name is in the form "sip:user@domain" and must be unique.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Federation&lt;/b&gt; specifies whether the user can communicate with users from other organizations that have an Office Communications Server deployment and a federated link.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Public IM connectivity&lt;/b&gt; specifies whether the user can communicate with users who are hosted on AOL, Yahoo!, or the MSN network of Internet services.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Archiving&lt;/b&gt; enables or disables archiving of IM conversations of the user. Archiving can be enabled independently for internal conversations and for conversations with users outside your organization.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Enhanced presence&lt;/b&gt; enables users to control their presence with more granularity. Enhanced presence enables users to create different presence categories and assign data items to the categories.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; Some settings cannot be configured for individual users depending on the Global Properties.&lt;/p&gt;</value>
<value />
</data>
<data name="locDisplayName.Text" xml:space="preserve">
<value>Display name:</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="breadcrumb.PageName" xml:space="preserve">
<value>OCS Users</value>
@ -130,9 +130,7 @@
<value>Sign-in name</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Office Communications Server delivers streamlined communications to the users, including software-powered VoIP, Web and audio/video conferencing, and enterprise instant messaging.&lt;/p&gt;
&lt;p&gt;Click the “Create OCS User” button to enable an individual user account for Office Communications Server. &lt;/p&gt;
&lt;p&gt;If you delete an account in Office Communications Server, the account is no longer available for use with Office Communications Server unless you enable the account again. When you delete an account, all Office Communications Server settings for the account are lost, so you must configure the account again after enabling.&lt;/p&gt;</value>
<value />
</data>
<data name="gvUsersDisplayName.HeaderText" xml:space="preserve">
<value>Display name</value>

View file

@ -56,8 +56,8 @@ REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\OCSProxy.cs
REM %WSDL% %SERVER_URL%/esOperatingSystems.asmx /out:.\WebsitePanel.EnterpriseServer.Client\OperatingSystemsProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient
REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\OperatingSystemsProxy.cs
REM %WSDL% %SERVER_URL%/esOrganizations.asmx /out:.\WebsitePanel.EnterpriseServer.Client\OrganizationProxy.cs /namespace:WebsitePanel.EnterpriseServer.HostedSolution /type:webClient
REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\OrganizationProxy.cs
%WSDL% %SERVER_URL%/esOrganizations.asmx /out:.\WebsitePanel.EnterpriseServer.Client\OrganizationProxy.cs /namespace:WebsitePanel.EnterpriseServer.HostedSolution /type:webClient
%WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\OrganizationProxy.cs
REM %WSDL% %SERVER_URL%/esPackages.asmx /out:.\WebsitePanel.EnterpriseServer.Client\PackagesProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient
REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\PackagesProxy.cs
@ -92,8 +92,8 @@ REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\WebServersProxy.cs
REM %WSDL% %SERVER_URL%/esVirtualizationServerForPrivateCloud.asmx /out:.\WebsitePanel.EnterpriseServer.Client\VirtualizationServerProxyForPrivateCloud.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient
REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\VirtualizationServerProxyForPrivateCloud.cs
%WSDL% %SERVER_URL%/esLync.asmx /out:.\WebsitePanel.EnterpriseServer.Client\LyncProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient
%WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\LyncProxy.cs
REM %WSDL% %SERVER_URL%/esLync.asmx /out:.\WebsitePanel.EnterpriseServer.Client\LyncProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient
REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\LyncProxy.cs

View file

@ -35,8 +35,8 @@ REM %WSE_CLEAN% .\WebsitePanel.Server.Client\OCSServerProxy.cs
REM %WSDL% %SERVER_URL%/OperatingSystem.asmx /out:.\WebsitePanel.Server.Client\OperatingSystemProxy.cs /namespace:WebsitePanel.Providers.OS /type:webClient /fields
REM %WSE_CLEAN% .\WebsitePanel.Server.Client\OperatingSystemProxy.cs
REM %WSDL% %SERVER_URL%/Organizations.asmx /out:.\WebsitePanel.Server.Client\OrganizationProxy.cs /namespace:WebsitePanel.Providers.HostedSolution /type:webClient /fields
REM %WSE_CLEAN% .\WebsitePanel.Server.Client\OrganizationProxy.cs
%WSDL% %SERVER_URL%/Organizations.asmx /out:.\WebsitePanel.Server.Client\OrganizationProxy.cs /namespace:WebsitePanel.Providers.HostedSolution /type:webClient /fields
%WSE_CLEAN% .\WebsitePanel.Server.Client\OrganizationProxy.cs
REM %WSDL% %SERVER_URL%/ServiceProvider.asmx /out:.\WebsitePanel.Server.Client\ServiceProviderProxy.cs /namespace:WebsitePanel.Providers /type:webClient /fields
REM %WSE_CLEAN% .\WebsitePanel.Server.Client\ServiceProviderProxy.cs
@ -56,7 +56,7 @@ REM %WSE_CLEAN% .\WebsitePanel.Server.Client\WebServerProxy.cs
REM %WSDL% %SERVER_URL%/WindowsServer.asmx /out:.\WebsitePanel.Server.Client\WindowsServerProxy.cs /namespace:WebsitePanel.Server /type:webClient /fields
REM %WSE_CLEAN% .\WebsitePanel.Server.Client\WindowsServerProxy.cs
%WSDL% %SERVER_URL%/LyncServer.asmx /out:.\WebsitePanel.Server.Client\LyncServerProxy.cs /namespace:WebsitePanel.Providers.Lync /type:webClient /fields
%WSE_CLEAN% .\WebsitePanel.Server.Client\LyncServerProxy.cs
REM %WSDL% %SERVER_URL%/LyncServer.asmx /out:.\WebsitePanel.Server.Client\LyncServerProxy.cs /namespace:WebsitePanel.Providers.Lync /type:webClient /fields
REM %WSE_CLEAN% .\WebsitePanel.Server.Client\LyncServerProxy.cs