websitepanel/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/LyncController.cs
robvde 6cf946b6b4 Fixed:
Decoupling of userprincipalName and PrimaryEmailAddress
OrganizationUsers updated with image buttons with the ability to go directly
to offering settings
When changing primaryemailaddress, sip address changes accordingly
Mailboxes list view updated with Login (=userprincipalName) with the ability
to go directly to user setting
Lync list view updated with Login (=userprincipalName) with the ability
to go directly to user setting
2012-11-22 13:16:41 +04:00

1032 lines
38 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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.
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.Xml;
using WebsitePanel.Providers;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.Providers.Lync;
namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
{
public class LyncController
{
public static LyncServer GetLyncServer(int lyncServiceId, int organizationServiceId)
{
LyncServer ws = new LyncServer();
ServiceProviderProxy.Init(ws, lyncServiceId);
string[] lyncSettings = ws.ServiceProviderSettingsSoapHeaderValue.Settings;
List<string> resSettings = new List<string>(lyncSettings);
ExtendLyncSettings(resSettings, "primarydomaincontroller", GetProviderProperty(organizationServiceId, "primarydomaincontroller"));
ExtendLyncSettings(resSettings, "rootou", GetProviderProperty(organizationServiceId, "rootou"));
ws.ServiceProviderSettingsSoapHeaderValue.Settings = resSettings.ToArray();
return ws;
}
private static string GetProviderProperty(int organizationServiceId, string property)
{
Organizations orgProxy = new Organizations();
ServiceProviderProxy.Init(orgProxy, organizationServiceId);
string[] organizationSettings = orgProxy.ServiceProviderSettingsSoapHeaderValue.Settings;
string value = string.Empty;
foreach (string str in organizationSettings)
{
string[] props = str.Split('=');
if (props[0].ToLower() == property)
{
value = str;
break;
}
}
return value;
}
private static void ExtendLyncSettings(List<string> lyncSettings, string property, string value)
{
bool isAdded = false;
for (int i = 0; i < lyncSettings.Count; i++)
{
string[] props = lyncSettings[i].Split('=');
if (props[0].ToLower() == property)
{
lyncSettings[i] = value;
isAdded = true;
break;
}
}
if (!isAdded)
{
lyncSettings.Add(value);
}
}
private static int GetLyncServiceID(int packageId)
{
return PackageController.GetPackageServiceId(packageId, ResourceGroups.Lync);
}
private static bool CheckQuota(int itemId)
{
Organization org = OrganizationController.GetOrganization(itemId);
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
IntResult userCount = GetLyncUsersCount(itemId);
int allocatedUsers = cntx.Quotas[Quotas.LYNC_USERS].QuotaAllocatedValue;
return allocatedUsers == -1 || allocatedUsers > userCount.Value;
}
public static LyncUserResult CreateLyncUser(int itemId, int accountId, int lyncUserPlanId)
{
LyncUserResult res = TaskManager.StartResultTask<LyncUserResult>("LYNC", "CREATE_LYNC_USER");
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.NOT_AUTHORIZED);
return res;
}
LyncUser retLyncUser = new LyncUser();
bool isLyncUser;
isLyncUser = DataProvider.CheckLyncUserExists(accountId);
if (isLyncUser)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.USER_IS_ALREADY_LYNC_USER);
return res;
}
OrganizationUser user;
user = OrganizationController.GetAccount(itemId, accountId);
if (user == null)
{
TaskManager.CompleteResultTask(res, ErrorCodes.CANNOT_GET_ACCOUNT);
return res;
}
user = OrganizationController.GetUserGeneralSettings(itemId, accountId);
if (string.IsNullOrEmpty(user.FirstName))
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.USER_FIRST_NAME_IS_NOT_SPECIFIED);
return res;
}
if (string.IsNullOrEmpty(user.LastName))
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.USER_LAST_NAME_IS_NOT_SPECIFIED);
return res;
}
bool quota = CheckQuota(itemId);
if (!quota)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.USER_QUOTA_HAS_BEEN_REACHED);
return res;
}
LyncServer lync;
try
{
bool bReloadConfiguration = false;
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
{
throw new ApplicationException(
string.Format("Organization is null. ItemId={0}", itemId));
}
int lyncServiceId = GetLyncServiceID(org.PackageId);
lync = GetLyncServer(lyncServiceId, org.ServiceId);
if (string.IsNullOrEmpty(org.LyncTenantId))
{
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
org.LyncTenantId = lync.CreateOrganization(org.OrganizationId,
org.DefaultDomain,
Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_CONFERENCING].QuotaAllocatedValue),
Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_ALLOWVIDEO].QuotaAllocatedValue),
Convert.ToInt32(cntx.Quotas[Quotas.LYNC_MAXPARTICIPANTS].QuotaAllocatedValue),
Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_FEDERATION].QuotaAllocatedValue),
Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_ENTERPRISEVOICE].QuotaAllocatedValue));
if (string.IsNullOrEmpty(org.LyncTenantId))
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_ENABLE_ORG);
return res;
}
else
{
DomainInfo domain = ServerController.GetDomain(org.DefaultDomain);
//Add the service records
if (domain != null)
{
if (domain.ZoneItemId != 0)
{
ServerController.AddServiceDNSRecords(org.PackageId, ResourceGroups.Lync, domain, "");
}
}
PackageController.UpdatePackageItem(org);
bReloadConfiguration = true;
}
}
LyncUserPlan plan = GetLyncUserPlan(itemId, lyncUserPlanId);
if (!lync.CreateUser(org.OrganizationId, user.UserPrincipalName, plan))
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_ADD_LYNC_USER);
return res;
}
if (bReloadConfiguration)
{
LyncControllerAsync userWorker = new LyncControllerAsync();
userWorker.LyncServiceId = lyncServiceId;
userWorker.OrganizationServiceId = org.ServiceId;
userWorker.Enable_CsComputerAsync();
}
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_ADD_LYNC_USER, ex);
return res;
}
try
{
DataProvider.AddLyncUser(accountId, lyncUserPlanId, user.UserPrincipalName);
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_ADD_LYNC_USER_TO_DATABASE, ex);
return res;
}
res.IsSuccess = true;
TaskManager.CompleteResultTask();
return res;
}
private static int[] ParseMultiSetting(int lyncServiceId, string settingName)
{
List<int> retIds = new List<int>();
StringDictionary settings = ServerController.GetServiceSettings(lyncServiceId);
if (!String.IsNullOrEmpty(settings[settingName]))
{
string[] ids = settings[settingName].Split(',');
int res;
foreach (string id in ids)
{
if (int.TryParse(id, out res))
retIds.Add(res);
}
}
if (retIds.Count == 0)
retIds.Add(lyncServiceId);
return retIds.ToArray();
}
public static void GetLyncServices(int lyncServiceId, out int[] lyncServiceIds)
{
lyncServiceIds = ParseMultiSetting(lyncServiceId, "LyncServersServiceID");
}
public static LyncUser GetLyncUserGeneralSettings(int itemId, int accountId)
{
TaskManager.StartTask("LYNC", "GET_LYNC_USER_GENERAL_SETTINGS");
LyncUser user = null;
try
{
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
{
throw new ApplicationException(
string.Format("Organization is null. ItemId={0}", itemId));
}
int lyncServiceId = GetLyncServiceID(org.PackageId);
LyncServer lync = GetLyncServer(lyncServiceId, org.ServiceId);
OrganizationUser usr;
usr = OrganizationController.GetAccount(itemId, accountId);
if (usr != null)
user = lync.GetLyncUserGeneralSettings(org.OrganizationId, usr.UserPrincipalName);
if (user != null)
{
LyncUserPlan plan = ObjectUtils.FillObjectFromDataReader<LyncUserPlan>(DataProvider.GetLyncUserPlanByAccountId(accountId));
if (plan != null)
{
user.LyncUserPlanId = plan.LyncUserPlanId;
user.LyncUserPlanName = plan.LyncUserPlanName;
}
}
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
TaskManager.CompleteTask();
return user;
}
public static LyncUserResult SetLyncUserGeneralSettings(int itemId, int accountId, string sipAddress, string lineUri)
{
LyncUserResult res = TaskManager.StartResultTask<LyncUserResult>("LYNC", "SET_LYNC_USER_GENERAL_SETTINGS");
LyncUser user = null;
try
{
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
{
throw new ApplicationException(
string.Format("Organization is null. ItemId={0}", itemId));
}
int lyncServiceId = GetLyncServiceID(org.PackageId);
LyncServer lync = GetLyncServer(lyncServiceId, org.ServiceId);
OrganizationUser usr;
usr = OrganizationController.GetAccount(itemId, accountId);
if (usr != null)
user = lync.GetLyncUserGeneralSettings(org.OrganizationId, usr.UserPrincipalName);
if (user != null)
{
LyncUserPlan plan = ObjectUtils.FillObjectFromDataReader<LyncUserPlan>(DataProvider.GetLyncUserPlanByAccountId(accountId));
if (plan != null)
{
user.LyncUserPlanId = plan.LyncUserPlanId;
user.LyncUserPlanName = plan.LyncUserPlanName;
}
if (!string.IsNullOrEmpty(sipAddress))
{
if (sipAddress != usr.UserPrincipalName)
{
if (DataProvider.LyncUserExists(accountId, sipAddress))
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.ADDRESS_ALREADY_USED);
return res;
}
}
user.SipAddress = sipAddress;
}
if (!string.IsNullOrEmpty(lineUri)) user.LineUri = lineUri;
lync.SetLyncUserGeneralSettings(org.OrganizationId, usr.UserPrincipalName, user);
DataProvider.UpdateLyncUser(accountId, sipAddress);
}
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.FAILED_SET_SETTINGS, ex);
return res;
}
res.IsSuccess = true;
TaskManager.CompleteResultTask();
return res;
}
public static int DeleteOrganization(int itemId)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("LYNC", "DELETE_ORG");
TaskManager.ItemId = itemId;
try
{
// delete organization in Exchange
//System.Threading.Thread.Sleep(5000);
Organization org = (Organization)PackageController.GetPackageItem(itemId);
int lyncServiceId = GetLyncServiceID(org.PackageId);
LyncServer lync = GetLyncServer(lyncServiceId, org.ServiceId);
bool successful = lync.DeleteOrganization(org.OrganizationId, org.DefaultDomain);
return successful ? 0 : BusinessErrorCodes.ERROR_LYNC_DELETE_SOME_PROBLEMS;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static LyncUserResult SetUserLyncPlan(int itemId, int accountId, int lyncUserPlanId)
{
LyncUserResult res = TaskManager.StartResultTask<LyncUserResult>("LYNC", "SET_LYNC_USER_LYNCPLAN");
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.NOT_AUTHORIZED);
return res;
}
try
{
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
{
throw new ApplicationException(
string.Format("Organization is null. ItemId={0}", itemId));
}
int lyncServiceId = GetLyncServiceID(org.PackageId);
LyncServer lync = GetLyncServer(lyncServiceId, org.ServiceId);
LyncUserPlan plan = GetLyncUserPlan(itemId, lyncUserPlanId);
OrganizationUser user;
user = OrganizationController.GetAccount(itemId, accountId);
if (!lync.SetLyncUserPlan(org.OrganizationId, user.UserPrincipalName, plan))
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_ADD_LYNC_USER);
return res;
}
try
{
DataProvider.SetLyncUserLyncUserplan(accountId, lyncUserPlanId);
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_ADD_LYNC_USER_TO_DATABASE, ex);
return res;
}
res.IsSuccess = true;
TaskManager.CompleteResultTask();
return res;
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_UPDATE_LYNC_USER, ex);
return res;
}
}
public static LyncUsersPagedResult GetLyncUsers(int itemId)
{
return GetLyncUsersPaged(itemId, string.Empty, string.Empty, 0, int.MaxValue);
}
public static LyncUsersPagedResult GetLyncUsersPaged(int itemId, string sortColumn, string sortDirection, int startRow, int count)
{
LyncUsersPagedResult res = TaskManager.StartResultTask<LyncUsersPagedResult>("LYNC", "GET_LYNC_USERS");
try
{
IDataReader reader =
DataProvider.GetLyncUsers(itemId, sortColumn, sortDirection, startRow, count);
List<LyncUser> accounts = new List<LyncUser>();
ObjectUtils.FillCollectionFromDataReader(accounts, reader);
res.Value = new LyncUsersPaged { PageUsers = accounts.ToArray() };
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.GET_LYNC_USERS, ex);
return res;
}
IntResult intRes = GetLyncUsersCount(itemId);
res.ErrorCodes.AddRange(intRes.ErrorCodes);
if (!intRes.IsSuccess)
{
TaskManager.CompleteResultTask(res);
return res;
}
res.Value.RecordsCount = intRes.Value;
TaskManager.CompleteResultTask();
return res;
}
public static List<LyncUser> GetLyncUsersByPlanId(int itemId, int planId)
{
return ObjectUtils.CreateListFromDataReader<LyncUser>(DataProvider.GetLyncUsersByPlanId(itemId, planId));
}
public static IntResult GetLyncUsersCount(int itemId)
{
IntResult res = TaskManager.StartResultTask<IntResult>("LYNC", "GET_LYNC_USERS_COUNT");
try
{
res.Value = DataProvider.GetLyncUsersCount(itemId);
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.GET_LYNC_USER_COUNT, ex);
return res;
}
TaskManager.CompleteResultTask();
return res;
}
public static LyncUserResult DeleteLyncUser(int itemId, int accountId)
{
LyncUserResult res = TaskManager.StartResultTask<LyncUserResult>("LYNC", "DELETE_LYNC_USER");
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.NOT_AUTHORIZED);
return res;
}
LyncServer lync;
try
{
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
{
throw new ApplicationException(
string.Format("Organization is null. ItemId={0}", itemId));
}
int lyncServiceId = GetLyncServiceID(org.PackageId);
lync = GetLyncServer(lyncServiceId, org.ServiceId);
OrganizationUser user;
user = OrganizationController.GetAccount(itemId, accountId);
if (user != null)
lync.DeleteUser(user.UserPrincipalName);
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_DELETE_LYNC_USER, ex);
return res;
}
try
{
DataProvider.DeleteLyncUser(accountId);
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_DELETE_LYNC_USER_FROM_METADATA, ex);
return res;
}
TaskManager.CompleteResultTask();
return res;
}
public static Organization GetOrganization(int itemId)
{
return (Organization)PackageController.GetPackageItem(itemId);
}
#region Lync Plans
public static List<LyncUserPlan> GetLyncUserPlans(int itemId)
{
// place log record
TaskManager.StartTask("LYNC", "GET_LYNC_LYNCUSERPLANS");
TaskManager.ItemId = itemId;
try
{
List<LyncUserPlan> plans = new List<LyncUserPlan>();
UserInfo user = ObjectUtils.FillObjectFromDataReader<UserInfo>(DataProvider.GetUserByExchangeOrganizationIdInternally(itemId));
if (user.Role == UserRole.User)
LyncController.GetLyncUserPlansByUser(itemId, user, ref plans);
else
LyncController.GetLyncUserPlansByUser(0, user, ref plans);
ExchangeOrganization ExchangeOrg = ObjectUtils.FillObjectFromDataReader<ExchangeOrganization>(DataProvider.GetExchangeOrganization(itemId));
if (ExchangeOrg != null)
{
foreach (LyncUserPlan p in plans)
{
p.IsDefault = (p.LyncUserPlanId == ExchangeOrg.LyncUserPlanID);
}
}
return plans;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
private static void GetLyncUserPlansByUser(int itemId, UserInfo user, ref List<LyncUserPlan> plans)
{
if ((user != null))
{
List<Organization> orgs = null;
if (user.UserId != 1)
{
List<PackageInfo> Packages = PackageController.GetPackages(user.UserId);
if ((Packages != null) & (Packages.Count > 0))
{
orgs = ExchangeServerController.GetExchangeOrganizationsInternal(Packages[0].PackageId, false);
}
}
else
{
orgs = ExchangeServerController.GetExchangeOrganizationsInternal(1, false);
}
int OrgId = -1;
if (itemId > 0) OrgId = itemId;
else if ((orgs != null) & (orgs.Count > 0)) OrgId = orgs[0].Id;
if (OrgId != -1)
{
List<LyncUserPlan> Plans = ObjectUtils.CreateListFromDataReader<LyncUserPlan>(DataProvider.GetLyncUserPlans(OrgId));
foreach (LyncUserPlan p in Plans)
{
plans.Add(p);
}
}
UserInfo owner = UserController.GetUserInternally(user.OwnerId);
GetLyncUserPlansByUser(0, owner, ref plans);
}
}
public static LyncUserPlan GetLyncUserPlan(int itemID, int lyncUserPlanId)
{
// place log record
TaskManager.StartTask("LYNC", "GET_LYNC_LYNCUSERPLAN");
TaskManager.ItemId = lyncUserPlanId;
try
{
return ObjectUtils.FillObjectFromDataReader<LyncUserPlan>(
DataProvider.GetLyncUserPlan(lyncUserPlanId));
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static int AddLyncUserPlan(int itemID, LyncUserPlan lyncUserPlan)
{
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("LYNC", "ADD_LYNC_LYNCUSERPLAN");
TaskManager.ItemId = itemID;
try
{
Organization org = GetOrganization(itemID);
if (org == null)
return -1;
// load package context
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
lyncUserPlan.Conferencing = lyncUserPlan.Conferencing & Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_CONFERENCING].QuotaAllocatedValue);
lyncUserPlan.EnterpriseVoice = lyncUserPlan.EnterpriseVoice & Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_ENTERPRISEVOICE].QuotaAllocatedValue);
if (!lyncUserPlan.EnterpriseVoice)
lyncUserPlan.VoicePolicy = LyncVoicePolicyType.None;
lyncUserPlan.IM = true;
return DataProvider.AddLyncUserPlan(itemID, lyncUserPlan);
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static int UpdateLyncUserPlan(int itemID, LyncUserPlan lyncUserPlan)
{
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("LYNC", "ADD_LYNC_LYNCUSERPLAN");
TaskManager.ItemId = itemID;
try
{
Organization org = GetOrganization(itemID);
if (org == null)
return -1;
// load package context
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
lyncUserPlan.Conferencing = lyncUserPlan.Conferencing & Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_CONFERENCING].QuotaAllocatedValue);
lyncUserPlan.EnterpriseVoice = lyncUserPlan.EnterpriseVoice & Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_ENTERPRISEVOICE].QuotaAllocatedValue);
if (!lyncUserPlan.EnterpriseVoice)
lyncUserPlan.VoicePolicy = LyncVoicePolicyType.None;
lyncUserPlan.IM = true;
DataProvider.UpdateLyncUserPlan(itemID, lyncUserPlan);
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
return 0;
}
public static int DeleteLyncUserPlan(int itemID, int lyncUserPlanId)
{
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
TaskManager.StartTask("LYNC", "DELETE_LYNC_LYNCPLAN");
TaskManager.ItemId = itemID;
try
{
DataProvider.DeleteLyncUserPlan(lyncUserPlanId);
return 0;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static int SetOrganizationDefaultLyncUserPlan(int itemId, int lyncUserPlanId)
{
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
TaskManager.StartTask("LYNC", "SET_LYNC_LYNCUSERPLAN");
TaskManager.ItemId = itemId;
try
{
DataProvider.SetOrganizationDefaultLyncUserPlan(itemId, lyncUserPlanId);
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
return 1;
}
#endregion
#region Federation Domains
public static LyncFederationDomain[] GetFederationDomains(int itemId)
{
// place log record
TaskManager.StartTask("LYNC", "GET_LYNC_FEDERATIONDOMAINS");
TaskManager.ItemId = itemId;
LyncFederationDomain[] lyncFederationDomains = null;
try
{
Organization org = (Organization)PackageController.GetPackageItem(itemId);
int lyncServiceId = GetLyncServiceID(org.PackageId);
LyncServer lync = GetLyncServer(lyncServiceId, org.ServiceId);
lyncFederationDomains = lync.GetFederationDomains(org.OrganizationId);
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
return lyncFederationDomains;
}
public static LyncUserResult AddFederationDomain(int itemId, string domainName, string proxyFqdn)
{
LyncUserResult res = TaskManager.StartResultTask<LyncUserResult>("LYNC", "ADD_LYNC_FEDERATIONDOMAIN");
TaskManager.ItemId = itemId;
TaskManager.TaskParameters["domainName"] = domainName;
TaskManager.TaskParameters["proxyFqdn"] = proxyFqdn;
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.NOT_AUTHORIZED);
return res;
}
try
{
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
{
throw new ApplicationException(
string.Format("Organization is null. ItemId={0}", itemId));
}
int lyncServiceId = GetLyncServiceID(org.PackageId);
LyncServer lync = GetLyncServer(lyncServiceId, org.ServiceId);
if (string.IsNullOrEmpty(org.LyncTenantId))
{
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
org.LyncTenantId = lync.CreateOrganization(org.OrganizationId,
org.DefaultDomain,
Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_CONFERENCING].QuotaAllocatedValue),
Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_ALLOWVIDEO].QuotaAllocatedValue),
Convert.ToInt32(cntx.Quotas[Quotas.LYNC_MAXPARTICIPANTS].QuotaAllocatedValue),
Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_FEDERATION].QuotaAllocatedValue),
Convert.ToBoolean(cntx.Quotas[Quotas.LYNC_ENTERPRISEVOICE].QuotaAllocatedValue));
if (string.IsNullOrEmpty(org.LyncTenantId))
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_ENABLE_ORG);
return res;
}
else
PackageController.UpdatePackageItem(org);
}
lync = GetLyncServer(lyncServiceId, org.ServiceId);
bool bDomainExists = false;
LyncFederationDomain[] domains = GetFederationDomains(itemId);
foreach (LyncFederationDomain d in domains)
{
if (d.DomainName.ToLower() == domainName.ToLower())
{
bDomainExists = true;
break;
}
}
if (!bDomainExists)
lync.AddFederationDomain(org.OrganizationId, domainName.ToLower(), proxyFqdn);
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_ADD_LYNC_FEDERATIONDOMAIN, ex);
return res;
}
TaskManager.CompleteResultTask();
return res;
}
public static LyncUserResult RemoveFederationDomain(int itemId, string domainName)
{
LyncUserResult res = TaskManager.StartResultTask<LyncUserResult>("LYNC", "REMOVE_LYNC_FEDERATIONDOMAIN");
TaskManager.ItemId = itemId;
TaskManager.TaskParameters["domainName"] = domainName;
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.NOT_AUTHORIZED);
return res;
}
try
{
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
{
throw new ApplicationException(
string.Format("Organization is null. ItemId={0}", itemId));
}
int lyncServiceId = GetLyncServiceID(org.PackageId);
LyncServer lync = GetLyncServer(lyncServiceId, org.ServiceId);
if (org.OrganizationId.ToLower() == domainName.ToLower())
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_REMOVE_LYNC_FEDERATIONDOMAIN);
return res;
}
lync.RemoveFederationDomain(org.OrganizationId, domainName);
}
catch (Exception ex)
{
TaskManager.CompleteResultTask(res, LyncErrorCodes.CANNOT_REMOVE_LYNC_FEDERATIONDOMAIN, ex);
return res;
}
TaskManager.CompleteResultTask();
return res;
}
#endregion
#region Private methods
public static UInt64 ConvertPhoneNumberToLong(string ip)
{
return Convert.ToUInt64(ip);
}
public static string ConvertLongToPhoneNumber(UInt64 ip)
{
if (ip == 0)
return "";
return ip.ToString();
}
#endregion
}
}