This commit is contained in:
Virtuworks 2013-11-21 11:58:09 -05:00
commit 3418676133
51 changed files with 5795 additions and 5058 deletions

View file

@ -2419,3 +2419,191 @@ INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName]
VALUES(1501, 45, N'RemoteDesktopServices2012', N'Remote Desktop Services Windows 2012', N'WebsitePanel.Providers.RemoteDesktopServices.Windows2012,WebsitePanel.Providers.RemoteDesktopServices.Windows2012', N'RDS', 1) VALUES(1501, 45, N'RemoteDesktopServices2012', N'Remote Desktop Services Windows 2012', N'WebsitePanel.Providers.RemoteDesktopServices.Windows2012,WebsitePanel.Providers.RemoteDesktopServices.Windows2012', N'RDS', 1)
END END
GO GO
-- Added phone numbers in the hosted organization.
IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='PackageIPAddresses' AND COLS.name='OrgID')
BEGIN
ALTER TABLE [dbo].[PackageIPAddresses] ADD
[OrgID] [int] NULL
END
GO
ALTER PROCEDURE [dbo].[AllocatePackageIPAddresses]
(
@PackageID int,
@OrgID int,
@xml ntext
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @idoc int
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @xml
-- delete
DELETE FROM PackageIPAddresses
FROM PackageIPAddresses AS PIP
INNER JOIN OPENXML(@idoc, '/items/item', 1) WITH
(
AddressID int '@id'
) as PV ON PIP.AddressID = PV.AddressID
-- insert
INSERT INTO dbo.PackageIPAddresses
(
PackageID,
OrgID,
AddressID
)
SELECT
@PackageID,
@OrgID,
AddressID
FROM OPENXML(@idoc, '/items/item', 1) WITH
(
AddressID int '@id'
) as PV
-- remove document
exec sp_xml_removedocument @idoc
END
GO
ALTER PROCEDURE [dbo].[GetPackageIPAddresses]
(
@PackageID int,
@OrgID int,
@FilterColumn nvarchar(50) = '',
@FilterValue nvarchar(50) = '',
@SortColumn nvarchar(50),
@StartRow int,
@MaximumRows int,
@PoolID int = 0,
@Recursive bit = 0
)
AS
BEGIN
-- start
DECLARE @condition nvarchar(700)
SET @condition = '
((@Recursive = 0 AND PA.PackageID = @PackageID)
OR (@Recursive = 1 AND dbo.CheckPackageParent(@PackageID, PA.PackageID) = 1))
AND (@PoolID = 0 OR @PoolID <> 0 AND IP.PoolID = @PoolID)
AND (@OrgID = 0 OR @OrgID <> 0 AND PA.OrgID = @OrgID)
'
IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL
AND @FilterValue <> '' AND @FilterValue IS NOT NULL
SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + ''''
IF @SortColumn IS NULL OR @SortColumn = ''
SET @SortColumn = 'IP.ExternalIP ASC'
DECLARE @sql nvarchar(3500)
set @sql = '
SELECT COUNT(PA.PackageAddressID)
FROM dbo.PackageIPAddresses PA
INNER JOIN dbo.IPAddresses AS IP ON PA.AddressID = IP.AddressID
INNER JOIN dbo.Packages P ON PA.PackageID = P.PackageID
INNER JOIN dbo.Users U ON U.UserID = P.UserID
LEFT JOIN ServiceItems SI ON PA.ItemId = SI.ItemID
WHERE ' + @condition + '
DECLARE @Addresses AS TABLE
(
PackageAddressID int
);
WITH TempItems AS (
SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row,
PA.PackageAddressID
FROM dbo.PackageIPAddresses PA
INNER JOIN dbo.IPAddresses AS IP ON PA.AddressID = IP.AddressID
INNER JOIN dbo.Packages P ON PA.PackageID = P.PackageID
INNER JOIN dbo.Users U ON U.UserID = P.UserID
LEFT JOIN ServiceItems SI ON PA.ItemId = SI.ItemID
WHERE ' + @condition + '
)
INSERT INTO @Addresses
SELECT PackageAddressID FROM TempItems
WHERE TempItems.Row BETWEEN @StartRow + 1 and @StartRow + @MaximumRows
SELECT
PA.PackageAddressID,
PA.AddressID,
IP.ExternalIP,
IP.InternalIP,
IP.SubnetMask,
IP.DefaultGateway,
PA.ItemID,
SI.ItemName,
PA.PackageID,
P.PackageName,
P.UserID,
U.UserName,
PA.IsPrimary
FROM @Addresses AS TA
INNER JOIN dbo.PackageIPAddresses AS PA ON TA.PackageAddressID = PA.PackageAddressID
INNER JOIN dbo.IPAddresses AS IP ON PA.AddressID = IP.AddressID
INNER JOIN dbo.Packages P ON PA.PackageID = P.PackageID
INNER JOIN dbo.Users U ON U.UserID = P.UserID
LEFT JOIN ServiceItems SI ON PA.ItemId = SI.ItemID
'
print @sql
exec sp_executesql @sql, N'@PackageID int, @OrgID int, @StartRow int, @MaximumRows int, @Recursive bit, @PoolID int',
@PackageID, @OrgID, @StartRow, @MaximumRows, @Recursive, @PoolID
END
GO
ALTER PROCEDURE [dbo].[GetPackageUnassignedIPAddresses]
(
@ActorID int,
@PackageID int,
@OrgID int,
@PoolID int = 0
)
AS
BEGIN
SELECT
PIP.PackageAddressID,
IP.AddressID,
IP.ExternalIP,
IP.InternalIP,
IP.ServerID,
IP.PoolID,
PIP.IsPrimary,
IP.SubnetMask,
IP.DefaultGateway
FROM PackageIPAddresses AS PIP
INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID
WHERE
PIP.ItemID IS NULL
AND PIP.PackageID = @PackageID
AND (@PoolID = 0 OR @PoolID <> 0 AND IP.PoolID = @PoolID)
AND (@OrgID = 0 OR @OrgID <> 0 AND PIP.OrgID = @OrgID)
AND dbo.CheckActorPackageRights(@ActorID, PIP.PackageID) = 1
ORDER BY IP.DefaultGateway, IP.ExternalIP
END
GO
-- CRM
UPDATE Providers SET EditorControl = 'CRM2011' Where ProviderID = 1201;

View file

@ -3245,23 +3245,25 @@ namespace WebsitePanel.EnterpriseServer
} }
public static void AllocatePackageIPAddresses(int packageId, string xml) public static void AllocatePackageIPAddresses(int packageId, int orgId, string xml)
{ {
SqlParameter[] param = new[] SqlParameter[] param = new[]
{ {
new SqlParameter("@PackageID", packageId), new SqlParameter("@PackageID", packageId),
new SqlParameter("@OrgID", orgId),
new SqlParameter("@xml", xml) new SqlParameter("@xml", xml)
}; };
ExecuteLongNonQuery("AllocatePackageIPAddresses", param); ExecuteLongNonQuery("AllocatePackageIPAddresses", param);
} }
public static IDataReader GetPackageIPAddresses(int packageId, int poolId, string filterColumn, string filterValue, public static IDataReader GetPackageIPAddresses(int packageId, int orgId, int poolId, string filterColumn, string filterValue,
string sortColumn, int startRow, int maximumRows, bool recursive) string sortColumn, int startRow, int maximumRows, bool recursive)
{ {
IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
"GetPackageIPAddresses", "GetPackageIPAddresses",
new SqlParameter("@PackageID", packageId), new SqlParameter("@PackageID", packageId),
new SqlParameter("@OrgID", orgId),
new SqlParameter("@PoolId", poolId), new SqlParameter("@PoolId", poolId),
new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)), new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)), new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
@ -3306,12 +3308,13 @@ namespace WebsitePanel.EnterpriseServer
#endregion #endregion
#region VPS - External Network Adapter #region VPS - External Network Adapter
public static IDataReader GetPackageUnassignedIPAddresses(int actorId, int packageId, int poolId) public static IDataReader GetPackageUnassignedIPAddresses(int actorId, int packageId, int orgId, int poolId)
{ {
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
"GetPackageUnassignedIPAddresses", "GetPackageUnassignedIPAddresses",
new SqlParameter("@ActorID", actorId), new SqlParameter("@ActorID", actorId),
new SqlParameter("@PackageID", packageId), new SqlParameter("@PackageID", packageId),
new SqlParameter("@OrgID", orgId),
new SqlParameter("@PoolId", poolId)); new SqlParameter("@PoolId", poolId));
} }

View file

@ -200,6 +200,32 @@ namespace WebsitePanel.EnterpriseServer
return res; return res;
} }
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.Length == 2)
{
if (props[0].ToLower() == property)
{
value = props[1];
break;
}
}
}
return value;
}
public static OrganizationResult CreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation) public static OrganizationResult CreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation)
{ {
OrganizationResult res = StartTask<OrganizationResult>("CRM", "CREATE_ORGANIZATION"); OrganizationResult res = StartTask<OrganizationResult>("CRM", "CREATE_ORGANIZATION");
@ -240,6 +266,10 @@ namespace WebsitePanel.EnterpriseServer
} }
int serviceid = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.HostedOrganizations);
string rootOU = GetProviderProperty(serviceid, "rootou");
org.CrmAdministratorId = user.AccountId; org.CrmAdministratorId = user.AccountId;
org.CrmCurrency = org.CrmCurrency =
string.Join("|", new[] {baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, regionName}); string.Join("|", new[] {baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, regionName});
@ -248,7 +278,10 @@ namespace WebsitePanel.EnterpriseServer
org.CrmOrganizationId = orgId; org.CrmOrganizationId = orgId;
OrganizationResult serverRes = OrganizationResult serverRes =
crm.CreateOrganization(orgId, org.OrganizationId, org.Name, baseCurrencyCode, baseCurrencyName, crm.CreateOrganization(orgId, org.OrganizationId, org.Name,
org.DefaultDomain,
org.OrganizationId + "." + rootOU,
baseCurrencyCode, baseCurrencyName,
baseCurrencySymbol, user.SamAccountName, user.FirstName, user.LastName, user.PrimaryEmailAddress, baseCurrencySymbol, user.SamAccountName, user.FirstName, user.LastName, user.PrimaryEmailAddress,
collation); collation);

View file

@ -1167,13 +1167,13 @@ namespace WebsitePanel.EnterpriseServer
#endregion #endregion
#region Package IP Addresses #region Package IP Addresses
public static PackageIPAddressesPaged GetPackageIPAddresses(int packageId, IPAddressPool pool, public static PackageIPAddressesPaged GetPackageIPAddresses(int packageId, int orgId, IPAddressPool pool,
string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows, bool recursive) string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows, bool recursive)
{ {
PackageIPAddressesPaged result = new PackageIPAddressesPaged(); PackageIPAddressesPaged result = new PackageIPAddressesPaged();
// get reader // get reader
IDataReader reader = DataProvider.GetPackageIPAddresses(packageId, (int)pool, filterColumn, filterValue, sortColumn, startRow, maximumRows, recursive); IDataReader reader = DataProvider.GetPackageIPAddresses(packageId, orgId, (int)pool, filterColumn, filterValue, sortColumn, startRow, maximumRows, recursive);
// number of items = first data reader // number of items = first data reader
reader.Read(); reader.Read();
@ -1196,10 +1196,15 @@ namespace WebsitePanel.EnterpriseServer
DataProvider.GetUnallottedIPAddresses(packageId, serviceId, (int)pool)); DataProvider.GetUnallottedIPAddresses(packageId, serviceId, (int)pool));
} }
public static List<PackageIPAddress> GetPackageUnassignedIPAddresses(int packageId, IPAddressPool pool) public static List<PackageIPAddress> GetPackageUnassignedIPAddresses(int packageId, int orgId, IPAddressPool pool)
{ {
return ObjectUtils.CreateListFromDataReader<PackageIPAddress>( return ObjectUtils.CreateListFromDataReader<PackageIPAddress>(
DataProvider.GetPackageUnassignedIPAddresses(SecurityContext.User.UserId, packageId, (int)pool)); DataProvider.GetPackageUnassignedIPAddresses(SecurityContext.User.UserId, packageId, orgId, (int)pool));
}
public static List<PackageIPAddress> GetPackageUnassignedIPAddresses(int packageId, IPAddressPool pool)
{
return GetPackageUnassignedIPAddresses(packageId, 0, pool);
} }
public static void AllocatePackageIPAddresses(int packageId, int[] addressId) public static void AllocatePackageIPAddresses(int packageId, int[] addressId)
@ -1208,10 +1213,10 @@ namespace WebsitePanel.EnterpriseServer
string xml = PrepareIPsXML(addressId); string xml = PrepareIPsXML(addressId);
// save to database // save to database
DataProvider.AllocatePackageIPAddresses(packageId, xml); DataProvider.AllocatePackageIPAddresses(packageId, 0, xml);
} }
public static ResultObject AllocatePackageIPAddresses(int packageId, string groupName, IPAddressPool pool, bool allocateRandom, int addressesNumber, int[] addressId) public static ResultObject AllocatePackageIPAddresses(int packageId, int orgId, string groupName, IPAddressPool pool, bool allocateRandom, int addressesNumber, int[] addressId)
{ {
#region Check account and space statuses #region Check account and space statuses
// create result object // create result object
@ -1288,7 +1293,7 @@ namespace WebsitePanel.EnterpriseServer
// save to database // save to database
try try
{ {
DataProvider.AllocatePackageIPAddresses(packageId, xml); DataProvider.AllocatePackageIPAddresses(packageId, orgId, xml);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -1335,7 +1340,7 @@ namespace WebsitePanel.EnterpriseServer
} }
// allocate // allocate
return AllocatePackageIPAddresses(packageId, groupName, pool, return AllocatePackageIPAddresses(packageId, 0, groupName, pool,
true, number, new int[0]); true, number, new int[0]);
} }

View file

@ -386,24 +386,24 @@ namespace WebsitePanel.EnterpriseServer
} }
[WebMethod] [WebMethod]
public PackageIPAddressesPaged GetPackageIPAddresses(int packageId, IPAddressPool pool, public PackageIPAddressesPaged GetPackageIPAddresses(int packageId, int orgId, IPAddressPool pool,
string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows, bool recursive) string filterColumn, string filterValue, string sortColumn, int startRow, int maximumRows, bool recursive)
{ {
return ServerController.GetPackageIPAddresses(packageId, pool, return ServerController.GetPackageIPAddresses(packageId, orgId, pool,
filterColumn, filterValue, sortColumn, startRow, maximumRows, recursive); filterColumn, filterValue, sortColumn, startRow, maximumRows, recursive);
} }
[WebMethod] [WebMethod]
public List<PackageIPAddress> GetPackageUnassignedIPAddresses(int packageId, IPAddressPool pool) public List<PackageIPAddress> GetPackageUnassignedIPAddresses(int packageId, int orgId, IPAddressPool pool)
{ {
return ServerController.GetPackageUnassignedIPAddresses(packageId, pool); return ServerController.GetPackageUnassignedIPAddresses(packageId, orgId, pool);
} }
[WebMethod] [WebMethod]
public ResultObject AllocatePackageIPAddresses(int packageId, string groupName, IPAddressPool pool, bool allocateRandom, int addressesNumber, public ResultObject AllocatePackageIPAddresses(int packageId,int orgId, string groupName, IPAddressPool pool, bool allocateRandom, int addressesNumber,
int[] addressId) int[] addressId)
{ {
return ServerController.AllocatePackageIPAddresses(packageId, groupName, pool, allocateRandom, return ServerController.AllocatePackageIPAddresses(packageId, orgId, groupName, pool, allocateRandom,
addressesNumber, addressId); addressesNumber, addressId);
} }

View file

@ -58,6 +58,12 @@ namespace WebsitePanel.Providers.Common
public const string AppRootDomain = "AppRootDomain"; public const string AppRootDomain = "AppRootDomain";
public const string OrganizationWebService = "OrganizationWebService";
public const string DiscoveryWebService = "DiscoveryWebService";
public const string DeploymentWebService = "DeploymentWebService";
public const string UtilityPath = "UtilityPath"; public const string UtilityPath = "UtilityPath";
public const string EnterpriseServer = "EnterpriseServer"; public const string EnterpriseServer = "EnterpriseServer";

View file

@ -36,5 +36,14 @@ namespace WebsitePanel.Providers.HostedSolution
public string CRMUserName { get; set; } public string CRMUserName { get; set; }
public CRMUserAccessMode ClientAccessMode { get; set; } public CRMUserAccessMode ClientAccessMode { get; set; }
public bool CRMDisabled { get; set; } public bool CRMDisabled { get; set; }
public int CRMUsersCount { get; set; }
public string AccountNumber { get; set; }
public string СRMOrganizationName { get; set; }
public int CRMUsersFullLicenceCount { get; set; }
public int CRMUsersReadOnlyLicenceCount { get; set; }
public int UsedSpace { get; set; }
public string UsageMonth { get; set; }
} }
} }

View file

@ -35,6 +35,7 @@ namespace WebsitePanel.Providers.HostedSolution
public interface ICRM public interface ICRM
{ {
OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName,
string organizationDomainName, string ou,
string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol,
string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail,
string organizationCollation); string organizationCollation);
@ -60,5 +61,8 @@ namespace WebsitePanel.Providers.HostedSolution
CrmUserResult GetCrmUserById(Guid crmUserId, string orgName); CrmUserResult GetCrmUserById(Guid crmUserId, string orgName);
ResultObject ChangeUserState(bool disable, string orgName, Guid crmUserId); ResultObject ChangeUserState(bool disable, string orgName, Guid crmUserId);
long GetUsedSpace(Guid organizationId);
} }
} }

View file

@ -11,6 +11,7 @@ using System.Security.Principal;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
using System.Threading; using System.Threading;
using System.ServiceModel.Description; using System.ServiceModel.Description;
using System.Text.RegularExpressions;
using Microsoft.Win32; using Microsoft.Win32;
using WebsitePanel.Providers.Common; using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.ResultObjects;
@ -58,7 +59,9 @@ namespace WebsitePanel.Providers.HostedSolution
{ {
get get
{ {
string cRMServiceUrl = "https://" + ProviderSettings[Constants.AppRootDomain] + ":" + ProviderSettings[Constants.Port] + "/XRMDeployment/2011/Deployment.svc"; string uri = ProviderSettings[Constants.DeploymentWebService];
if (String.IsNullOrEmpty(uri)) uri = ProviderSettings[Constants.AppRootDomain];
string cRMServiceUrl = "https://" + uri + ":" + ProviderSettings[Constants.Port] + "/XRMDeployment/2011/Deployment.svc";
return cRMServiceUrl; return cRMServiceUrl;
} }
} }
@ -67,7 +70,9 @@ namespace WebsitePanel.Providers.HostedSolution
{ {
get get
{ {
string cRMDiscoveryUri = "https://" + ProviderSettings[Constants.AppRootDomain] + ":" + ProviderSettings[Constants.Port] + "/XRMServices/2011/Discovery.svc"; string uri = ProviderSettings[Constants.DiscoveryWebService];
if (String.IsNullOrEmpty(uri)) uri = ProviderSettings[Constants.AppRootDomain];
string cRMDiscoveryUri = "https://" + uri + ":" + ProviderSettings[Constants.Port] + "/XRMServices/2011/Discovery.svc";
return cRMDiscoveryUri; return cRMDiscoveryUri;
} }
} }
@ -174,6 +179,75 @@ namespace WebsitePanel.Providers.HostedSolution
return res; return res;
} }
public long GetUsedSpace(Guid organizationId)
{
Log.WriteStart("GetUsedSpace");
long res = 0;
string crmDatabaseName = "MSCRM_CONFIG";
string databasename = "";
SqlConnection connection = null;
try
{
connection = new SqlConnection();
connection.ConnectionString =
string.Format("Server={1};Initial Catalog={0};Integrated Security=SSPI",
crmDatabaseName, SqlServer);
connection.Open();
string commandText = string.Format("SELECT DatabaseName FROM dbo.Organization where id = '{0}'", organizationId);
SqlCommand command = new SqlCommand(commandText, connection);
databasename = command.ExecuteScalar().ToString();
}
catch (Exception ex)
{
Log.WriteError(ex);
}
finally
{
if (connection != null)
connection.Dispose();
}
try
{
connection = new SqlConnection();
connection.ConnectionString =
string.Format("Server={1};Initial Catalog={0};Integrated Security=SSPI",
databasename, SqlServer);
connection.Open();
string commandText = "SELECT ((dbsize + logsize) * 8192 ) size FROM " +
"( " +
"SELECT SUM(CONVERT(BIGINT,CASE WHEN status & 64 = 0 THEN size ELSE 0 END)) dbsize " +
", SUM(CONVERT(BIGINT,CASE WHEN status & 64 <> 0 THEN size ELSE 0 END)) logsize " +
"FROM dbo.sysfiles " +
") big";
SqlCommand command = new SqlCommand(commandText, connection);
res = (long)command.ExecuteScalar();
}
catch (Exception ex)
{
Log.WriteError(ex);
}
finally
{
if (connection != null)
connection.Dispose();
}
Log.WriteEnd("GetUsedSpace");
return res;
}
private bool CheckOrganizationUnique(string databaseName, string orgName) private bool CheckOrganizationUnique(string databaseName, string orgName)
{ {
Log.WriteStart("CheckOrganizationUnique"); Log.WriteStart("CheckOrganizationUnique");
@ -319,17 +393,39 @@ namespace WebsitePanel.Providers.HostedSolution
return retOrganization; return retOrganization;
} }
public OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation) public OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string organizationDomainName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation)
{ {
return CreateOrganizationInternal(organizationId, organizationUniqueName, organizationFriendlyName, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation); return CreateOrganizationInternal(organizationId, organizationUniqueName, organizationFriendlyName, organizationDomainName, ou , baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation);
} }
const string CRMSysAdminRoleStr = "Ñèñòåìíûé àäìèíèñòðàòîð;System Administrator"; const string CRMSysAdminRoleStr = "Системный администратор;System Administrator";
internal OrganizationResult CreateOrganizationInternal(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation) internal OrganizationResult CreateOrganizationInternal(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string organizationDomainName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation)
{ {
OrganizationResult ret = StartLog<OrganizationResult>("CreateOrganizationInternal"); OrganizationResult ret = StartLog<OrganizationResult>("CreateOrganizationInternal");
organizationUniqueName = Regex.Replace(organizationUniqueName, @"[^\dA-Za-z]", "-", RegexOptions.Compiled);
// calculate UserRootPath
string ldapstr = "";
string[] ouItems = ou.Split('.');
foreach (string ouItem in ouItems)
{
if (ldapstr.Length != 0) ldapstr += ",";
ldapstr += "OU=" + ouItem;
}
string rootDomain = ServerSettings.ADRootDomain;
string[] domainItems = rootDomain.Split('.');
foreach (string domainItem in domainItems)
ldapstr += ",DC=" + domainItem;
ldapstr = @"LDAP://" + rootDomain + "/" + ldapstr;
if (organizationId == Guid.Empty) if (organizationId == Guid.Empty)
throw new ArgumentException("OrganizationId is Guid.Empty"); throw new ArgumentException("OrganizationId is Guid.Empty");
@ -362,6 +458,8 @@ namespace WebsitePanel.Providers.HostedSolution
Uri serviceUrl = new Uri(CRMServiceUrl); Uri serviceUrl = new Uri(CRMServiceUrl);
DeploymentServiceClient deploymentService = Microsoft.Xrm.Sdk.Deployment.Proxy.ProxyClientHelper.CreateClient(serviceUrl); DeploymentServiceClient deploymentService = Microsoft.Xrm.Sdk.Deployment.Proxy.ProxyClientHelper.CreateClient(serviceUrl);
if (!String.IsNullOrEmpty(UserName))
deploymentService.ClientCredentials.Windows.ClientCredential = new NetworkCredential(UserName, Password);
Microsoft.Xrm.Sdk.Deployment.Organization org = new Microsoft.Xrm.Sdk.Deployment.Organization Microsoft.Xrm.Sdk.Deployment.Organization org = new Microsoft.Xrm.Sdk.Deployment.Organization
{ {
@ -397,9 +495,11 @@ namespace WebsitePanel.Providers.HostedSolution
Microsoft.Xrm.Sdk.Deployment.OrganizationState OperationState = Microsoft.Xrm.Sdk.Deployment.OrganizationState.Pending; Microsoft.Xrm.Sdk.Deployment.OrganizationState OperationState = Microsoft.Xrm.Sdk.Deployment.OrganizationState.Pending;
int timeout = 30000;
do do
{ {
Thread.Sleep(30000); Thread.Sleep(timeout);
try try
{ {
Microsoft.Xrm.Sdk.Deployment.Organization getorg Microsoft.Xrm.Sdk.Deployment.Organization getorg
@ -413,16 +513,50 @@ namespace WebsitePanel.Providers.HostedSolution
if (OperationState == Microsoft.Xrm.Sdk.Deployment.OrganizationState.Failed) if (OperationState == Microsoft.Xrm.Sdk.Deployment.OrganizationState.Failed)
throw new ArgumentException("Create organization failed."); throw new ArgumentException("Create organization failed.");
// update UserRootPath setting
Microsoft.Xrm.Sdk.Deployment.ConfigurationEntity orgSettings = new Microsoft.Xrm.Sdk.Deployment.ConfigurationEntity
{
Id = org.Id,
LogicalName = "Organization"
};
orgSettings.Attributes = new Microsoft.Xrm.Sdk.Deployment.AttributeCollection();
orgSettings.Attributes.Add(new KeyValuePair<string, object>("UserRootPath", ldapstr));
Microsoft.Xrm.Sdk.Deployment.UpdateAdvancedSettingsRequest reqUpdateSettings = new Microsoft.Xrm.Sdk.Deployment.UpdateAdvancedSettingsRequest
{
Entity = orgSettings
};
Microsoft.Xrm.Sdk.Deployment.UpdateAdvancedSettingsResponse respUpdateSettings = (Microsoft.Xrm.Sdk.Deployment.UpdateAdvancedSettingsResponse) deploymentService.Execute(reqUpdateSettings);
int tryTimeout = 30000;
int tryCount = 10;
bool success = false;
int tryItem = 0;
while (!success)
{
try try
{ {
OrganizationServiceProxy _serviceProxy = GetOrganizationProxy(organizationUniqueName); Thread.Sleep(tryTimeout);
OrganizationServiceProxy _serviceProxy = GetOrganizationProxy(organizationUniqueName, 0, 0);
string ldap = ""; string ldap = "";
Guid SysAdminGuid = RetrieveSystemUser(GetDomainName(initialUserDomainName), initialUserFirstName, initialUserLastName, CRMSysAdminRoleStr, _serviceProxy, ref ldap); Guid SysAdminGuid = RetrieveSystemUser(GetDomainName(initialUserDomainName), initialUserFirstName, initialUserLastName, CRMSysAdminRoleStr, _serviceProxy, ref ldap);
success = true;
} }
catch { } catch (Exception exc)
{
tryItem++;
if (tryItem >= tryCount)
success = true;
}
}
} }
catch (Exception ex) catch (Exception ex)
@ -944,10 +1078,15 @@ namespace WebsitePanel.Providers.HostedSolution
return false; return false;
} }
int GetOrganizationProxyTryCount = 5; int GetOrganizationProxyTryCount = 10;
int GetOrganizationProxyTryTimeout = 30000; int GetOrganizationProxyTryTimeout = 30000;
private OrganizationServiceProxy GetOrganizationProxy(string orgName) private OrganizationServiceProxy GetOrganizationProxy(string orgName)
{
return GetOrganizationProxy(orgName, GetOrganizationProxyTryCount, GetOrganizationProxyTryTimeout);
}
private OrganizationServiceProxy GetOrganizationProxy(string orgName, int TryCount, int TryTimeout)
{ {
Uri OrganizationUri = GetOrganizationAddress(orgName); Uri OrganizationUri = GetOrganizationAddress(orgName);
@ -977,9 +1116,9 @@ namespace WebsitePanel.Providers.HostedSolution
} }
catch (Exception exc) catch (Exception exc)
{ {
Thread.Sleep(GetOrganizationProxyTryTimeout); Thread.Sleep(TryTimeout);
tryItem++; tryItem++;
if (tryItem >= GetOrganizationProxyTryCount) if (tryItem >= TryCount)
{ {
exception = exc; exception = exc;
success = true; success = true;
@ -1013,7 +1152,6 @@ namespace WebsitePanel.Providers.HostedSolution
return credentials; return credentials;
} }
private DiscoveryServiceProxy GetDiscoveryProxy() private DiscoveryServiceProxy GetDiscoveryProxy()
{ {
@ -1041,7 +1179,20 @@ namespace WebsitePanel.Providers.HostedSolution
protected virtual Uri GetOrganizationAddress(string orgName) protected virtual Uri GetOrganizationAddress(string orgName)
{ {
string url = "https://" + ProviderSettings[Constants.AppRootDomain] + ":" + ProviderSettings[Constants.Port] + "/" + orgName + "/XRMServices/2011/Organization.svc"; //string url = "https://" + ProviderSettings[Constants.AppRootDomain] + ":" + ProviderSettings[Constants.Port] + "/" + orgName + "/XRMServices/2011/Organization.svc";
string url;
string organizationWebServiceUri = ProviderSettings[Constants.OrganizationWebService];
if (!String.IsNullOrEmpty(organizationWebServiceUri))
{
url = "https://" + organizationWebServiceUri + ":" + ProviderSettings[Constants.Port] + "/" + orgName + "/XRMServices/2011/Organization.svc";
}
else
{
url = "https://" + orgName + "." + ProviderSettings[Constants.IFDWebApplicationRootDomain] + ":" + ProviderSettings[Constants.Port] + "/XRMServices/2011/Organization.svc";
}
try try
{ {

View file

@ -328,7 +328,7 @@ namespace WebsitePanel.Providers.HostedSolution
return retOrganization; return retOrganization;
} }
public OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation) public OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string organizationDomainName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation)
{ {
return CreateOrganizationInternal(organizationId, organizationUniqueName, organizationFriendlyName, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation); return CreateOrganizationInternal(organizationId, organizationUniqueName, organizationFriendlyName, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation);
} }
@ -1545,6 +1545,11 @@ namespace WebsitePanel.Providers.HostedSolution
return value.StartsWith("4."); return value.StartsWith("4.");
} }
public long GetUsedSpace(Guid organizationId)
{
return 0;
}
} }
} }

View file

@ -1,55 +1,26 @@
// 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> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:2.0.50727.3053 // Runtime Version:2.0.50727.5466
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
//
// This source code was auto-generated by wsdl, Version=2.0.50727.42.
//
using WebsitePanel.Providers.Common; using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.HostedSolution; using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.ResultObjects;
//
// This source code was auto-generated by wsdl, Version=2.0.50727.42.
//
namespace WebsitePanel.Providers.CRM { namespace WebsitePanel.Providers.CRM {
using System.Diagnostics; using System.Xml.Serialization;
using System.Web.Services; using System.Web.Services;
using System.ComponentModel; using System.ComponentModel;
using System.Web.Services.Protocols; using System.Web.Services.Protocols;
using System; using System;
using System.Xml.Serialization; using System.Diagnostics;
/// <remarks/> /// <remarks/>
@ -86,9 +57,11 @@ namespace WebsitePanel.Providers.CRM {
private System.Threading.SendOrPostCallback ChangeUserStateOperationCompleted; private System.Threading.SendOrPostCallback ChangeUserStateOperationCompleted;
private System.Threading.SendOrPostCallback GetUsedSpaceOperationCompleted;
/// <remarks/> /// <remarks/>
public CRM() { public CRM() {
this.Url = "http://192.168.0.133:9003/CRM.asmx"; this.Url = "http://localhost:9004/CRM.asmx";
} }
/// <remarks/> /// <remarks/>
@ -127,14 +100,19 @@ namespace WebsitePanel.Providers.CRM {
/// <remarks/> /// <remarks/>
public event ChangeUserStateCompletedEventHandler ChangeUserStateCompleted; public event ChangeUserStateCompletedEventHandler ChangeUserStateCompleted;
/// <remarks/>
public event GetUsedSpaceCompletedEventHandler GetUsedSpaceCompleted;
/// <remarks/> /// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateOrganization", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateOrganization", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public OrganizationResult CreateOrganization(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation) { public OrganizationResult CreateOrganization(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string organizationDomainName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation) {
object[] results = this.Invoke("CreateOrganization", new object[] { object[] results = this.Invoke("CreateOrganization", new object[] {
organizationId, organizationId,
organizationUniqueName, organizationUniqueName,
organizationFriendlyName, organizationFriendlyName,
organizationDomainName,
ou,
baseCurrencyCode, baseCurrencyCode,
baseCurrencyName, baseCurrencyName,
baseCurrencySymbol, baseCurrencySymbol,
@ -147,11 +125,13 @@ namespace WebsitePanel.Providers.CRM {
} }
/// <remarks/> /// <remarks/>
public System.IAsyncResult BeginCreateOrganization(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, System.AsyncCallback callback, object asyncState) { public System.IAsyncResult BeginCreateOrganization(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string organizationDomainName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("CreateOrganization", new object[] { return this.BeginInvoke("CreateOrganization", new object[] {
organizationId, organizationId,
organizationUniqueName, organizationUniqueName,
organizationFriendlyName, organizationFriendlyName,
organizationDomainName,
ou,
baseCurrencyCode, baseCurrencyCode,
baseCurrencyName, baseCurrencyName,
baseCurrencySymbol, baseCurrencySymbol,
@ -169,12 +149,12 @@ namespace WebsitePanel.Providers.CRM {
} }
/// <remarks/> /// <remarks/>
public void CreateOrganizationAsync(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation) { public void CreateOrganizationAsync(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string organizationDomainName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation) {
this.CreateOrganizationAsync(organizationId, organizationUniqueName, organizationFriendlyName, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation, null); this.CreateOrganizationAsync(organizationId, organizationUniqueName, organizationFriendlyName, organizationDomainName, ou, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation, null);
} }
/// <remarks/> /// <remarks/>
public void CreateOrganizationAsync(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, object userState) { public void CreateOrganizationAsync(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string organizationDomainName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, object userState) {
if ((this.CreateOrganizationOperationCompleted == null)) { if ((this.CreateOrganizationOperationCompleted == null)) {
this.CreateOrganizationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateOrganizationOperationCompleted); this.CreateOrganizationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateOrganizationOperationCompleted);
} }
@ -182,6 +162,8 @@ namespace WebsitePanel.Providers.CRM {
organizationId, organizationId,
organizationUniqueName, organizationUniqueName,
organizationFriendlyName, organizationFriendlyName,
organizationDomainName,
ou,
baseCurrencyCode, baseCurrencyCode,
baseCurrencyName, baseCurrencyName,
baseCurrencySymbol, baseCurrencySymbol,
@ -691,33 +673,54 @@ namespace WebsitePanel.Providers.CRM {
} }
} }
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetUsedSpace", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public long GetUsedSpace(System.Guid organizationId) {
object[] results = this.Invoke("GetUsedSpace", new object[] {
organizationId});
return ((long)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginGetUsedSpace(System.Guid organizationId, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GetUsedSpace", new object[] {
organizationId}, callback, asyncState);
}
/// <remarks/>
public long EndGetUsedSpace(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((long)(results[0]));
}
/// <remarks/>
public void GetUsedSpaceAsync(System.Guid organizationId) {
this.GetUsedSpaceAsync(organizationId, null);
}
/// <remarks/>
public void GetUsedSpaceAsync(System.Guid organizationId, object userState) {
if ((this.GetUsedSpaceOperationCompleted == null)) {
this.GetUsedSpaceOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetUsedSpaceOperationCompleted);
}
this.InvokeAsync("GetUsedSpace", new object[] {
organizationId}, this.GetUsedSpaceOperationCompleted, userState);
}
private void OnGetUsedSpaceOperationCompleted(object arg) {
if ((this.GetUsedSpaceCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GetUsedSpaceCompleted(this, new GetUsedSpaceCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/> /// <remarks/>
public new void CancelAsync(object userState) { public new void CancelAsync(object userState) {
base.CancelAsync(userState); base.CancelAsync(userState);
} }
} }
/// <remarks/> /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void CreateOrganizationCompletedEventHandler(object sender, CreateOrganizationCompletedEventArgs e); public delegate void CreateOrganizationCompletedEventHandler(object sender, CreateOrganizationCompletedEventArgs e);
@ -1029,4 +1032,30 @@ namespace WebsitePanel.Providers.CRM {
} }
} }
} }
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void GetUsedSpaceCompletedEventHandler(object sender, GetUsedSpaceCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetUsedSpaceCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal GetUsedSpaceCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public long Result {
get {
this.RaiseExceptionIfNecessary();
return ((long)(this.results[0]));
}
}
}
} }

View file

@ -55,9 +55,9 @@ namespace WebsitePanel.Server
[WebMethod, SoapHeader("settings")] [WebMethod, SoapHeader("settings")]
public OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation) public OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string organizationDomainName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation)
{ {
return CrmProvider.CreateOrganization(organizationId, organizationUniqueName, organizationFriendlyName, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation); return CrmProvider.CreateOrganization(organizationId, organizationUniqueName, organizationFriendlyName, organizationDomainName, ou, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation);
} }
[WebMethod, SoapHeader("settings")] [WebMethod, SoapHeader("settings")]
@ -126,5 +126,13 @@ namespace WebsitePanel.Server
{ {
return CrmProvider.ChangeUserState(disable, orgName, crmUserId); return CrmProvider.ChangeUserState(disable, orgName, crmUserId);
} }
[WebMethod, SoapHeader("settings")]
public long GetUsedSpace(Guid organizationId)
{
return CrmProvider.GetUsedSpace( organizationId);
}
} }
} }

View file

@ -277,7 +277,6 @@
<ModuleDefinition id="LyncPhoneNumbers"> <ModuleDefinition id="LyncPhoneNumbers">
<Controls> <Controls>
<Control key="" src="WebsitePanel/LyncPhoneNumbers.ascx" title="LyncPhoneNumbers" type="View" /> <Control key="" src="WebsitePanel/LyncPhoneNumbers.ascx" title="LyncPhoneNumbers" type="View" />
<Control key="allocate_phonenumbers" src="WebsitePanel/LyncAllocatePhoneNumbers.ascx" title="LyncPhoneNumbers" type="View" />
</Controls> </Controls>
</ModuleDefinition> </ModuleDefinition>
<ModuleDefinition id="FtpAccounts"> <ModuleDefinition id="FtpAccounts">
@ -554,6 +553,8 @@
<Control key="create_enterprisestorage_folder" src="WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx" title="Create New ES Folder" type="View" /> <Control key="create_enterprisestorage_folder" src="WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx" title="Create New ES Folder" type="View" />
<Control key="enterprisestorage_folder_settings" src="WebsitePanel/ExchangeServer/EnterpriseStorageFolderGeneralSettings.ascx" title="Edit ES Folder" type="View" /> <Control key="enterprisestorage_folder_settings" src="WebsitePanel/ExchangeServer/EnterpriseStorageFolderGeneralSettings.ascx" title="Edit ES Folder" type="View" />
<Control key="lync_phonenumbers" src="WebsitePanel/Lync/LyncPhoneNumbers.ascx" title="LyncPhoneNumbers" type="View" />
<Control key="allocate_phonenumbers" src="WebsitePanel/Lync/LyncAllocatePhoneNumbers.ascx" title="LyncPhoneNumbers" type="View" />
</Controls> </Controls>
</ModuleDefinition> </ModuleDefinition>

View file

@ -108,7 +108,7 @@ namespace WebsitePanel.Portal
public PackageIPAddress[] GetPackageIPAddresses(int packageId, IPAddressPool pool, string filterColumn, string filterValue, public PackageIPAddress[] GetPackageIPAddresses(int packageId, IPAddressPool pool, string filterColumn, string filterValue,
string sortColumn, int maximumRows, int startRowIndex) string sortColumn, int maximumRows, int startRowIndex)
{ {
packageAddresses = ES.Services.Servers.GetPackageIPAddresses(packageId, pool, packageAddresses = ES.Services.Servers.GetPackageIPAddresses(packageId, 0, pool,
filterColumn, filterValue, sortColumn, startRowIndex, maximumRows, true); filterColumn, filterValue, sortColumn, startRowIndex, maximumRows, true);
return packageAddresses.Items; return packageAddresses.Items;
} }

View file

@ -130,7 +130,7 @@ namespace WebsitePanel.Portal
public PackageIPAddress[] GetPackageIPAddresses(int packageId, IPAddressPool pool, string filterColumn, string filterValue, public PackageIPAddress[] GetPackageIPAddresses(int packageId, IPAddressPool pool, string filterColumn, string filterValue,
string sortColumn, int maximumRows, int startRowIndex) string sortColumn, int maximumRows, int startRowIndex)
{ {
packageAddresses = ES.Services.Servers.GetPackageIPAddresses(packageId, pool, packageAddresses = ES.Services.Servers.GetPackageIPAddresses(packageId, 0, pool,
filterColumn, filterValue, sortColumn, startRowIndex, maximumRows, true); filterColumn, filterValue, sortColumn, startRowIndex, maximumRows, true);
return packageAddresses.Items; return packageAddresses.Items;
} }
@ -139,6 +139,19 @@ namespace WebsitePanel.Portal
{ {
return packageAddresses.Count; return packageAddresses.Count;
} }
public PackageIPAddress[] GetPackageIPAddresses(int packageId, int orgId, IPAddressPool pool, string filterColumn, string filterValue,
string sortColumn, int maximumRows, int startRowIndex)
{
packageAddresses = ES.Services.Servers.GetPackageIPAddresses(packageId, orgId, pool,
filterColumn, filterValue, sortColumn, startRowIndex, maximumRows, true);
return packageAddresses.Items;
}
public int GetPackageIPAddressesCount(int packageId, int orgId, IPAddressPool pool, string filterColumn, string filterValue)
{
return packageAddresses.Count;
}
#endregion #endregion
#region Package Private IP Addresses #region Package Private IP Addresses

View file

@ -210,4 +210,7 @@
<data name="Text.EnterpriseStorageFolders" xml:space="preserve"> <data name="Text.EnterpriseStorageFolders" xml:space="preserve">
<value>Folders</value> <value>Folders</value>
</data> </data>
<data name="Text.LyncPhoneNumbers" xml:space="preserve">
<value>Phone Numbers</value>
</data>
</root> </root>

View file

@ -246,6 +246,9 @@ namespace WebsitePanel.Portal.ExchangeServer.UserControls
if (Utils.CheckQouta(Quotas.LYNC_FEDERATION, cntx)) if (Utils.CheckQouta(Quotas.LYNC_FEDERATION, cntx))
lyncGroup.MenuItems.Add(CreateMenuItem("LyncFederationDomains", "lync_federationdomains")); lyncGroup.MenuItems.Add(CreateMenuItem("LyncFederationDomains", "lync_federationdomains"));
if (Utils.CheckQouta(Quotas.LYNC_PHONE, cntx))
lyncGroup.MenuItems.Add(CreateMenuItem("LyncPhoneNumbers", "lync_phonenumbers"));
groups.Add(lyncGroup); groups.Add(lyncGroup);
} }

View file

@ -135,4 +135,7 @@
<data name="DomainRequiredValidator.Text" xml:space="preserve"> <data name="DomainRequiredValidator.Text" xml:space="preserve">
<value>*</value> <value>*</value>
</data> </data>
<data name="Text.PageName" xml:space="preserve">
<value>Lync Add Federation Domain</value>
</data>
</root> </root>

View file

@ -123,4 +123,7 @@
<data name="secQuotas.Text" xml:space="preserve"> <data name="secQuotas.Text" xml:space="preserve">
<value>Quotas</value> <value>Quotas</value>
</data> </data>
<data name="Text.PageName" xml:space="preserve">
<value>Phone Numbers</value>
</data>
</root> </root>

View file

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="locIPQuota.Text" xml:space="preserve">
<value>Number of Phone Numbers:</value>
</data>
<data name="secQuotas.Text" xml:space="preserve">
<value>Quotas</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Phone Numbers</value>
</data>
</root>

View file

@ -0,0 +1,40 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LyncAllocatePhoneNumbers.ascx.cs" Inherits="WebsitePanel.Portal.Lync.LyncAllocatePhoneNumbers" %>
<%@ Register Src="UserControls/AllocatePackagePhoneNumbers.ascx" TagName="AllocatePackagePhoneNumbers" TagPrefix="wsp" %>
<%@ Register Src="../ExchangeServer/UserControls/UserSelector.ascx" TagName="UserSelector" TagPrefix="wsp" %>
<%@ Register Src="../ExchangeServer/UserControls/Menu.ascx" TagName="Menu" TagPrefix="wsp" %>
<%@ Register Src="../ExchangeServer/UserControls/Breadcrumb.ascx" TagName="Breadcrumb" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/QuotaViewer.ascx" TagName="QuotaViewer" TagPrefix="wsp" %>
<%@ Register Src="UserControls/LyncUserPlanSelector.ascx" TagName="LyncUserPlanSelector" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/PackagePhoneNumbers.ascx" TagName="PackagePhoneNumbers" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/Quota.ascx" TagName="Quota" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/CollapsiblePanel.ascx" TagName="CollapsiblePanel" TagPrefix="wsp" %>
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server" />
<div id="ExchangeContainer">
<div class="Module">
<div class="Header">
<wsp:Breadcrumb id="breadcrumb" runat="server" PageName="Text.PageName" meta:resourcekey="breadcrumb" />
</div>
<div class="Left">
<wsp:Menu id="menu" runat="server" />
</div>
<div class="Content">
<div class="Center">
<div class="Title">
<asp:Image ID="Image1" SkinID="LyncLogo" runat="server" />
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle"></asp:Localize>
</div>
<div class="FormBody">
<wsp:AllocatePackagePhoneNumbers id="allocatePhoneNumbers" runat="server"
Pool="PhoneNumbers"
ResourceGroup="Web"
ListAddressesControl="lync_phonenumbers" />
</div>
</div>
</div>
</div>
</div>

View file

@ -32,7 +32,7 @@ using System.Web;
using System.Web.UI; using System.Web.UI;
using System.Web.UI.WebControls; using System.Web.UI.WebControls;
namespace WebsitePanel.Portal namespace WebsitePanel.Portal.Lync
{ {
public partial class LyncAllocatePhoneNumbers : WebsitePanelModuleBase public partial class LyncAllocatePhoneNumbers : WebsitePanelModuleBase
{ {

View file

@ -0,0 +1,69 @@
//------------------------------------------------------------------------------
// <автоматически создаваемое>
// Этот код создан программой.
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </автоматически создаваемое>
//------------------------------------------------------------------------------
namespace WebsitePanel.Portal.Lync {
public partial class LyncAllocatePhoneNumbers {
/// <summary>
/// asyncTasks элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
/// <summary>
/// breadcrumb элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
/// <summary>
/// menu элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
/// <summary>
/// Image1 элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Image Image1;
/// <summary>
/// locTitle элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locTitle;
/// <summary>
/// allocatePhoneNumbers элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.UserControls.AllocatePackagePhoneNumbers allocatePhoneNumbers;
}
}

View file

@ -57,7 +57,7 @@ namespace WebsitePanel.Portal.Lync
private void BindPhoneNumbers() private void BindPhoneNumbers()
{ {
PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, IPAddressPool.PhoneNumbers); PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, PanelRequest.ItemID, IPAddressPool.PhoneNumbers);
if (ips.Length > 0) if (ips.Length > 0)
{ {

View file

@ -1,39 +1,10 @@
// Copyright (c) 2011, 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.
// Runtime Version:2.0.50727.3074
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace WebsitePanel.Portal.Lync { namespace WebsitePanel.Portal.Lync {
@ -42,192 +13,182 @@ namespace WebsitePanel.Portal.Lync {
public partial class CreateLyncUser { public partial class CreateLyncUser {
/// <summary> /// <summary>
/// asyncTasks control. /// asyncTasks элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks; protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
/// <summary> /// <summary>
/// breadcrumb control. /// breadcrumb элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb; protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
/// <summary> /// <summary>
/// menu control. /// menu элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu; protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
/// <summary> /// <summary>
/// Image1 control. /// Image1 элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Image Image1; protected global::System.Web.UI.WebControls.Image Image1;
/// <summary> /// <summary>
/// locTitle control. /// locTitle элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locTitle; protected global::System.Web.UI.WebControls.Localize locTitle;
/// <summary> /// <summary>
/// messageBox control. /// messageBox элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
/// <summary> /// <summary>
/// ExistingUserTable control. /// ExistingUserTable элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlTable ExistingUserTable; protected global::System.Web.UI.HtmlControls.HtmlTable ExistingUserTable;
/// <summary> /// <summary>
/// Localize1 control. /// Localize1 элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize Localize1; protected global::System.Web.UI.WebControls.Localize Localize1;
/// <summary> /// <summary>
/// userSelector control. /// userSelector элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.UserSelector userSelector; protected global::WebsitePanel.Portal.ExchangeServer.UserControls.UserSelector userSelector;
/// <summary> /// <summary>
/// locPlanName control. /// locPlanName элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locPlanName; protected global::System.Web.UI.WebControls.Localize locPlanName;
/// <summary> /// <summary>
/// planSelector control. /// planSelector элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.Lync.UserControls.LyncUserPlanSelector planSelector; protected global::WebsitePanel.Portal.Lync.UserControls.LyncUserPlanSelector planSelector;
/// <summary> /// <summary>
/// pnEnterpriseVoice control. /// pnEnterpriseVoice элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Panel pnEnterpriseVoice; protected global::System.Web.UI.WebControls.Panel pnEnterpriseVoice;
/// <summary> /// <summary>
/// locPhoneNumber control. /// locPhoneNumber элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locPhoneNumber; protected global::System.Web.UI.WebControls.Localize locPhoneNumber;
/// <summary> /// <summary>
/// ddlPhoneNumber control. /// tb_PhoneNumber элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox tb_PhoneNumber;
/// <summary>
/// ddlPhoneNumber элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlPhoneNumber; protected global::System.Web.UI.WebControls.DropDownList ddlPhoneNumber;
/// <summary> /// <summary>
/// PhoneFormatValidator control. /// PhoneFormatValidator элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RegularExpressionValidator PhoneFormatValidator; protected global::System.Web.UI.WebControls.RegularExpressionValidator PhoneFormatValidator;
/// <summary> /// <summary>
/// locLyncPin control. /// locLyncPin элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locLyncPin; protected global::System.Web.UI.WebControls.Localize locLyncPin;
/// <summary> /// <summary>
/// tbPin control. /// tbPin элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox tbPin; protected global::System.Web.UI.WebControls.TextBox tbPin;
/// <summary> /// <summary>
/// PinRegularExpressionValidator control. /// PinRegularExpressionValidator элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RegularExpressionValidator PinRegularExpressionValidator; protected global::System.Web.UI.WebControls.RegularExpressionValidator PinRegularExpressionValidator;
/// <summary> /// <summary>
/// btnCreate control. /// btnCreate элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Button btnCreate; protected global::System.Web.UI.WebControls.Button btnCreate;
} }

View file

@ -52,7 +52,7 @@ namespace WebsitePanel.Portal.Lync
private void BindPhoneNumbers() private void BindPhoneNumbers()
{ {
PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, IPAddressPool.PhoneNumbers); PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, PanelRequest.ItemID, IPAddressPool.PhoneNumbers);
if (ips.Length > 0) if (ips.Length > 0)
{ {

View file

@ -0,0 +1,57 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LyncPhoneNumbers.ascx.cs" Inherits="WebsitePanel.Portal.Lync.LyncPhoneNumbers" %>
<%@ Register Src="../ExchangeServer/UserControls/UserSelector.ascx" TagName="UserSelector" TagPrefix="wsp" %>
<%@ Register Src="../ExchangeServer/UserControls/Menu.ascx" TagName="Menu" TagPrefix="wsp" %>
<%@ Register Src="../ExchangeServer/UserControls/Breadcrumb.ascx" TagName="Breadcrumb" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/QuotaViewer.ascx" TagName="QuotaViewer" TagPrefix="wsp" %>
<%@ Register Src="UserControls/LyncUserPlanSelector.ascx" TagName="LyncUserPlanSelector" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/PackagePhoneNumbers.ascx" TagName="PackagePhoneNumbers" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/Quota.ascx" TagName="Quota" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/CollapsiblePanel.ascx" TagName="CollapsiblePanel" TagPrefix="wsp" %>
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server" />
<div id="ExchangeContainer">
<div class="Module">
<div class="Header">
<wsp:Breadcrumb id="breadcrumb" runat="server" PageName="Text.PageName" meta:resourcekey="breadcrumb" />
</div>
<div class="Left">
<wsp:Menu id="menu" runat="server" />
</div>
<div class="Content">
<div class="Center">
<div class="Title">
<asp:Image ID="Image1" SkinID="LyncLogo" runat="server" />
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle"></asp:Localize>
</div>
<div class="FormBody">
<wsp:PackagePhoneNumbers id="phoneNumbers" runat="server"
Pool="PhoneNumbers"
EditItemControl=""
SpaceHomeControl=""
AllocateAddressesControl="allocate_phonenumbers"
ManageAllowed="true" />
<br />
<wsp:CollapsiblePanel id="secQuotas" runat="server"
TargetControlID="QuotasPanel" meta:resourcekey="secQuotas" Text="Quotas">
</wsp:CollapsiblePanel>
<asp:Panel ID="QuotasPanel" runat="server" Height="0" style="overflow:hidden;">
<table cellspacing="6">
<tr>
<td><asp:Localize ID="locIPQuota" runat="server" meta:resourcekey="locIPQuota" Text="Number of Phone Numbes:"></asp:Localize></td>
<td><wsp:Quota ID="phoneQuota" runat="server" QuotaName="Lync.PhoneNumbers" /></td>
</tr>
</table>
</asp:Panel>
</div>
</div>
</div>
</div>
</div>

View file

@ -1,4 +1,4 @@
// Copyright (c) 2011, Outercurve Foundation. // Copyright (c) 2012, Outercurve Foundation.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without modification, // Redistribution and use in source and binary forms, with or without modification,
@ -26,29 +26,18 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------ using System;
// <auto-generated> using System.Collections.Generic;
// This code was generated by a tool. using System.Web;
// Runtime Version:2.0.50727.3074 using System.Web.UI;
// using System.Web.UI.WebControls;
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebsitePanel.Portal { namespace WebsitePanel.Portal.Lync
{
public partial class LyncPhoneNumbers : WebsitePanelModuleBase
public partial class LyncAllocatePhoneNumbers { {
protected void Page_Load(object sender, EventArgs e)
/// <summary> {
/// allocatePhoneNumbers control. }
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.UserControls.AllocatePackagePhoneNumbers allocatePhoneNumbers;
} }
} }

View file

@ -0,0 +1,105 @@
//------------------------------------------------------------------------------
// <автоматически создаваемое>
// Этот код создан программой.
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </автоматически создаваемое>
//------------------------------------------------------------------------------
namespace WebsitePanel.Portal.Lync {
public partial class LyncPhoneNumbers {
/// <summary>
/// asyncTasks элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
/// <summary>
/// breadcrumb элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
/// <summary>
/// menu элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
/// <summary>
/// Image1 элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Image Image1;
/// <summary>
/// locTitle элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locTitle;
/// <summary>
/// phoneNumbers элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.UserControls.PackagePhoneNumbers phoneNumbers;
/// <summary>
/// secQuotas элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secQuotas;
/// <summary>
/// QuotasPanel элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Panel QuotasPanel;
/// <summary>
/// locIPQuota элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locIPQuota;
/// <summary>
/// phoneQuota элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.Quota phoneQuota;
}
}

View file

@ -1,5 +1,5 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AllocatePackagePhoneNumbers.ascx.cs" Inherits="WebsitePanel.Portal.UserControls.AllocatePackagePhoneNumbers" %> <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AllocatePackagePhoneNumbers.ascx.cs" Inherits="WebsitePanel.Portal.UserControls.AllocatePackagePhoneNumbers" %>
<%@ Register Src="SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %> <%@ Register Src="../../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<wsp:SimpleMessageBox id="messageBox" runat="server" /> <wsp:SimpleMessageBox id="messageBox" runat="server" />

View file

@ -36,7 +36,7 @@ using WebsitePanel.Providers.Common;
namespace WebsitePanel.Portal.UserControls namespace WebsitePanel.Portal.UserControls
{ {
public partial class AllocatePackagePhoneNumbers : WebsitePanelControlBase public partial class AllocatePackagePhoneNumbers : WebsitePanelModuleBase
{ {
private IPAddressPool pool; private IPAddressPool pool;
public IPAddressPool Pool public IPAddressPool Pool
@ -129,6 +129,7 @@ namespace WebsitePanel.Portal.UserControls
} }
ResultObject res = ES.Services.Servers.AllocatePackageIPAddresses(PanelSecurity.PackageId, ResultObject res = ES.Services.Servers.AllocatePackageIPAddresses(PanelSecurity.PackageId,
PanelRequest.ItemID,
ResourceGroup, Pool, ResourceGroup, Pool,
radioExternalRandom.Checked, radioExternalRandom.Checked,
Utils.ParseInt(txtExternalAddressesNumber.Text), Utils.ParseInt(txtExternalAddressesNumber.Text),
@ -136,7 +137,8 @@ namespace WebsitePanel.Portal.UserControls
if (res.IsSuccess) if (res.IsSuccess)
{ {
// return back // return back
Response.Redirect(HostModule.EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), ListAddressesControl)); Response.Redirect(HostModule.EditUrl("ItemID", PanelRequest.ItemID.ToString(), ListAddressesControl,
PortalUtils.SPACE_ID_PARAM + "=" + PanelSecurity.PackageId));
} }
else else
{ {

View file

@ -0,0 +1,195 @@
//------------------------------------------------------------------------------
// <автоматически создаваемое>
// Этот код создан программой.
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </автоматически создаваемое>
//------------------------------------------------------------------------------
namespace WebsitePanel.Portal.UserControls {
public partial class AllocatePackagePhoneNumbers {
/// <summary>
/// messageBox элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
/// <summary>
/// validatorsSummary элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.ValidationSummary validatorsSummary;
/// <summary>
/// ErrorMessagesList элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl ErrorMessagesList;
/// <summary>
/// EmptyAddressesMessage элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl EmptyAddressesMessage;
/// <summary>
/// locNotEnoughAddresses элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locNotEnoughAddresses;
/// <summary>
/// QuotaReachedMessage элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl QuotaReachedMessage;
/// <summary>
/// locQuotaReached элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locQuotaReached;
/// <summary>
/// AddressesTable элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.UpdatePanel AddressesTable;
/// <summary>
/// radioExternalRandom элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.RadioButton radioExternalRandom;
/// <summary>
/// AddressesNumberRow элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlTableRow AddressesNumberRow;
/// <summary>
/// locExternalAddresses элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locExternalAddresses;
/// <summary>
/// txtExternalAddressesNumber элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtExternalAddressesNumber;
/// <summary>
/// ExternalAddressesValidator элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.RequiredFieldValidator ExternalAddressesValidator;
/// <summary>
/// litMaxAddresses элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Literal litMaxAddresses;
/// <summary>
/// radioExternalSelected элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.RadioButton radioExternalSelected;
/// <summary>
/// AddressesListRow элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlTableRow AddressesListRow;
/// <summary>
/// listExternalAddresses элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.ListBox listExternalAddresses;
/// <summary>
/// locHoldCtrl элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locHoldCtrl;
/// <summary>
/// btnAdd элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnAdd;
/// <summary>
/// btnCancel элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnCancel;
}
}

View file

@ -1,11 +0,0 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LyncAllocatePhoneNumbers.ascx.cs" Inherits="WebsitePanel.Portal.LyncAllocatePhoneNumbers" %>
<%@ Register Src="UserControls/AllocatePackagePhoneNumbers.ascx" TagName="AllocatePackagePhoneNumbers" TagPrefix="wsp" %>
<div class="FormBody">
<wsp:AllocatePackagePhoneNumbers id="allocatePhoneNumbers" runat="server"
Pool="PhoneNumbers"
ResourceGroup="Web"
ListAddressesControl="" />
</div>

View file

@ -8,7 +8,6 @@
Pool="PhoneNumbers" Pool="PhoneNumbers"
EditItemControl="" EditItemControl=""
SpaceHomeControl="" SpaceHomeControl=""
AllocateAddressesControl="allocate_phonenumbers"
ManageAllowed="true" /> ManageAllowed="true" />
<br /> <br />

View file

@ -1,39 +1,10 @@
// Copyright (c) 2011, 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.
// Runtime Version:2.0.50727.3074
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace WebsitePanel.Portal { namespace WebsitePanel.Portal {
@ -42,52 +13,47 @@ namespace WebsitePanel.Portal {
public partial class LyncPhoneNumbers { public partial class LyncPhoneNumbers {
/// <summary> /// <summary>
/// webAddresses control. /// webAddresses элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.UserControls.PackagePhoneNumbers webAddresses; protected global::WebsitePanel.Portal.UserControls.PackagePhoneNumbers webAddresses;
/// <summary> /// <summary>
/// secQuotas control. /// secQuotas элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secQuotas; protected global::WebsitePanel.Portal.CollapsiblePanel secQuotas;
/// <summary> /// <summary>
/// QuotasPanel control. /// QuotasPanel элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Panel QuotasPanel; protected global::System.Web.UI.WebControls.Panel QuotasPanel;
/// <summary> /// <summary>
/// locIPQuota control. /// locIPQuota элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locIPQuota; protected global::System.Web.UI.WebControls.Localize locIPQuota;
/// <summary> /// <summary>
/// addressesQuota control. /// addressesQuota элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.Quota addressesQuota; protected global::WebsitePanel.Portal.Quota addressesQuota;
} }

View file

@ -51,14 +51,47 @@
</tr> </tr>
<tr> <tr>
<td class="SubHead" width="200" nowrap>Deployment web service</td> <td class="SubHead" width="200" nowrap>Web Application Server</td>
<td class="Normal" width="100%"> <td class="Normal" width="100%">
<asp:TextBox runat="server" ID="txtAppRootDomain" Width="200px" /> <asp:TextBox runat="server" ID="txtAppRootDomain" Width="200px" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtAppRootDomain" ErrorMessage="*" /> <asp:RequiredFieldValidator runat="server" ControlToValidate="txtAppRootDomain" ErrorMessage="*" />
</td> </td>
</tr> </tr>
<tr>
<td class="SubHead" width="200" nowrap>Organization Web Service</td>
<td class="Normal" width="100%">
<asp:TextBox runat="server" ID="txtOrganizationWebService" Width="200px" />
</td>
</tr>
<tr>
<td class="SubHead" width="200" nowrap>Discovery Web Service</td>
<td class="Normal" width="100%">
<asp:TextBox runat="server" ID="txtDiscoveryWebService" Width="200px" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtDiscoveryWebService" ErrorMessage="*" />
</td>
</tr>
<tr>
<td class="SubHead" width="200" nowrap>Deployment Web Service</td>
<td class="Normal" width="100%">
<asp:TextBox runat="server" ID="txtDeploymentWebService" Width="200px" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtDeploymentWebService" ErrorMessage="*" />
</td>
</tr>
<tr>
<td class="SubHead" width="200" nowrap>Service account</td>
<td class="Normal" width="100%">
<asp:TextBox runat="server" ID="txtUserName" Width="200px" />
</td>
</tr>
<tr>
<td class="SubHead" width="200" nowrap>Password</td>
<td class="Normal" width="100%">
<asp:TextBox runat="server" ID="txtPassword" Width="200px" TextMode="Password" />
</td>
</tr>
</table> </table>

View file

@ -47,7 +47,16 @@ namespace WebsitePanel.Portal.ProviderControls
txtSqlServer.Text = settings[Constants.SqlServer]; txtSqlServer.Text = settings[Constants.SqlServer];
txtDomainName.Text = settings[Constants.IFDWebApplicationRootDomain]; txtDomainName.Text = settings[Constants.IFDWebApplicationRootDomain];
txtPort.Text = settings[Constants.Port]; txtPort.Text = settings[Constants.Port];
txtAppRootDomain.Text = settings[Constants.AppRootDomain]; txtAppRootDomain.Text = settings[Constants.AppRootDomain];
txtOrganizationWebService.Text = settings[Constants.OrganizationWebService];
txtDiscoveryWebService.Text = settings[Constants.DiscoveryWebService];
txtDeploymentWebService.Text = settings[Constants.DeploymentWebService];
txtPassword.Text = settings[Constants.Password];
ViewState["PWD"] = settings[Constants.Password];
txtUserName.Text = settings[Constants.UserName];
int selectedAddressid = FindAddressByText(settings[Constants.CRMWebsiteIP]); int selectedAddressid = FindAddressByText(settings[Constants.CRMWebsiteIP]);
ddlCrmIpAddress.AddressId = (selectedAddressid > 0) ? selectedAddressid : 0; ddlCrmIpAddress.AddressId = (selectedAddressid > 0) ? selectedAddressid : 0;
@ -61,7 +70,15 @@ namespace WebsitePanel.Portal.ProviderControls
settings[Constants.SqlServer] = txtSqlServer.Text; settings[Constants.SqlServer] = txtSqlServer.Text;
settings[Constants.IFDWebApplicationRootDomain] = txtDomainName.Text; settings[Constants.IFDWebApplicationRootDomain] = txtDomainName.Text;
settings[Constants.Port] = txtPort.Text; settings[Constants.Port] = txtPort.Text;
settings[Constants.AppRootDomain] = txtAppRootDomain.Text; settings[Constants.AppRootDomain] = txtAppRootDomain.Text;
settings[Constants.OrganizationWebService] = txtOrganizationWebService.Text;
settings[Constants.DiscoveryWebService] = txtDiscoveryWebService.Text;
settings[Constants.DeploymentWebService] = txtDeploymentWebService.Text;
settings[Constants.Password] = (txtPassword.Text.Length > 0) ? txtPassword.Text : (string)ViewState["PWD"];
settings[Constants.UserName] = txtUserName.Text;
if (ddlCrmIpAddress.AddressId > 0) if (ddlCrmIpAddress.AddressId > 0)
{ {
IPAddressInfo address = ES.Services.Servers.GetIPAddress(ddlCrmIpAddress.AddressId); IPAddressInfo address = ES.Services.Servers.GetIPAddress(ddlCrmIpAddress.AddressId);

View file

@ -1,39 +1,10 @@
// Copyright (c) 2011, 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. // Этот код создан программой.
// //
// Changes to this file may cause incorrect behavior and will be lost if // Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// the code is regenerated. // повторной генерации кода.
// </auto-generated> // </автоматически создаваемое>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace WebsitePanel.Portal.ProviderControls { namespace WebsitePanel.Portal.ProviderControls {
@ -42,93 +13,129 @@ namespace WebsitePanel.Portal.ProviderControls {
public partial class CRM2011_Settings { public partial class CRM2011_Settings {
/// <summary> /// <summary>
/// txtSqlServer control. /// txtSqlServer элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtSqlServer; protected global::System.Web.UI.WebControls.TextBox txtSqlServer;
/// <summary> /// <summary>
/// RequiredFieldValidator1 control. /// RequiredFieldValidator1 элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1; protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1;
/// <summary> /// <summary>
/// txtReportingService control. /// txtReportingService элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtReportingService; protected global::System.Web.UI.WebControls.TextBox txtReportingService;
/// <summary> /// <summary>
/// txtDomainName control. /// txtDomainName элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtDomainName; protected global::System.Web.UI.WebControls.TextBox txtDomainName;
/// <summary> /// <summary>
/// RequiredFieldValidator2 control. /// RequiredFieldValidator2 элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator2; protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator2;
/// <summary> /// <summary>
/// ddlSchema control. /// ddlSchema элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlSchema; protected global::System.Web.UI.WebControls.DropDownList ddlSchema;
/// <summary> /// <summary>
/// ddlCrmIpAddress control. /// ddlCrmIpAddress элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.SelectIPAddress ddlCrmIpAddress; protected global::WebsitePanel.Portal.SelectIPAddress ddlCrmIpAddress;
/// <summary> /// <summary>
/// txtPort control. /// txtPort элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtPort; protected global::System.Web.UI.WebControls.TextBox txtPort;
/// <summary> /// <summary>
/// txtAppRootDomain control. /// txtAppRootDomain элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtAppRootDomain; protected global::System.Web.UI.WebControls.TextBox txtAppRootDomain;
/// <summary>
/// txtOrganizationWebService элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtOrganizationWebService;
/// <summary>
/// txtDiscoveryWebService элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtDiscoveryWebService;
/// <summary>
/// txtDeploymentWebService элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtDeploymentWebService;
/// <summary>
/// txtUserName элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtUserName;
/// <summary>
/// txtPassword элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtPassword;
} }
} }

View file

@ -129,6 +129,7 @@ namespace WebsitePanel.Portal.UserControls
} }
ResultObject res = ES.Services.Servers.AllocatePackageIPAddresses(PanelSecurity.PackageId, ResultObject res = ES.Services.Servers.AllocatePackageIPAddresses(PanelSecurity.PackageId,
0,
ResourceGroup, Pool, ResourceGroup, Pool,
radioExternalRandom.Checked, radioExternalRandom.Checked,
Utils.ParseInt(txtExternalAddressesNumber.Text), Utils.ParseInt(txtExternalAddressesNumber.Text),

View file

@ -1,244 +0,0 @@
// Copyright (c) 2011, 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.
// Runtime Version:2.0.50727.3074
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebsitePanel.Portal.UserControls {
public partial class AllocatePackagePhoneNumbers {
/// <summary>
/// messageBox control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
/// <summary>
/// validatorsSummary 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 validatorsSummary;
/// <summary>
/// ErrorMessagesList control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl ErrorMessagesList;
/// <summary>
/// EmptyAddressesMessage control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl EmptyAddressesMessage;
/// <summary>
/// locNotEnoughAddresses 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 locNotEnoughAddresses;
/// <summary>
/// QuotaReachedMessage control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl QuotaReachedMessage;
/// <summary>
/// locQuotaReached 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 locQuotaReached;
/// <summary>
/// AddressesTable control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.UpdatePanel AddressesTable;
/// <summary>
/// radioExternalRandom 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.RadioButton radioExternalRandom;
/// <summary>
/// AddressesNumberRow control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlTableRow AddressesNumberRow;
/// <summary>
/// locExternalAddresses 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 locExternalAddresses;
/// <summary>
/// txtExternalAddressesNumber 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 txtExternalAddressesNumber;
/// <summary>
/// ExternalAddressesValidator 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.RequiredFieldValidator ExternalAddressesValidator;
/// <summary>
/// litMaxAddresses 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.Literal litMaxAddresses;
/// <summary>
/// radioExternalSelected 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.RadioButton radioExternalSelected;
/// <summary>
/// AddressesListRow control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlTableRow AddressesListRow;
/// <summary>
/// listExternalAddresses 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.ListBox listExternalAddresses;
/// <summary>
/// locHoldCtrl 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 locHoldCtrl;
/// <summary>
/// btnAdd 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 btnAdd;
/// <summary>
/// btnCancel 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 btnCancel;
}
}

View file

@ -74,6 +74,7 @@
onselecting="odsExternalAddressesPaged_Selecting"> onselecting="odsExternalAddressesPaged_Selecting">
<SelectParameters> <SelectParameters>
<asp:QueryStringParameter Name="packageId" QueryStringField="SpaceID" DefaultValue="0" /> <asp:QueryStringParameter Name="packageId" QueryStringField="SpaceID" DefaultValue="0" />
<asp:QueryStringParameter Name="orgId" QueryStringField="ItemID" DefaultValue="0" />
<asp:Parameter Name="pool" DefaultValue="0" /> <asp:Parameter Name="pool" DefaultValue="0" />
<asp:ControlParameter Name="filterColumn" ControlID="searchBox" PropertyName="FilterColumn" /> <asp:ControlParameter Name="filterColumn" ControlID="searchBox" PropertyName="FilterColumn" />
<asp:ControlParameter Name="filterValue" ControlID="searchBox" PropertyName="FilterValue" /> <asp:ControlParameter Name="filterValue" ControlID="searchBox" PropertyName="FilterValue" />

View file

@ -118,7 +118,8 @@ namespace WebsitePanel.Portal.UserControls
protected void btnAllocateAddress_Click(object sender, EventArgs e) protected void btnAllocateAddress_Click(object sender, EventArgs e)
{ {
Response.Redirect(HostModule.EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), AllocateAddressesControl)); Response.Redirect(HostModule.EditUrl("ItemID", PanelRequest.ItemID.ToString(), AllocateAddressesControl,
PortalUtils.SPACE_ID_PARAM + "=" + PanelSecurity.PackageId));
} }
protected void gvAddresses_RowDataBound(object sender, GridViewRowEventArgs e) protected void gvAddresses_RowDataBound(object sender, GridViewRowEventArgs e)

View file

@ -1,39 +1,10 @@
// Copyright (c) 2011, 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.
// Runtime Version:2.0.50727.3074
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace WebsitePanel.Portal.UserControls { namespace WebsitePanel.Portal.UserControls {
@ -42,62 +13,56 @@ namespace WebsitePanel.Portal.UserControls {
public partial class PackagePhoneNumbers { public partial class PackagePhoneNumbers {
/// <summary> /// <summary>
/// messageBox control. /// messageBox элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
/// <summary> /// <summary>
/// btnAllocateAddress control. /// btnAllocateAddress элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Button btnAllocateAddress; protected global::System.Web.UI.WebControls.Button btnAllocateAddress;
/// <summary> /// <summary>
/// searchBox control. /// searchBox элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.SearchBox searchBox; protected global::WebsitePanel.Portal.SearchBox searchBox;
/// <summary> /// <summary>
/// gvAddresses control. /// gvAddresses элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.GridView gvAddresses; protected global::System.Web.UI.WebControls.GridView gvAddresses;
/// <summary> /// <summary>
/// odsExternalAddressesPaged control. /// odsExternalAddressesPaged элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.ObjectDataSource odsExternalAddressesPaged; protected global::System.Web.UI.WebControls.ObjectDataSource odsExternalAddressesPaged;
/// <summary> /// <summary>
/// btnDeallocateAddresses control. /// btnDeallocateAddresses элемент управления.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Автоматически создаваемое поле.
/// To modify move field declaration from designer file to code-behind file. /// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Button btnDeallocateAddresses; protected global::System.Web.UI.WebControls.Button btnDeallocateAddresses;
} }

View file

@ -117,7 +117,7 @@ namespace WebsitePanel.Portal.VPS
if (PackagesHelper.IsQuotaEnabled(PanelSecurity.PackageId, Quotas.VPS_EXTERNAL_NETWORK_ENABLED)) if (PackagesHelper.IsQuotaEnabled(PanelSecurity.PackageId, Quotas.VPS_EXTERNAL_NETWORK_ENABLED))
{ {
// bind list // bind list
PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, IPAddressPool.VpsExternalNetwork); PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, 0, IPAddressPool.VpsExternalNetwork);
foreach (PackageIPAddress ip in ips) foreach (PackageIPAddress ip in ips)
{ {
string txt = ip.ExternalIP; string txt = ip.ExternalIP;

View file

@ -51,7 +51,7 @@ namespace WebsitePanel.Portal.VPS
private void BindExternalIPAddresses() private void BindExternalIPAddresses()
{ {
PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, IPAddressPool.VpsExternalNetwork); PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, 0, IPAddressPool.VpsExternalNetwork);
foreach (PackageIPAddress ip in ips) foreach (PackageIPAddress ip in ips)
{ {
string txt = ip.ExternalIP; string txt = ip.ExternalIP;

View file

@ -51,7 +51,7 @@ namespace WebsitePanel.Portal.VPSForPC
private void BindExternalIPAddresses() private void BindExternalIPAddresses()
{ {
PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, IPAddressPool.VpsExternalNetwork); PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, 0, IPAddressPool.VpsExternalNetwork);
foreach (PackageIPAddress ip in ips) foreach (PackageIPAddress ip in ips)
{ {
string txt = ip.ExternalIP; string txt = ip.ExternalIP;

View file

@ -92,7 +92,7 @@ namespace WebsitePanel.Portal
{ {
ddlIpAddresses.Items.Add(new ListItem("<Select IP>", "")); ddlIpAddresses.Items.Add(new ListItem("<Select IP>", ""));
PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, IPAddressPool.WebSites); PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, 0, IPAddressPool.WebSites);
foreach (PackageIPAddress ip in ips) foreach (PackageIPAddress ip in ips)
{ {
string fullIP = ip.ExternalIP; string fullIP = ip.ExternalIP;

View file

@ -179,7 +179,7 @@ namespace WebsitePanel.Portal
// bind unassigned IP addresses // bind unassigned IP addresses
ddlIpAddresses.Items.Clear(); ddlIpAddresses.Items.Clear();
PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(site.PackageId, IPAddressPool.WebSites); PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(site.PackageId, 0, IPAddressPool.WebSites);
foreach (PackageIPAddress ip in ips) foreach (PackageIPAddress ip in ips)
{ {
string fullIP = ip.ExternalIP; string fullIP = ip.ExternalIP;

View file

@ -403,6 +403,13 @@
<Compile Include="Lync\LyncFederationDomains.ascx.designer.cs"> <Compile Include="Lync\LyncFederationDomains.ascx.designer.cs">
<DependentUpon>LyncFederationDomains.ascx</DependentUpon> <DependentUpon>LyncFederationDomains.ascx</DependentUpon>
</Compile> </Compile>
<Compile Include="Lync\LyncPhoneNumbers.ascx.cs">
<DependentUpon>LyncPhoneNumbers.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Lync\LyncPhoneNumbers.ascx.designer.cs">
<DependentUpon>LyncPhoneNumbers.ascx</DependentUpon>
</Compile>
<Compile Include="Lync\LyncUserPlans.ascx.cs"> <Compile Include="Lync\LyncUserPlans.ascx.cs">
<DependentUpon>LyncUserPlans.ascx</DependentUpon> <DependentUpon>LyncUserPlans.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
@ -567,11 +574,11 @@
<Compile Include="UserControls\PackagePhoneNumbers.ascx.designer.cs"> <Compile Include="UserControls\PackagePhoneNumbers.ascx.designer.cs">
<DependentUpon>PackagePhoneNumbers.ascx</DependentUpon> <DependentUpon>PackagePhoneNumbers.ascx</DependentUpon>
</Compile> </Compile>
<Compile Include="UserControls\AllocatePackagePhoneNumbers.ascx.cs"> <Compile Include="Lync\UserControls\AllocatePackagePhoneNumbers.ascx.cs">
<DependentUpon>AllocatePackagePhoneNumbers.ascx</DependentUpon> <DependentUpon>AllocatePackagePhoneNumbers.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
</Compile> </Compile>
<Compile Include="UserControls\AllocatePackagePhoneNumbers.ascx.designer.cs"> <Compile Include="Lync\UserControls\AllocatePackagePhoneNumbers.ascx.designer.cs">
<DependentUpon>AllocatePackagePhoneNumbers.ascx</DependentUpon> <DependentUpon>AllocatePackagePhoneNumbers.ascx</DependentUpon>
</Compile> </Compile>
<Compile Include="VPSForPC\MonitoringPage.aspx.cs"> <Compile Include="VPSForPC\MonitoringPage.aspx.cs">
@ -3999,11 +4006,11 @@
<Compile Include="LyncPhoneNumbers.ascx.designer.cs"> <Compile Include="LyncPhoneNumbers.ascx.designer.cs">
<DependentUpon>LyncPhoneNumbers.ascx</DependentUpon> <DependentUpon>LyncPhoneNumbers.ascx</DependentUpon>
</Compile> </Compile>
<Compile Include="LyncAllocatePhoneNumbers.ascx.cs"> <Compile Include="Lync\LyncAllocatePhoneNumbers.ascx.cs">
<DependentUpon>LyncAllocatePhoneNumbers.ascx</DependentUpon> <DependentUpon>LyncAllocatePhoneNumbers.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
</Compile> </Compile>
<Compile Include="LyncAllocatePhoneNumbers.ascx.designer.cs"> <Compile Include="Lync\LyncAllocatePhoneNumbers.ascx.designer.cs">
<DependentUpon>LyncAllocatePhoneNumbers.ascx</DependentUpon> <DependentUpon>LyncAllocatePhoneNumbers.ascx</DependentUpon>
</Compile> </Compile>
<Compile Include="PhoneNumbers.ascx.cs"> <Compile Include="PhoneNumbers.ascx.cs">
@ -4049,6 +4056,7 @@
<Content Include="ExchangeServer\UserControls\GroupsList.ascx" /> <Content Include="ExchangeServer\UserControls\GroupsList.ascx" />
<Content Include="ExchangeServer\UserControls\SecurityGroupTabs.ascx" /> <Content Include="ExchangeServer\UserControls\SecurityGroupTabs.ascx" />
<Content Include="ExchangeServer\UserControls\UsersList.ascx" /> <Content Include="ExchangeServer\UserControls\UsersList.ascx" />
<Content Include="Lync\LyncPhoneNumbers.ascx" />
<Content Include="Lync\UserControls\LyncUserSettings.ascx" /> <Content Include="Lync\UserControls\LyncUserSettings.ascx" />
<Content Include="ProviderControls\CRM2011_Settings.ascx" /> <Content Include="ProviderControls\CRM2011_Settings.ascx" />
<Content Include="ProviderControls\EnterpriseStorage_Settings.ascx" /> <Content Include="ProviderControls\EnterpriseStorage_Settings.ascx" />
@ -4081,7 +4089,7 @@
<Content Include="UserControls\OrgIdPolicyEditor.ascx" /> <Content Include="UserControls\OrgIdPolicyEditor.ascx" />
<Content Include="UserControls\OrgPolicyEditor.ascx" /> <Content Include="UserControls\OrgPolicyEditor.ascx" />
<Content Include="UserControls\PackagePhoneNumbers.ascx" /> <Content Include="UserControls\PackagePhoneNumbers.ascx" />
<Content Include="UserControls\AllocatePackagePhoneNumbers.ascx" /> <Content Include="Lync\UserControls\AllocatePackagePhoneNumbers.ascx" />
<Content Include="VPSForPC\MonitoringPage.aspx" /> <Content Include="VPSForPC\MonitoringPage.aspx" />
<Content Include="VPSForPC\VdcAccountVLanAdd.ascx" /> <Content Include="VPSForPC\VdcAccountVLanAdd.ascx" />
<Content Include="VPSForPC\VdcAccountVLanNetwork.ascx" /> <Content Include="VPSForPC\VdcAccountVLanNetwork.ascx" />
@ -4145,7 +4153,7 @@
<Content Include="WebSitesHeliconZooControl.ascx" /> <Content Include="WebSitesHeliconZooControl.ascx" />
<Content Include="WebsitesSSL.ascx" /> <Content Include="WebsitesSSL.ascx" />
<Content Include="LyncPhoneNumbers.ascx" /> <Content Include="LyncPhoneNumbers.ascx" />
<Content Include="LyncAllocatePhoneNumbers.ascx" /> <Content Include="Lync\LyncAllocatePhoneNumbers.ascx" />
<Content Include="PhoneNumbers.ascx" /> <Content Include="PhoneNumbers.ascx" />
<Content Include="PhoneNumbersAddPhoneNumber.ascx" /> <Content Include="PhoneNumbersAddPhoneNumber.ascx" />
<Content Include="PhoneNumbersEditPhoneNumber.ascx" /> <Content Include="PhoneNumbersEditPhoneNumber.ascx" />
@ -5233,7 +5241,7 @@
<Content Include="UserControls\App_LocalResources\PackagePhoneNumbers.ascx.resx"> <Content Include="UserControls\App_LocalResources\PackagePhoneNumbers.ascx.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Content> </Content>
<Content Include="UserControls\App_LocalResources\AllocatePackagePhoneNumbers.ascx.resx"> <Content Include="Lync\UserControls\App_LocalResources\AllocatePackagePhoneNumbers.ascx.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Content> </Content>
<None Include="Resources\Windows2008_Settings.ascx.resx" /> <None Include="Resources\Windows2008_Settings.ascx.resx" />
@ -5250,7 +5258,7 @@
<Content Include="App_LocalResources\LyncPhoneNumbers.ascx.resx"> <Content Include="App_LocalResources\LyncPhoneNumbers.ascx.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Content> </Content>
<Content Include="App_LocalResources\LyncAllocatePhoneNumbers.ascx.resx"> <Content Include="Lync\App_LocalResources\LyncAllocatePhoneNumbers.ascx.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Content> </Content>
<Content Include="App_LocalResources\PhoneNumbers.ascx.resx" /> <Content Include="App_LocalResources\PhoneNumbers.ascx.resx" />
@ -5277,6 +5285,9 @@
<Content Include="ExchangeServer\App_LocalResources\EnterpriseStorageCreateFolder.ascx.resx" /> <Content Include="ExchangeServer\App_LocalResources\EnterpriseStorageCreateFolder.ascx.resx" />
<Content Include="ExchangeServer\App_LocalResources\EnterpriseStorageFolderGeneralSettings.ascx.resx" /> <Content Include="ExchangeServer\App_LocalResources\EnterpriseStorageFolderGeneralSettings.ascx.resx" />
<Content Include="ExchangeServer\UserControls\App_LocalResources\EnterpriseStoragePermissions.ascx.resx" /> <Content Include="ExchangeServer\UserControls\App_LocalResources\EnterpriseStoragePermissions.ascx.resx" />
<Content Include="Lync\App_LocalResources\LyncPhoneNumbers.ascx.resx">
<SubType>Designer</SubType>
</Content>
<EmbeddedResource Include="UserControls\App_LocalResources\EditDomainsList.ascx.resx"> <EmbeddedResource Include="UserControls\App_LocalResources\EditDomainsList.ascx.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
@ -6230,9 +6241,7 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup />
<Folder Include="Lync\UserControls\App_LocalResources\" />
</ItemGroup>
<PropertyGroup> <PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>