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)
END
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[]
{
new SqlParameter("@PackageID", packageId),
new SqlParameter("@OrgID", orgId),
new SqlParameter("@xml", xml)
};
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)
{
IDataReader reader = SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
"GetPackageIPAddresses",
new SqlParameter("@PackageID", packageId),
new SqlParameter("@OrgID", orgId),
new SqlParameter("@PoolId", poolId),
new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
@ -3306,12 +3308,13 @@ namespace WebsitePanel.EnterpriseServer
#endregion
#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,
"GetPackageUnassignedIPAddresses",
new SqlParameter("@ActorID", actorId),
new SqlParameter("@PackageID", packageId),
new SqlParameter("@OrgID", orgId),
new SqlParameter("@PoolId", poolId));
}

View file

@ -200,6 +200,32 @@ namespace WebsitePanel.EnterpriseServer
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)
{
OrganizationResult res = StartTask<OrganizationResult>("CRM", "CREATE_ORGANIZATION");
@ -239,6 +265,10 @@ namespace WebsitePanel.EnterpriseServer
return res;
}
int serviceid = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.HostedOrganizations);
string rootOU = GetProviderProperty(serviceid, "rootou");
org.CrmAdministratorId = user.AccountId;
org.CrmCurrency =
@ -248,7 +278,10 @@ namespace WebsitePanel.EnterpriseServer
org.CrmOrganizationId = orgId;
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,
collation);

View file

@ -1167,13 +1167,13 @@ namespace WebsitePanel.EnterpriseServer
#endregion
#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)
{
PackageIPAddressesPaged result = new PackageIPAddressesPaged();
// 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
reader.Read();
@ -1196,10 +1196,15 @@ namespace WebsitePanel.EnterpriseServer
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>(
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)
@ -1208,10 +1213,10 @@ namespace WebsitePanel.EnterpriseServer
string xml = PrepareIPsXML(addressId);
// 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
// create result object
@ -1288,7 +1293,7 @@ namespace WebsitePanel.EnterpriseServer
// save to database
try
{
DataProvider.AllocatePackageIPAddresses(packageId, xml);
DataProvider.AllocatePackageIPAddresses(packageId, orgId, xml);
}
catch (Exception ex)
{
@ -1335,7 +1340,7 @@ namespace WebsitePanel.EnterpriseServer
}
// allocate
return AllocatePackageIPAddresses(packageId, groupName, pool,
return AllocatePackageIPAddresses(packageId, 0, groupName, pool,
true, number, new int[0]);
}

View file

@ -386,24 +386,24 @@ namespace WebsitePanel.EnterpriseServer
}
[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)
{
return ServerController.GetPackageIPAddresses(packageId, pool,
return ServerController.GetPackageIPAddresses(packageId, orgId, pool,
filterColumn, filterValue, sortColumn, startRow, maximumRows, recursive);
}
[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]
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)
{
return ServerController.AllocatePackageIPAddresses(packageId, groupName, pool, allocateRandom,
return ServerController.AllocatePackageIPAddresses(packageId, orgId, groupName, pool, allocateRandom,
addressesNumber, addressId);
}

View file

@ -58,6 +58,12 @@ namespace WebsitePanel.Providers.Common
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 EnterpriseServer = "EnterpriseServer";

View file

@ -36,5 +36,14 @@ namespace WebsitePanel.Providers.HostedSolution
public string CRMUserName { get; set; }
public CRMUserAccessMode ClientAccessMode { 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
{
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);
@ -60,5 +61,8 @@ namespace WebsitePanel.Providers.HostedSolution
CrmUserResult GetCrmUserById(Guid crmUserId, string orgName);
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.Threading;
using System.ServiceModel.Description;
using System.Text.RegularExpressions;
using Microsoft.Win32;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.ResultObjects;
@ -58,7 +59,9 @@ namespace WebsitePanel.Providers.HostedSolution
{
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;
}
}
@ -67,7 +70,9 @@ namespace WebsitePanel.Providers.HostedSolution
{
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;
}
}
@ -174,6 +179,75 @@ namespace WebsitePanel.Providers.HostedSolution
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)
{
Log.WriteStart("CheckOrganizationUnique");
@ -319,17 +393,39 @@ namespace WebsitePanel.Providers.HostedSolution
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");
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)
throw new ArgumentException("OrganizationId is Guid.Empty");
@ -362,6 +458,8 @@ namespace WebsitePanel.Providers.HostedSolution
Uri serviceUrl = new Uri(CRMServiceUrl);
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
{
@ -397,9 +495,11 @@ namespace WebsitePanel.Providers.HostedSolution
Microsoft.Xrm.Sdk.Deployment.OrganizationState OperationState = Microsoft.Xrm.Sdk.Deployment.OrganizationState.Pending;
int timeout = 30000;
do
{
Thread.Sleep(30000);
Thread.Sleep(timeout);
try
{
Microsoft.Xrm.Sdk.Deployment.Organization getorg
@ -413,16 +513,50 @@ namespace WebsitePanel.Providers.HostedSolution
if (OperationState == Microsoft.Xrm.Sdk.Deployment.OrganizationState.Failed)
throw new ArgumentException("Create organization failed.");
try
// update UserRootPath setting
Microsoft.Xrm.Sdk.Deployment.ConfigurationEntity orgSettings = new Microsoft.Xrm.Sdk.Deployment.ConfigurationEntity
{
OrganizationServiceProxy _serviceProxy = GetOrganizationProxy(organizationUniqueName);
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);
string ldap = "";
int tryTimeout = 30000;
int tryCount = 10;
Guid SysAdminGuid = RetrieveSystemUser(GetDomainName(initialUserDomainName), initialUserFirstName, initialUserLastName, CRMSysAdminRoleStr, _serviceProxy, ref ldap);
bool success = false;
int tryItem = 0;
while (!success)
{
try
{
Thread.Sleep(tryTimeout);
OrganizationServiceProxy _serviceProxy = GetOrganizationProxy(organizationUniqueName, 0, 0);
string ldap = "";
Guid SysAdminGuid = RetrieveSystemUser(GetDomainName(initialUserDomainName), initialUserFirstName, initialUserLastName, CRMSysAdminRoleStr, _serviceProxy, ref ldap);
success = true;
}
catch (Exception exc)
{
tryItem++;
if (tryItem >= tryCount)
success = true;
}
}
catch { }
}
catch (Exception ex)
@ -944,10 +1078,15 @@ namespace WebsitePanel.Providers.HostedSolution
return false;
}
int GetOrganizationProxyTryCount = 5;
int GetOrganizationProxyTryCount = 10;
int GetOrganizationProxyTryTimeout = 30000;
private OrganizationServiceProxy GetOrganizationProxy(string orgName)
{
return GetOrganizationProxy(orgName, GetOrganizationProxyTryCount, GetOrganizationProxyTryTimeout);
}
private OrganizationServiceProxy GetOrganizationProxy(string orgName, int TryCount, int TryTimeout)
{
Uri OrganizationUri = GetOrganizationAddress(orgName);
@ -977,9 +1116,9 @@ namespace WebsitePanel.Providers.HostedSolution
}
catch (Exception exc)
{
Thread.Sleep(GetOrganizationProxyTryTimeout);
Thread.Sleep(TryTimeout);
tryItem++;
if (tryItem >= GetOrganizationProxyTryCount)
if (tryItem >= TryCount)
{
exception = exc;
success = true;
@ -1013,7 +1152,6 @@ namespace WebsitePanel.Providers.HostedSolution
return credentials;
}
private DiscoveryServiceProxy GetDiscoveryProxy()
{
@ -1041,7 +1179,20 @@ namespace WebsitePanel.Providers.HostedSolution
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
{

View file

@ -328,7 +328,7 @@ namespace WebsitePanel.Providers.HostedSolution
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);
}
@ -1545,6 +1545,11 @@ namespace WebsitePanel.Providers.HostedSolution
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>
// 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
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
//
// This source code was auto-generated by wsdl, Version=2.0.50727.42.
//
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
//
// This source code was auto-generated by wsdl, Version=2.0.50727.42.
//
namespace WebsitePanel.Providers.CRM {
using System.Diagnostics;
using System.Xml.Serialization;
using System.Web.Services;
using System.ComponentModel;
using System.Web.Services.Protocols;
using System;
using System.Xml.Serialization;
using System.Diagnostics;
/// <remarks/>
@ -86,9 +57,11 @@ namespace WebsitePanel.Providers.CRM {
private System.Threading.SendOrPostCallback ChangeUserStateOperationCompleted;
private System.Threading.SendOrPostCallback GetUsedSpaceOperationCompleted;
/// <remarks/>
public CRM() {
this.Url = "http://192.168.0.133:9003/CRM.asmx";
this.Url = "http://localhost:9004/CRM.asmx";
}
/// <remarks/>
@ -127,14 +100,19 @@ namespace WebsitePanel.Providers.CRM {
/// <remarks/>
public event ChangeUserStateCompletedEventHandler ChangeUserStateCompleted;
/// <remarks/>
public event GetUsedSpaceCompletedEventHandler GetUsedSpaceCompleted;
/// <remarks/>
[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)]
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[] {
organizationId,
organizationUniqueName,
organizationFriendlyName,
organizationDomainName,
ou,
baseCurrencyCode,
baseCurrencyName,
baseCurrencySymbol,
@ -147,11 +125,13 @@ namespace WebsitePanel.Providers.CRM {
}
/// <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[] {
organizationId,
organizationUniqueName,
organizationFriendlyName,
organizationDomainName,
ou,
baseCurrencyCode,
baseCurrencyName,
baseCurrencySymbol,
@ -169,12 +149,12 @@ namespace WebsitePanel.Providers.CRM {
}
/// <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) {
this.CreateOrganizationAsync(organizationId, organizationUniqueName, organizationFriendlyName, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation, null);
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, organizationDomainName, ou, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation, null);
}
/// <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)) {
this.CreateOrganizationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateOrganizationOperationCompleted);
}
@ -182,6 +162,8 @@ namespace WebsitePanel.Providers.CRM {
organizationId,
organizationUniqueName,
organizationFriendlyName,
organizationDomainName,
ou,
baseCurrencyCode,
baseCurrencyName,
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/>
public new void CancelAsync(object userState) {
base.CancelAsync(userState);
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
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")]
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")]
@ -126,5 +126,13 @@ namespace WebsitePanel.Server
{
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">
<Controls>
<Control key="" src="WebsitePanel/LyncPhoneNumbers.ascx" title="LyncPhoneNumbers" type="View" />
<Control key="allocate_phonenumbers" src="WebsitePanel/LyncAllocatePhoneNumbers.ascx" title="LyncPhoneNumbers" type="View" />
</Controls>
</ModuleDefinition>
<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="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>
</ModuleDefinition>

View file

@ -108,7 +108,7 @@ namespace WebsitePanel.Portal
public PackageIPAddress[] GetPackageIPAddresses(int packageId, IPAddressPool pool, string filterColumn, string filterValue,
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);
return packageAddresses.Items;
}

View file

@ -130,7 +130,7 @@ namespace WebsitePanel.Portal
public PackageIPAddress[] GetPackageIPAddresses(int packageId, IPAddressPool pool, string filterColumn, string filterValue,
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);
return packageAddresses.Items;
}
@ -139,6 +139,19 @@ namespace WebsitePanel.Portal
{
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
#region Package Private IP Addresses

View file

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

View file

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

View file

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

View file

@ -123,4 +123,7 @@
<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,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.WebControls;
namespace WebsitePanel.Portal
namespace WebsitePanel.Portal.Lync
{
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()
{
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)
{

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 {
@ -42,192 +13,182 @@ namespace WebsitePanel.Portal.Lync {
public partial class CreateLyncUser {
/// <summary>
/// asyncTasks control.
/// asyncTasks элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
/// <summary>
/// breadcrumb control.
/// breadcrumb элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
/// <summary>
/// menu control.
/// menu элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
/// <summary>
/// Image1 control.
/// Image1 элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Image Image1;
/// <summary>
/// locTitle control.
/// locTitle элемент управления.
/// </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 locTitle;
/// <summary>
/// messageBox control.
/// messageBox элемент управления.
/// </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>
/// ExistingUserTable control.
/// ExistingUserTable элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlTable ExistingUserTable;
/// <summary>
/// Localize1 control.
/// Localize1 элемент управления.
/// </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 Localize1;
/// <summary>
/// userSelector control.
/// userSelector элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.UserSelector userSelector;
/// <summary>
/// locPlanName control.
/// locPlanName элемент управления.
/// </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 locPlanName;
/// <summary>
/// planSelector control.
/// planSelector элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.Lync.UserControls.LyncUserPlanSelector planSelector;
/// <summary>
/// pnEnterpriseVoice control.
/// pnEnterpriseVoice элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Panel pnEnterpriseVoice;
/// <summary>
/// locPhoneNumber control.
/// locPhoneNumber элемент управления.
/// </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 locPhoneNumber;
/// <summary>
/// ddlPhoneNumber control.
/// tb_PhoneNumber элемент управления.
/// </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 tb_PhoneNumber;
/// <summary>
/// ddlPhoneNumber элемент управления.
/// </summary>
/// <remarks>
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlPhoneNumber;
/// <summary>
/// PhoneFormatValidator control.
/// PhoneFormatValidator элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.RegularExpressionValidator PhoneFormatValidator;
/// <summary>
/// locLyncPin control.
/// locLyncPin элемент управления.
/// </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 locLyncPin;
/// <summary>
/// tbPin control.
/// tbPin элемент управления.
/// </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 tbPin;
/// <summary>
/// PinRegularExpressionValidator control.
/// PinRegularExpressionValidator элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.RegularExpressionValidator PinRegularExpressionValidator;
/// <summary>
/// btnCreate control.
/// btnCreate элемент управления.
/// </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 btnCreate;
}

View file

@ -52,7 +52,7 @@ namespace WebsitePanel.Portal.Lync
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)
{

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.
//
// 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
// 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>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebsitePanel.Portal {
public partial class LyncAllocatePhoneNumbers {
/// <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;
namespace WebsitePanel.Portal.Lync
{
public partial class LyncPhoneNumbers : WebsitePanelModuleBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
}

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" %>
<%@ Register Src="SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<%@ Register Src="../../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<wsp:SimpleMessageBox id="messageBox" runat="server" />

View file

@ -36,7 +36,7 @@ using WebsitePanel.Providers.Common;
namespace WebsitePanel.Portal.UserControls
{
public partial class AllocatePackagePhoneNumbers : WebsitePanelControlBase
public partial class AllocatePackagePhoneNumbers : WebsitePanelModuleBase
{
private IPAddressPool pool;
public IPAddressPool Pool
@ -129,6 +129,7 @@ namespace WebsitePanel.Portal.UserControls
}
ResultObject res = ES.Services.Servers.AllocatePackageIPAddresses(PanelSecurity.PackageId,
PanelRequest.ItemID,
ResourceGroup, Pool,
radioExternalRandom.Checked,
Utils.ParseInt(txtExternalAddressesNumber.Text),
@ -136,7 +137,8 @@ namespace WebsitePanel.Portal.UserControls
if (res.IsSuccess)
{
// 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
{

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"
EditItemControl=""
SpaceHomeControl=""
AllocateAddressesControl="allocate_phonenumbers"
ManageAllowed="true" />
<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 {
@ -42,52 +13,47 @@ namespace WebsitePanel.Portal {
public partial class LyncPhoneNumbers {
/// <summary>
/// webAddresses control.
/// webAddresses элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.UserControls.PackagePhoneNumbers webAddresses;
/// <summary>
/// secQuotas control.
/// secQuotas элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secQuotas;
/// <summary>
/// QuotasPanel control.
/// QuotasPanel элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.Panel QuotasPanel;
/// <summary>
/// locIPQuota control.
/// locIPQuota элемент управления.
/// </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 locIPQuota;
/// <summary>
/// addressesQuota control.
/// addressesQuota элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.Quota addressesQuota;
}

View file

@ -51,14 +51,47 @@
</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%">
<asp:TextBox runat="server" ID="txtAppRootDomain" Width="200px" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtAppRootDomain" ErrorMessage="*" />
</td>
</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>

View file

@ -47,7 +47,16 @@ namespace WebsitePanel.Portal.ProviderControls
txtSqlServer.Text = settings[Constants.SqlServer];
txtDomainName.Text = settings[Constants.IFDWebApplicationRootDomain];
txtPort.Text = settings[Constants.Port];
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]);
ddlCrmIpAddress.AddressId = (selectedAddressid > 0) ? selectedAddressid : 0;
@ -61,7 +70,15 @@ namespace WebsitePanel.Portal.ProviderControls
settings[Constants.SqlServer] = txtSqlServer.Text;
settings[Constants.IFDWebApplicationRootDomain] = txtDomainName.Text;
settings[Constants.Port] = txtPort.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)
{
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 {
@ -42,93 +13,129 @@ namespace WebsitePanel.Portal.ProviderControls {
public partial class CRM2011_Settings {
/// <summary>
/// txtSqlServer control.
/// txtSqlServer элемент управления.
/// </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 txtSqlServer;
/// <summary>
/// RequiredFieldValidator1 control.
/// RequiredFieldValidator1 элемент управления.
/// </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 RequiredFieldValidator1;
/// <summary>
/// txtReportingService control.
/// txtReportingService элемент управления.
/// </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 txtReportingService;
/// <summary>
/// txtDomainName control.
/// txtDomainName элемент управления.
/// </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 txtDomainName;
/// <summary>
/// RequiredFieldValidator2 control.
/// RequiredFieldValidator2 элемент управления.
/// </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 RequiredFieldValidator2;
/// <summary>
/// ddlSchema control.
/// ddlSchema элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlSchema;
/// <summary>
/// ddlCrmIpAddress control.
/// ddlCrmIpAddress элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.SelectIPAddress ddlCrmIpAddress;
/// <summary>
/// txtPort control.
/// txtPort элемент управления.
/// </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 txtPort;
/// <summary>
/// txtAppRootDomain control.
/// txtAppRootDomain элемент управления.
/// </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 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,
0,
ResourceGroup, Pool,
radioExternalRandom.Checked,
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

@ -73,7 +73,8 @@
OnSelected="odsExternalAddressesPaged_Selected"
onselecting="odsExternalAddressesPaged_Selecting">
<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:ControlParameter Name="filterColumn" ControlID="searchBox" PropertyName="FilterColumn" />
<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)
{
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)

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 {
@ -42,62 +13,56 @@ namespace WebsitePanel.Portal.UserControls {
public partial class PackagePhoneNumbers {
/// <summary>
/// messageBox control.
/// messageBox элемент управления.
/// </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>
/// btnAllocateAddress control.
/// btnAllocateAddress элемент управления.
/// </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 btnAllocateAddress;
/// <summary>
/// searchBox control.
/// searchBox элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::WebsitePanel.Portal.SearchBox searchBox;
/// <summary>
/// gvAddresses control.
/// gvAddresses элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.GridView gvAddresses;
/// <summary>
/// odsExternalAddressesPaged control.
/// odsExternalAddressesPaged элемент управления.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// Автоматически создаваемое поле.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части.
/// </remarks>
protected global::System.Web.UI.WebControls.ObjectDataSource odsExternalAddressesPaged;
/// <summary>
/// btnDeallocateAddresses control.
/// btnDeallocateAddresses элемент управления.
/// </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 btnDeallocateAddresses;
}

View file

@ -117,7 +117,7 @@ namespace WebsitePanel.Portal.VPS
if (PackagesHelper.IsQuotaEnabled(PanelSecurity.PackageId, Quotas.VPS_EXTERNAL_NETWORK_ENABLED))
{
// 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)
{
string txt = ip.ExternalIP;

View file

@ -51,7 +51,7 @@ namespace WebsitePanel.Portal.VPS
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)
{
string txt = ip.ExternalIP;

View file

@ -51,7 +51,7 @@ namespace WebsitePanel.Portal.VPSForPC
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)
{
string txt = ip.ExternalIP;

View file

@ -92,7 +92,7 @@ namespace WebsitePanel.Portal
{
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)
{
string fullIP = ip.ExternalIP;

View file

@ -179,7 +179,7 @@ namespace WebsitePanel.Portal
// bind unassigned IP addresses
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)
{
string fullIP = ip.ExternalIP;

View file

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