merge commit

This commit is contained in:
robvde 2013-08-22 09:01:22 +04:00
commit 754d9127de
73 changed files with 6049 additions and 383 deletions

View file

@ -1638,3 +1638,325 @@ BEGIN
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (422, 12, 26, N'Exchange2007.DisclaimersAllowed', N'Disclaimers Allowed', 1, 0, NULL, NULL) INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota]) VALUES (422, 12, 26, N'Exchange2007.DisclaimersAllowed', N'Disclaimers Allowed', 1, 0, NULL, NULL)
END END
GO GO
-- Lync Enterprise Voice
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='LyncUserPlans' AND COLS.name='TelephonyVoicePolicy')
BEGIN
ALTER TABLE [dbo].[LyncUserPlans] ADD
[RemoteUserAccess] [bit] NOT NULL DEFAULT 0,
[PublicIMConnectivity] [bit] NOT NULL DEFAULT 0,
[AllowOrganizeMeetingsWithExternalAnonymous] [bit] NOT NULL DEFAULT 0,
[Telephony] [int] NULL,
[ServerURI] [nvarchar](300) NULL,
[ArchivePolicy] [nvarchar](300) NULL,
[TelephonyDialPlanPolicy] [nvarchar](300) NULL,
[TelephonyVoicePolicy] [nvarchar](300) NULL
END
Go
--
DROP PROCEDURE GetLyncUserPlan;
DROP PROCEDURE AddLyncUserPlan;
DROP PROCEDURE UpdateLyncUserPlan;
DROP PROCEDURE DeleteLyncUserPlan;
--
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'DeleteLyncUserPlan')
BEGIN
EXEC sp_executesql N'CREATE PROCEDURE [dbo].[DeleteLyncUserPlan]
(
@LyncUserPlanId int
)
AS
-- delete lyncuserplan
DELETE FROM LyncUserPlans
WHERE LyncUserPlanId = @LyncUserPlanId
RETURN'
END
GO
--
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'UpdateLyncUserPlan')
BEGIN
EXEC sp_executesql N' CREATE PROCEDURE [dbo].[UpdateLyncUserPlan]
(
@LyncUserPlanId int,
@LyncUserPlanName nvarchar(300),
@LyncUserPlanType int,
@IM bit,
@Mobility bit,
@MobilityEnableOutsideVoice bit,
@Federation bit,
@Conferencing bit,
@EnterpriseVoice bit,
@VoicePolicy int,
@IsDefault bit,
@RemoteUserAccess bit,
@PublicIMConnectivity bit,
@AllowOrganizeMeetingsWithExternalAnonymous bit,
@Telephony int,
@ServerURI nvarchar(300),
@ArchivePolicy nvarchar(300),
@TelephonyDialPlanPolicy nvarchar(300),
@TelephonyVoicePolicy nvarchar(300)
)
AS
UPDATE LyncUserPlans SET
LyncUserPlanName = @LyncUserPlanName,
LyncUserPlanType = @LyncUserPlanType,
IM = @IM,
Mobility = @Mobility,
MobilityEnableOutsideVoice = @MobilityEnableOutsideVoice,
Federation = @Federation,
Conferencing =@Conferencing,
EnterpriseVoice = @EnterpriseVoice,
VoicePolicy = @VoicePolicy,
IsDefault = @IsDefault,
RemoteUserAccess = @RemoteUserAccess,
PublicIMConnectivity = @PublicIMConnectivity,
AllowOrganizeMeetingsWithExternalAnonymous = @AllowOrganizeMeetingsWithExternalAnonymous,
Telephony = @Telephony,
ServerURI = @ServerURI,
ArchivePolicy = @ArchivePolicy,
TelephonyDialPlanPolicy = @TelephonyDialPlanPolicy,
TelephonyVoicePolicy = @TelephonyVoicePolicy
WHERE LyncUserPlanId = @LyncUserPlanId
RETURN'
END
GO
--
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'AddLyncUserPlan')
BEGIN
EXEC sp_executesql N'CREATE PROCEDURE [dbo].[AddLyncUserPlan]
(
@LyncUserPlanId int OUTPUT,
@ItemID int,
@LyncUserPlanName nvarchar(300),
@LyncUserPlanType int,
@IM bit,
@Mobility bit,
@MobilityEnableOutsideVoice bit,
@Federation bit,
@Conferencing bit,
@EnterpriseVoice bit,
@VoicePolicy int,
@IsDefault bit,
@RemoteUserAccess bit,
@PublicIMConnectivity bit,
@AllowOrganizeMeetingsWithExternalAnonymous bit,
@Telephony int,
@ServerURI nvarchar(300),
@ArchivePolicy nvarchar(300),
@TelephonyDialPlanPolicy nvarchar(300),
@TelephonyVoicePolicy nvarchar(300)
)
AS
IF (((SELECT Count(*) FROM LyncUserPlans WHERE ItemId = @ItemID) = 0) AND (@LyncUserPlanType=0))
BEGIN
SET @IsDefault = 1
END
ELSE
BEGIN
IF ((@IsDefault = 1) AND (@LyncUserPlanType=0))
BEGIN
UPDATE LyncUserPlans SET IsDefault = 0 WHERE ItemID = @ItemID
END
END
INSERT INTO LyncUserPlans
(
ItemID,
LyncUserPlanName,
LyncUserPlanType,
IM,
Mobility,
MobilityEnableOutsideVoice,
Federation,
Conferencing,
EnterpriseVoice,
VoicePolicy,
IsDefault,
RemoteUserAccess,
PublicIMConnectivity,
AllowOrganizeMeetingsWithExternalAnonymous,
Telephony,
ServerURI,
ArchivePolicy,
TelephonyDialPlanPolicy,
TelephonyVoicePolicy
)
VALUES
(
@ItemID,
@LyncUserPlanName,
@LyncUserPlanType,
@IM,
@Mobility,
@MobilityEnableOutsideVoice,
@Federation,
@Conferencing,
@EnterpriseVoice,
@VoicePolicy,
@IsDefault,
@RemoteUserAccess,
@PublicIMConnectivity,
@AllowOrganizeMeetingsWithExternalAnonymous,
@Telephony,
@ServerURI,
@ArchivePolicy,
@TelephonyDialPlanPolicy,
@TelephonyVoicePolicy
)
SET @LyncUserPlanId = SCOPE_IDENTITY()
RETURN'
END
GO
--
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type_desc = N'SQL_STORED_PROCEDURE' AND name = N'GetLyncUserPlan')
BEGIN
EXEC sp_executesql N'CREATE PROCEDURE [dbo].[GetLyncUserPlan]
(
@LyncUserPlanId int
)
AS
SELECT
LyncUserPlanId,
ItemID,
LyncUserPlanName,
LyncUserPlanType,
IM,
Mobility,
MobilityEnableOutsideVoice,
Federation,
Conferencing,
EnterpriseVoice,
VoicePolicy,
IsDefault,
RemoteUserAccess,
PublicIMConnectivity,
AllowOrganizeMeetingsWithExternalAnonymous,
Telephony,
ServerURI,
ArchivePolicy,
TelephonyDialPlanPolicy,
TelephonyVoicePolicy
FROM
LyncUserPlans
WHERE
LyncUserPlanId = @LyncUserPlanId
RETURN'
END
GO
ALTER PROCEDURE [dbo].[GetLyncUserPlan]
(
@LyncUserPlanId int
)
AS
SELECT
LyncUserPlanId,
ItemID,
LyncUserPlanName,
LyncUserPlanType,
IM,
Mobility,
MobilityEnableOutsideVoice,
Federation,
Conferencing,
EnterpriseVoice,
VoicePolicy,
IsDefault,
RemoteUserAccess,
PublicIMConnectivity,
AllowOrganizeMeetingsWithExternalAnonymous,
Telephony,
ServerURI,
ArchivePolicy,
TelephonyDialPlanPolicy,
TelephonyVoicePolicy
FROM
LyncUserPlans
WHERE
LyncUserPlanId = @LyncUserPlanId
RETURN
GO

View file

@ -38,6 +38,7 @@ namespace WebsitePanel.EnterpriseServer
General = 1, General = 1,
WebSites = 2, WebSites = 2,
VpsExternalNetwork = 3, VpsExternalNetwork = 3,
VpsManagementNetwork = 4 VpsManagementNetwork = 4,
PhoneNumbers = 5
} }
} }

View file

@ -913,6 +913,15 @@ namespace WebsitePanel.EnterpriseServer {
} }
} }
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetPolicyList", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public string[] GetPolicyList(int itemId, LyncPolicyType type, string name)
{
object[] results = this.Invoke("GetPolicyList", new object[] {
itemId, type, name});
return ((string[])(results[0]));
}
/// <remarks/> /// <remarks/>
public new void CancelAsync(object userState) { public new void CancelAsync(object userState) {
base.CancelAsync(userState); base.CancelAsync(userState);

View file

@ -3710,7 +3710,20 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@Conferencing", lyncUserPlan.Conferencing), new SqlParameter("@Conferencing", lyncUserPlan.Conferencing),
new SqlParameter("@EnterpriseVoice", lyncUserPlan.EnterpriseVoice), new SqlParameter("@EnterpriseVoice", lyncUserPlan.EnterpriseVoice),
new SqlParameter("@VoicePolicy", lyncUserPlan.VoicePolicy), new SqlParameter("@VoicePolicy", lyncUserPlan.VoicePolicy),
new SqlParameter("@IsDefault", lyncUserPlan.IsDefault) new SqlParameter("@IsDefault", lyncUserPlan.IsDefault),
new SqlParameter("@RemoteUserAccess", lyncUserPlan.RemoteUserAccess),
new SqlParameter("@PublicIMConnectivity", lyncUserPlan.PublicIMConnectivity),
new SqlParameter("@AllowOrganizeMeetingsWithExternalAnonymous", lyncUserPlan.AllowOrganizeMeetingsWithExternalAnonymous),
new SqlParameter("@Telephony", lyncUserPlan.Telephony),
new SqlParameter("@ServerURI", lyncUserPlan.ServerURI),
new SqlParameter("@ArchivePolicy", lyncUserPlan.ArchivePolicy),
new SqlParameter("@TelephonyDialPlanPolicy", lyncUserPlan.TelephonyDialPlanPolicy),
new SqlParameter("@TelephonyVoicePolicy", lyncUserPlan.TelephonyVoicePolicy)
); );
return Convert.ToInt32(outParam.Value); return Convert.ToInt32(outParam.Value);
@ -3733,7 +3746,20 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@Conferencing", lyncUserPlan.Conferencing), new SqlParameter("@Conferencing", lyncUserPlan.Conferencing),
new SqlParameter("@EnterpriseVoice", lyncUserPlan.EnterpriseVoice), new SqlParameter("@EnterpriseVoice", lyncUserPlan.EnterpriseVoice),
new SqlParameter("@VoicePolicy", lyncUserPlan.VoicePolicy), new SqlParameter("@VoicePolicy", lyncUserPlan.VoicePolicy),
new SqlParameter("@IsDefault", lyncUserPlan.IsDefault) new SqlParameter("@IsDefault", lyncUserPlan.IsDefault),
new SqlParameter("@RemoteUserAccess", lyncUserPlan.RemoteUserAccess),
new SqlParameter("@PublicIMConnectivity", lyncUserPlan.PublicIMConnectivity),
new SqlParameter("@AllowOrganizeMeetingsWithExternalAnonymous", lyncUserPlan.AllowOrganizeMeetingsWithExternalAnonymous),
new SqlParameter("@Telephony", lyncUserPlan.Telephony),
new SqlParameter("@ServerURI", lyncUserPlan.ServerURI),
new SqlParameter("@ArchivePolicy", lyncUserPlan.ArchivePolicy),
new SqlParameter("@TelephonyDialPlanPolicy", lyncUserPlan.TelephonyDialPlanPolicy),
new SqlParameter("@TelephonyVoicePolicy", lyncUserPlan.TelephonyVoicePolicy)
); );
} }

View file

@ -53,8 +53,11 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
List<string> resSettings = new List<string>(lyncSettings); List<string> resSettings = new List<string>(lyncSettings);
if (organizationServiceId != -1)
{
ExtendLyncSettings(resSettings, "primarydomaincontroller", GetProviderProperty(organizationServiceId, "primarydomaincontroller")); ExtendLyncSettings(resSettings, "primarydomaincontroller", GetProviderProperty(organizationServiceId, "primarydomaincontroller"));
ExtendLyncSettings(resSettings, "rootou", GetProviderProperty(organizationServiceId, "rootou")); ExtendLyncSettings(resSettings, "rootou", GetProviderProperty(organizationServiceId, "rootou"));
}
ws.ServiceProviderSettingsSoapHeaderValue.Settings = resSettings.ToArray(); ws.ServiceProviderSettingsSoapHeaderValue.Settings = resSettings.ToArray();
return ws; return ws;
} }
@ -345,6 +348,13 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
{ {
LyncUserResult res = TaskManager.StartResultTask<LyncUserResult>("LYNC", "SET_LYNC_USER_GENERAL_SETTINGS"); LyncUserResult res = TaskManager.StartResultTask<LyncUserResult>("LYNC", "SET_LYNC_USER_GENERAL_SETTINGS");
string PIN = "";
string[] uriAndPin = ("" + lineUri).Split(':');
if (uriAndPin.Length > 0) lineUri = uriAndPin[0];
if (uriAndPin.Length > 1) PIN = uriAndPin[1];
LyncUser user = null; LyncUser user = null;
try try
@ -377,6 +387,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
if (!string.IsNullOrEmpty(sipAddress)) if (!string.IsNullOrEmpty(sipAddress))
{
if (user.SipAddress != sipAddress)
{ {
if (sipAddress != usr.UserPrincipalName) if (sipAddress != usr.UserPrincipalName)
{ {
@ -386,12 +398,12 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
return res; return res;
} }
} }
user.SipAddress = sipAddress; user.SipAddress = sipAddress;
}
} }
if (!string.IsNullOrEmpty(lineUri)) user.LineUri = lineUri; user.LineUri = lineUri;
user.PIN = PIN;
lync.SetLyncUserGeneralSettings(org.OrganizationId, usr.UserPrincipalName, user); lync.SetLyncUserGeneralSettings(org.OrganizationId, usr.UserPrincipalName, user);
@ -1002,6 +1014,51 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
#endregion #endregion
public static string[] GetPolicyList(int itemId, LyncPolicyType type, string name)
{
string[] ret = null;
try
{
if (itemId == -1)
{
// policy list in all lync servers
List<string> allpolicylist = new List<string>();
List<ServerInfo> servers = ServerController.GetAllServers();
foreach (ServerInfo server in servers)
{
List<ServiceInfo> services = ServerController.GetServicesByServerIdGroupName(server.ServerId, ResourceGroups.Lync);
foreach (ServiceInfo service in services)
{
LyncServer lync = GetLyncServer(service.ServiceId, -1);
string[] values = lync.GetPolicyList(type, name);
foreach (string val in values)
if (allpolicylist.IndexOf(val) == -1)
allpolicylist.Add(val);
}
}
ret = allpolicylist.ToArray();
}
else
{
Organization org = (Organization)PackageController.GetPackageItem(itemId);
int lyncServiceId = GetLyncServiceID(org.PackageId);
LyncServer lync = GetLyncServer(lyncServiceId, org.ServiceId);
ret = lync.GetPolicyList(type, name);
}
}
catch (Exception ex)
{
}
finally
{
}
return ret;
}
#region Private methods #region Private methods
public static UInt64 ConvertPhoneNumberToLong(string ip) public static UInt64 ConvertPhoneNumberToLong(string ip)

View file

@ -965,12 +965,32 @@ namespace WebsitePanel.EnterpriseServer
return res; return res;
} }
if (pool == IPAddressPool.PhoneNumbers)
{
string phoneFormat = "D" + Math.Max(externalIP.Length, endIP.Length);
UInt64 start = UInt64.Parse(externalIP);
UInt64 end = UInt64.Parse(endIP);
if (end < start) { UInt64 temp = start; start = end; end = temp; }
const UInt64 maxPhones = 1000; // TODO max?
end = Math.Min(end, start + maxPhones);
for (UInt64 number = start; number <= end; number++)
DataProvider.AddIPAddress((int)pool, serverId, number.ToString(phoneFormat), "", subnetMask, defaultGateway, comments);
}
else
{
var startExternalIP = IPAddress.Parse(externalIP); var startExternalIP = IPAddress.Parse(externalIP);
var startInternalIP = IPAddress.Parse(internalIP); var startInternalIP = IPAddress.Parse(internalIP);
var endExternalIP = IPAddress.Parse(endIP); var endExternalIP = IPAddress.Parse(endIP);
// handle CIDR notation IP/Subnet addresses // handle CIDR notation IP/Subnet addresses
if (startExternalIP.IsSubnet && endExternalIP == null) { if (startExternalIP.IsSubnet && endExternalIP == null)
{
endExternalIP = startExternalIP.LastSubnetIP; endExternalIP = startExternalIP.LastSubnetIP;
startExternalIP = startExternalIP.FirstSubnetIP; startExternalIP = startExternalIP.FirstSubnetIP;
} }
@ -999,6 +1019,7 @@ namespace WebsitePanel.EnterpriseServer
startInternalIP += step; startInternalIP += step;
} }
} }
}
catch (Exception ex) catch (Exception ex)
{ {
TaskManager.CompleteResultTask(res, "IP_ADDRESS_ADD_RANGE_ERROR", ex); TaskManager.CompleteResultTask(res, "IP_ADDRESS_ADD_RANGE_ERROR", ex);

View file

@ -1,58 +1,58 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0"?>
<configuration> <configuration>
<configSections> <configSections>
<section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3" /> <section name="microsoft.web.services3" type="Microsoft.Web.Services3.Configuration.WebServicesConfiguration, Microsoft.Web.Services3"/>
</configSections> </configSections>
<!-- Connection strings --> <!-- Connection strings -->
<connectionStrings> <connectionStrings>
<add name="EnterpriseServer" connectionString="Server=(local)\SQLExpress;Database=WebsitePanel;uid=sa;pwd=Password12" providerName="System.Data.SqlClient" /> <add name="EnterpriseServer" connectionString="Server=(local)\SQLExpress;Database=WebsitePanel;uid=sa;pwd=Password12" providerName="System.Data.SqlClient"/>
</connectionStrings> </connectionStrings>
<appSettings> <appSettings>
<!-- Encryption util settings --> <!-- Encryption util settings -->
<add key="WebsitePanel.CryptoKey" value="1234567890" /> <add key="WebsitePanel.CryptoKey" value="1234567890"/>
<!-- A1D4KDHUE83NKHddF --> <!-- A1D4KDHUE83NKHddF -->
<add key="WebsitePanel.EncryptionEnabled" value="true" /> <add key="WebsitePanel.EncryptionEnabled" value="true"/>
<!-- Web Applications --> <!-- Web Applications -->
<add key="WebsitePanel.EnterpriseServer.WebApplicationsPath" value="~/WebApplications" /> <add key="WebsitePanel.EnterpriseServer.WebApplicationsPath" value="~/WebApplications"/>
<!-- Communication settings --> <!-- Communication settings -->
<!-- Maximum waiting time when sending request to the remote server <!-- Maximum waiting time when sending request to the remote server
The value is in seconds. "-1" - infinite. --> The value is in seconds. "-1" - infinite. -->
<add key="WebsitePanel.EnterpriseServer.ServerRequestTimeout" value="3600" /> <add key="WebsitePanel.EnterpriseServer.ServerRequestTimeout" value="3600"/>
<add key="WebsitePanel.AltConnectionString" value="ConnectionString" /> <add key="WebsitePanel.AltConnectionString" value="ConnectionString"/>
<add key="WebsitePanel.AltCryptoKey" value="CryptoKey" /> <add key="WebsitePanel.AltCryptoKey" value="CryptoKey"/>
</appSettings> </appSettings>
<system.web> <system.web>
<!-- Disable any authentication --> <!-- Disable any authentication -->
<authentication mode="None" /> <authentication mode="None"/>
<!-- Correct HTTP runtime settings --> <!-- Correct HTTP runtime settings -->
<httpRuntime executionTimeout="3600" maxRequestLength="16384" /> <httpRuntime executionTimeout="3600" maxRequestLength="16384"/>
<!-- Set globalization settings --> <!-- Set globalization settings -->
<globalization culture="en-US" uiCulture="en" requestEncoding="UTF-8" responseEncoding="UTF-8" fileEncoding="UTF-8" /> <globalization culture="en-US" uiCulture="en" requestEncoding="UTF-8" responseEncoding="UTF-8" fileEncoding="UTF-8"/>
<!-- Web Services settings --> <!-- Web Services settings -->
<webServices> <webServices>
<protocols> <protocols>
<remove name="HttpPost" /> <remove name="HttpPost"/>
<remove name="HttpPostLocalhost" /> <remove name="HttpPostLocalhost"/>
<remove name="HttpGet" /> <remove name="HttpGet"/>
</protocols> </protocols>
<soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3" /> <soapServerProtocolFactory type="Microsoft.Web.Services3.WseProtocolFactory, Microsoft.Web.Services3"/>
</webServices> </webServices>
<compilation targetFramework="4.0" /> <compilation targetFramework="4.0" debug="true"/>
</system.web> </system.web>
<!-- WSE 3.0 settings --> <!-- WSE 3.0 settings -->
<microsoft.web.services3> <microsoft.web.services3>
<diagnostics> <diagnostics>
<trace enabled="false" input="InputTrace.webinfo" output="OutputTrace.webinfo" /> <trace enabled="false" input="InputTrace.webinfo" output="OutputTrace.webinfo"/>
</diagnostics> </diagnostics>
<messaging> <messaging>
<maxMessageLength value="-1" /> <maxMessageLength value="-1"/>
<mtom clientMode="On" /> <mtom clientMode="On"/>
</messaging> </messaging>
<security> <security>
<securityTokenManager> <securityTokenManager>
<add type="WebsitePanel.EnterpriseServer.ServiceUsernameTokenManager, WebsitePanel.EnterpriseServer.Code" namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" localName="UsernameToken" /> <add type="WebsitePanel.EnterpriseServer.ServiceUsernameTokenManager, WebsitePanel.EnterpriseServer.Code" namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" localName="UsernameToken"/>
</securityTokenManager> </securityTokenManager>
</security> </security>
<policy fileName="WsePolicyCache.Config" /> <policy fileName="WsePolicyCache.Config"/>
</microsoft.web.services3> </microsoft.web.services3>
</configuration> </configuration>

View file

@ -151,5 +151,12 @@ namespace WebsitePanel.EnterpriseServer
} }
#endregion #endregion
[WebMethod]
public string[] GetPolicyList(int itemId, LyncPolicyType type, string name)
{
return LyncController.GetPolicyList(itemId, type, name);
}
} }
} }

View file

@ -48,5 +48,7 @@ namespace WebsitePanel.Providers.HostedSolution
bool RemoveFederationDomain(string organizationId, string domainName); bool RemoveFederationDomain(string organizationId, string domainName);
void ReloadConfiguration(); void ReloadConfiguration();
string[] GetPolicyList(LyncPolicyType type, string name);
} }
} }

View file

@ -0,0 +1,44 @@
// 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.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WebsitePanel.Providers.HostedSolution
{
public enum LyncPolicyType
{
Archiving = 0,
DialPlan = 1,
Voice = 2,
Pin = 3
}
}

View file

@ -41,5 +41,7 @@ namespace WebsitePanel.Providers.HostedSolution
public int AccountID { get; set; } public int AccountID { get; set; }
public int LyncUserPlanId { get; set; } public int LyncUserPlanId { get; set; }
public string LyncUserPlanName { get; set; } public string LyncUserPlanName { get; set; }
public string PIN { get; set; }
} }
} }

View file

@ -122,6 +122,63 @@ namespace WebsitePanel.Providers.HostedSolution
set { this.voicePolicy = value; } set { this.voicePolicy = value; }
} }
bool remoteUserAccess;
bool publicIMConnectivity;
bool allowOrganizeMeetingsWithExternalAnonymous;
int telephony;
string serverURI;
string archivePolicy;
string telephonyDialPlanPolicy;
string telephonyVoicePolicy;
public bool RemoteUserAccess
{
get { return this.remoteUserAccess; }
set { this.remoteUserAccess = value; }
}
public bool PublicIMConnectivity
{
get { return this.publicIMConnectivity; }
set { this.publicIMConnectivity = value; }
}
public bool AllowOrganizeMeetingsWithExternalAnonymous
{
get { return this.allowOrganizeMeetingsWithExternalAnonymous; }
set { this.allowOrganizeMeetingsWithExternalAnonymous = value; }
}
public int Telephony
{
get { return this.telephony; }
set { this.telephony = value; }
}
public string ServerURI
{
get { return this.serverURI; }
set { this.serverURI = value; }
}
public string ArchivePolicy
{
get { return this.archivePolicy; }
set { this.archivePolicy = value; }
}
public string TelephonyDialPlanPolicy
{
get { return this.telephonyDialPlanPolicy; }
set { this.telephonyDialPlanPolicy = value; }
}
public string TelephonyVoicePolicy
{
get { return this.telephonyVoicePolicy; }
set { this.telephonyVoicePolicy = value; }
}
} }
} }

View file

@ -94,6 +94,7 @@
<Compile Include="HostedSolution\LyncErrorCodes.cs" /> <Compile Include="HostedSolution\LyncErrorCodes.cs" />
<Compile Include="HostedSolution\LyncFederationDomain.cs" /> <Compile Include="HostedSolution\LyncFederationDomain.cs" />
<Compile Include="HostedSolution\LyncOrganizationStatistics.cs" /> <Compile Include="HostedSolution\LyncOrganizationStatistics.cs" />
<Compile Include="HostedSolution\LyncPolicyType.cs" />
<Compile Include="HostedSolution\LyncTransaction.cs" /> <Compile Include="HostedSolution\LyncTransaction.cs" />
<Compile Include="HostedSolution\LyncUserStatistics.cs" /> <Compile Include="HostedSolution\LyncUserStatistics.cs" />
<Compile Include="HostedSolution\LyncStatisticsReport.cs" /> <Compile Include="HostedSolution\LyncStatisticsReport.cs" />

View file

@ -269,7 +269,22 @@ namespace WebsitePanel.Providers.HostedSolution
command.Parameters.Add("Identity", userUpn); command.Parameters.Add("Identity", userUpn);
ExecuteShellCommand(runspace, command, false); ExecuteShellCommand(runspace, command, false);
SetLyncUserPlanInternal(organizationId, userUpn, plan, runspace); command = new Command("Update-CsAddressBook");
ExecuteShellCommand(runspace, command, false);
command = new Command("Update-CsUserDatabase");
ExecuteShellCommand(runspace, command, false);
int trySleep = 5000; int tryMaxCount = 10; bool PlanSet = false;
for (int tryCount = 0; (tryCount < tryMaxCount) && (!PlanSet); tryCount++ )
{
try
{
PlanSet = SetLyncUserPlanInternal(organizationId, userUpn, plan, runspace);
}
catch { }
if (!PlanSet) System.Threading.Thread.Sleep(trySleep);
}
command = new Command("Update-CsAddressBook"); command = new Command("Update-CsAddressBook");
ExecuteShellCommand(runspace, command, false); ExecuteShellCommand(runspace, command, false);
command = new Command("Update-CsUserDatabase"); command = new Command("Update-CsUserDatabase");
@ -317,6 +332,8 @@ namespace WebsitePanel.Providers.HostedSolution
lyncUser.LineUri = (string) GetPSObjectProperty(user, "LineURI"); lyncUser.LineUri = (string) GetPSObjectProperty(user, "LineURI");
lyncUser.SipAddress = lyncUser.SipAddress.ToLower().Replace("sip:", ""); lyncUser.SipAddress = lyncUser.SipAddress.ToLower().Replace("sip:", "");
lyncUser.LineUri = lyncUser.LineUri.ToLower().Replace("tel:+", "");
lyncUser.LineUri = lyncUser.LineUri.ToLower().Replace("tel:", "");
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -404,13 +421,25 @@ namespace WebsitePanel.Providers.HostedSolution
command.Parameters.Add("SipAddress", "SIP:" + lyncUser.SipAddress); command.Parameters.Add("SipAddress", "SIP:" + lyncUser.SipAddress);
} }
if (!string.IsNullOrEmpty(lyncUser.SipAddress)) if (!string.IsNullOrEmpty(lyncUser.LineUri))
{ {
command.Parameters.Add("LineUri", lyncUser.LineUri); command.Parameters.Add("LineUri", "TEL:+" + lyncUser.LineUri);
}
else
{
command.Parameters.Add("LineUri", null);
} }
ExecuteShellCommand(runspace, command, false); ExecuteShellCommand(runspace, command, false);
if (!String.IsNullOrEmpty(lyncUser.PIN))
{
command = new Command("Set-CsClientPin");
command.Parameters.Add("Identity", userUpn);
command.Parameters.Add("Pin", lyncUser.PIN);
ExecuteShellCommand(runspace, command, false);
}
command = new Command("Update-CsAddressBook"); command = new Command("Update-CsAddressBook");
ExecuteShellCommand(runspace, command, false); ExecuteShellCommand(runspace, command, false);
@ -454,7 +483,13 @@ namespace WebsitePanel.Providers.HostedSolution
bCloseRunSpace = true; bCloseRunSpace = true;
} }
var command = new Command("Grant-CsExternalAccessPolicy"); // EnterpriseVoice
var command = new Command("Set-CsUser");
command.Parameters.Add("Identity", userUpn);
command.Parameters.Add("EnterpriseVoiceEnabled", plan.EnterpriseVoice);
ExecuteShellCommand(runspace, command, false);
command = new Command("Grant-CsExternalAccessPolicy");
command.Parameters.Add("Identity", userUpn); command.Parameters.Add("Identity", userUpn);
command.Parameters.Add("PolicyName", plan.Federation ? organizationId : null); command.Parameters.Add("PolicyName", plan.Federation ? organizationId : null);
ExecuteShellCommand(runspace, command, false); ExecuteShellCommand(runspace, command, false);
@ -466,7 +501,6 @@ namespace WebsitePanel.Providers.HostedSolution
command = new Command("Grant-CsMobilityPolicy"); command = new Command("Grant-CsMobilityPolicy");
command.Parameters.Add("Identity", userUpn); command.Parameters.Add("Identity", userUpn);
if (plan.Mobility) if (plan.Mobility)
{ {
command.Parameters.Add("PolicyName", plan.MobilityEnableOutsideVoice ? organizationId + " EnableOutSideVoice" : organizationId + " DisableOutSideVoice"); command.Parameters.Add("PolicyName", plan.MobilityEnableOutsideVoice ? organizationId + " EnableOutSideVoice" : organizationId + " DisableOutSideVoice");
@ -475,8 +509,26 @@ namespace WebsitePanel.Providers.HostedSolution
{ {
command.Parameters.Add("PolicyName", null); command.Parameters.Add("PolicyName", null);
} }
ExecuteShellCommand(runspace, command, false); ExecuteShellCommand(runspace, command, false);
// ArchivePolicy
command = new Command("Grant-CsArchivingPolicy");
command.Parameters.Add("Identity", userUpn);
command.Parameters.Add("PolicyName", string.IsNullOrEmpty(plan.ArchivePolicy) ? null : plan.ArchivePolicy);
ExecuteShellCommand(runspace, command, false);
// DialPlan
command = new Command("Grant-CsDialPlan");
command.Parameters.Add("Identity", userUpn);
command.Parameters.Add("PolicyName", string.IsNullOrEmpty(plan.TelephonyDialPlanPolicy) ? null : plan.TelephonyDialPlanPolicy);
ExecuteShellCommand(runspace, command, false);
// VoicePolicy
command = new Command("Grant-CsVoicePolicy");
command.Parameters.Add("Identity", userUpn);
command.Parameters.Add("PolicyName", string.IsNullOrEmpty(plan.TelephonyVoicePolicy) ? null : plan.TelephonyVoicePolicy);
ExecuteShellCommand(runspace, command, false);
command = new Command("Update-CsUserDatabase"); command = new Command("Update-CsUserDatabase");
ExecuteShellCommand(runspace, command, false); ExecuteShellCommand(runspace, command, false);
} }
@ -744,6 +796,92 @@ namespace WebsitePanel.Providers.HostedSolution
#endregion #endregion
#region Policy
internal override string[] GetPolicyListInternal(LyncPolicyType type, string name)
{
List<string> ret = new List<string>();
switch (type)
{
case LyncPolicyType.Archiving:
{
Runspace runSpace = OpenRunspace();
Command cmd = new Command("Get-CsArchivingPolicy");
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd, false);
if ((result != null) && (result.Count > 0))
{
foreach (PSObject res in result)
{
string Identity = GetPSObjectProperty(res, "Identity").ToString();
ret.Add(Identity);
}
}
}
break;
case LyncPolicyType.DialPlan:
{
Runspace runSpace = OpenRunspace();
Command cmd = new Command("Get-CsDialPlan");
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd, false);
if ((result != null) && (result.Count > 0))
{
foreach (PSObject res in result)
{
string Identity = GetPSObjectProperty(res, "Identity").ToString();
string Description = "" + (string)GetPSObjectProperty(res, "Description");
if (Description.ToLower().IndexOf(name.ToLower()) == -1) continue;
ret.Add(Identity);
}
}
}
break;
case LyncPolicyType.Voice:
{
Runspace runSpace = OpenRunspace();
Command cmd = new Command("Get-CsVoicePolicy");
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd, false);
if ((result != null) && (result.Count > 0))
{
foreach (PSObject res in result)
{
string Identity = GetPSObjectProperty(res, "Identity").ToString();
string Description = "" + (string)GetPSObjectProperty(res, "Description");
if (Description.ToLower().IndexOf(name.ToLower()) == -1) continue;
ret.Add(Identity);
}
}
}
break;
case LyncPolicyType.Pin:
{
Runspace runSpace = OpenRunspace();
Command cmd = new Command("Get-CsPinPolicy");
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd, false);
if ((result != null) && (result.Count > 0))
{
foreach (PSObject res in result)
{
string Identity = GetPSObjectProperty(res, "Identity").ToString();
string str = "" + GetPSObjectProperty(res, name);
ret.Add(str);
}
}
}
break;
}
return ret.ToArray();
}
#endregion
#endregion #endregion
} }
} }

View file

@ -134,6 +134,11 @@ namespace WebsitePanel.Providers.HostedSolution
ReloadConfigurationInternal(); ReloadConfigurationInternal();
} }
public virtual string[] GetPolicyList(LyncPolicyType type, string name)
{
return GetPolicyListInternal(type, name);
}
public override bool IsInstalled() public override bool IsInstalled()
{ {
bool bResult = false; bool bResult = false;
@ -209,6 +214,11 @@ namespace WebsitePanel.Providers.HostedSolution
throw new NotImplementedException(); throw new NotImplementedException();
} }
internal virtual string[] GetPolicyListInternal(LyncPolicyType type, string name)
{
throw new NotImplementedException();
}
#region PowerShell integration #region PowerShell integration
/// <summary> Opens runspace.</summary> /// <summary> Opens runspace.</summary>

View file

@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>WebsitePanel.Providers.HostedSolution.Lync2013</RootNamespace> <RootNamespace>WebsitePanel.Providers.HostedSolution.Lync2013</RootNamespace>
<AssemblyName>WebsitePanel.Providers.HostedSolution.Lync2013</AssemblyName> <AssemblyName>WebsitePanel.Providers.HostedSolution.Lync2013</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

View file

@ -50,12 +50,22 @@ namespace WebsitePanel.Providers.HostedSolution
Log.WriteEnd("{0} {1}", LogPrefix, text); Log.WriteEnd("{0} {1}", LogPrefix, text);
} }
public static void LogInfo(string message)
{
Log.WriteInfo("{0} {1}", LogPrefix, message);
}
public static void LogInfo(string message, params object[] args) public static void LogInfo(string message, params object[] args)
{ {
string text = String.Format(message, args); string text = String.Format(message, args);
Log.WriteInfo("{0} {1}", LogPrefix, text); Log.WriteInfo("{0} {1}", LogPrefix, text);
} }
public static void LogWarning(string message)
{
Log.WriteWarning("{0} {1}", LogPrefix, message);
}
public static void LogWarning(string message, params object[] args) public static void LogWarning(string message, params object[] args)
{ {
string text = String.Format(message, args); string text = String.Format(message, args);

View file

@ -163,6 +163,11 @@ namespace WebsitePanel.Providers.HostedSolution
ReloadConfigurationInternal(); ReloadConfigurationInternal();
} }
public string[] GetPolicyList(LyncPolicyType type, string name)
{
return GetPolicyListInternal(type, name);
}
#endregion #endregion
#region organization #region organization
@ -518,6 +523,8 @@ namespace WebsitePanel.Providers.HostedSolution
lyncUser.LineUri = (string)GetPSObjectProperty(user, "LineURI"); lyncUser.LineUri = (string)GetPSObjectProperty(user, "LineURI");
lyncUser.SipAddress = lyncUser.SipAddress.ToLower().Replace("sip:", ""); lyncUser.SipAddress = lyncUser.SipAddress.ToLower().Replace("sip:", "");
lyncUser.LineUri = lyncUser.LineUri.ToLower().Replace("tel:+", "");
lyncUser.LineUri = lyncUser.LineUri.ToLower().Replace("tel:", "");
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -611,11 +618,20 @@ namespace WebsitePanel.Providers.HostedSolution
cmd = new Command("Set-CsUser"); cmd = new Command("Set-CsUser");
cmd.Parameters.Add("Identity", userUpn); cmd.Parameters.Add("Identity", userUpn);
if (!string.IsNullOrEmpty(lyncUser.SipAddress)) cmd.Parameters.Add("SipAddress", "SIP:"+lyncUser.SipAddress); if (!string.IsNullOrEmpty(lyncUser.SipAddress)) cmd.Parameters.Add("SipAddress", "SIP:" + lyncUser.SipAddress);
if (!string.IsNullOrEmpty(lyncUser.SipAddress)) cmd.Parameters.Add("LineUri", lyncUser.LineUri); if (!string.IsNullOrEmpty(lyncUser.LineUri)) cmd.Parameters.Add("LineUri", "TEL:+" + lyncUser.LineUri);
else cmd.Parameters.Add("LineUri", null);
ExecuteShellCommand(runSpace, cmd, false); ExecuteShellCommand(runSpace, cmd, false);
if (!String.IsNullOrEmpty(lyncUser.PIN))
{
cmd = new Command("Set-CsClientPin");
cmd.Parameters.Add("Identity", userUpn);
cmd.Parameters.Add("Pin", lyncUser.PIN);
ExecuteShellCommand(runSpace, cmd, false);
}
//initiate addressbook generation //initiate addressbook generation
cmd = new Command("Update-CsAddressBook"); cmd = new Command("Update-CsAddressBook");
ExecuteShellCommand(runSpace, cmd, false); ExecuteShellCommand(runSpace, cmd, false);
@ -657,8 +673,14 @@ namespace WebsitePanel.Providers.HostedSolution
bCloseRunSpace = true; bCloseRunSpace = true;
} }
// EnterpriseVoice
Command cmd = new Command("Set-CsUser");
cmd.Parameters.Add("Identity", userUpn);
cmd.Parameters.Add("EnterpriseVoiceEnabled", plan.EnterpriseVoice);
ExecuteShellCommand(runSpace, cmd, false);
//CsExternalAccessPolicy //CsExternalAccessPolicy
Command cmd = new Command("Grant-CsExternalAccessPolicy"); cmd = new Command("Grant-CsExternalAccessPolicy");
cmd.Parameters.Add("Identity", userUpn); cmd.Parameters.Add("Identity", userUpn);
cmd.Parameters.Add("PolicyName", plan.Federation ? organizationId : null); cmd.Parameters.Add("PolicyName", plan.Federation ? organizationId : null);
ExecuteShellCommand(runSpace, cmd); ExecuteShellCommand(runSpace, cmd);
@ -678,6 +700,24 @@ namespace WebsitePanel.Providers.HostedSolution
cmd.Parameters.Add("PolicyName", null); cmd.Parameters.Add("PolicyName", null);
ExecuteShellCommand(runSpace, cmd); ExecuteShellCommand(runSpace, cmd);
// ArchivePolicy
cmd = new Command("Grant-CsArchivingPolicy");
cmd.Parameters.Add("Identity", userUpn);
cmd.Parameters.Add("PolicyName", string.IsNullOrEmpty(plan.ArchivePolicy) ? null : plan.ArchivePolicy);
ExecuteShellCommand(runSpace, cmd);
// DialPlan
cmd = new Command("Grant-CsDialPlan");
cmd.Parameters.Add("Identity", userUpn);
cmd.Parameters.Add("PolicyName", string.IsNullOrEmpty(plan.TelephonyDialPlanPolicy) ? null : plan.TelephonyDialPlanPolicy);
ExecuteShellCommand(runSpace, cmd);
// VoicePolicy
cmd = new Command("Grant-CsVoicePolicy");
cmd.Parameters.Add("Identity", userUpn);
cmd.Parameters.Add("PolicyName", string.IsNullOrEmpty(plan.TelephonyVoicePolicy) ? null : plan.TelephonyVoicePolicy);
ExecuteShellCommand(runSpace, cmd);
//initiate user database replication //initiate user database replication
cmd = new Command("Update-CsUserDatabase"); cmd = new Command("Update-CsUserDatabase");
ExecuteShellCommand(runSpace, cmd, false); ExecuteShellCommand(runSpace, cmd, false);
@ -887,6 +927,90 @@ namespace WebsitePanel.Providers.HostedSolution
HostedSolutionLog.LogEnd("DeleteMobilityPolicy"); HostedSolutionLog.LogEnd("DeleteMobilityPolicy");
} }
internal string[] GetPolicyListInternal(LyncPolicyType type, string name)
{
List<string> ret = new List<string>();
switch (type)
{
case LyncPolicyType.Archiving:
{
Runspace runSpace = OpenRunspace();
Command cmd = new Command("Get-CsArchivingPolicy");
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd, false);
if ((result != null) && (result.Count > 0))
{
foreach (PSObject res in result)
{
string Identity = GetPSObjectProperty(res, "Identity").ToString();
ret.Add(Identity);
}
}
}
break;
case LyncPolicyType.DialPlan:
{
Runspace runSpace = OpenRunspace();
Command cmd = new Command("Get-CsDialPlan");
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd, false);
if ((result != null) && (result.Count > 0))
{
foreach (PSObject res in result)
{
string Identity = GetPSObjectProperty(res, "Identity").ToString();
string Description = "" + (string)GetPSObjectProperty(res, "Description");
if (Description.ToLower().IndexOf(name.ToLower()) == -1) continue;
ret.Add(Identity);
}
}
}
break;
case LyncPolicyType.Voice:
{
Runspace runSpace = OpenRunspace();
Command cmd = new Command("Get-CsVoicePolicy");
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd, false);
if ((result != null) && (result.Count > 0))
{
foreach (PSObject res in result)
{
string Identity = GetPSObjectProperty(res, "Identity").ToString();
string Description = "" + (string)GetPSObjectProperty(res, "Description");
if (Description.ToLower().IndexOf(name.ToLower()) == -1) continue;
ret.Add(Identity);
}
}
}
break;
case LyncPolicyType.Pin:
{
Runspace runSpace = OpenRunspace();
Command cmd = new Command("Get-CsPinPolicy");
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd, false);
if ((result != null) && (result.Count > 0))
{
foreach (PSObject res in result)
{
string Identity = GetPSObjectProperty(res, "Identity").ToString();
string str = "" + GetPSObjectProperty(res, name);
ret.Add(str);
}
}
}
break;
}
return ret.ToArray();
}
#endregion #endregion
#region Sytsem Related Methods #region Sytsem Related Methods

View file

@ -628,6 +628,16 @@ namespace WebsitePanel.Providers.Lync {
} }
} }
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetPolicyList", 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 string[] GetPolicyList(LyncPolicyType type, string name)
{
object[] results = this.Invoke("GetPolicyList", new object[] {
type, name});
return ((string[])(results[0]));
}
/// <remarks/> /// <remarks/>
public new void CancelAsync(object userState) { public new void CancelAsync(object userState) {
base.CancelAsync(userState); base.CancelAsync(userState);

View file

@ -247,7 +247,25 @@ namespace WebsitePanel.Server
} }
} }
[WebMethod, SoapHeader("settings")]
public string[] GetPolicyList(LyncPolicyType type, string name)
{
string[] ret = null;
try
{
Log.WriteStart("{0}.GetPolicyList", ProviderSettings.ProviderName);
ret = Lync.GetPolicyList(type, name);
Log.WriteEnd("{0}.GetPolicyList", ProviderSettings.ProviderName);
}
catch (Exception ex)
{
Log.WriteError(String.Format("Error: {0}.GetPolicyList", ProviderSettings.ProviderName), ex);
throw;
}
return ret;
}
} }

View file

@ -81,6 +81,9 @@
<!--END--> <!--END-->
<!--MenuItem url="http://phpmysqladmin.com" title="phpMyAdmin" target="_blank" <!--MenuItem url="http://phpmysqladmin.com" title="phpMyAdmin" target="_blank"
resourceGroup="MySQL4"/--> resourceGroup="MySQL4"/-->
<MenuItem pageID="LyncPhoneNumbers" resourceGroup="Hosted Organizations" />
</ModuleData> </ModuleData>
<ModuleData id="SpaceIcons"> <ModuleData id="SpaceIcons">

View file

@ -160,6 +160,16 @@
<Control key="edit_ip" src="WebsitePanel/IPAddressesEditIPAddress.ascx" title="EditIPAddress" type="View" icon="adress_48.png" /> <Control key="edit_ip" src="WebsitePanel/IPAddressesEditIPAddress.ascx" title="EditIPAddress" type="View" icon="adress_48.png" />
</Controls> </Controls>
</ModuleDefinition> </ModuleDefinition>
<ModuleDefinition id="PhoneNumbers">
<Controls>
<Control key="" src="WebsitePanel/PhoneNumbers.ascx" title="PhoneNumbers" type="View" />
<Control key="add_phone" src="WebsitePanel/PhoneNumbersAddPhoneNumber.ascx" title="AddPhoneNumber" type="View" icon="adress_add_48.png" />
<Control key="edit_phone" src="WebsitePanel/PhoneNumbersEditPhoneNumber.ascx" title="EditPhoneNumber" type="View" icon="adress_48.png" />
</Controls>
</ModuleDefinition>
<ModuleDefinition id="Servers"> <ModuleDefinition id="Servers">
<Controls> <Controls>
<Control key="" src="WebsitePanel/Servers.ascx" title="Servers" type="View" /> <Control key="" src="WebsitePanel/Servers.ascx" title="Servers" type="View" />
@ -264,6 +274,12 @@
<Control key="allocate_addresses" src="WebsitePanel/WebSitesAllocateIPAddresses.ascx" title="WebSitesAllocateIPAddresses" type="View" /> <Control key="allocate_addresses" src="WebsitePanel/WebSitesAllocateIPAddresses.ascx" title="WebSitesAllocateIPAddresses" type="View" />
</Controls> </Controls>
</ModuleDefinition> </ModuleDefinition>
<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"> <ModuleDefinition id="FtpAccounts">
<Controls> <Controls>
<Control key="" src="WebsitePanel/FtpAccounts.ascx" title="FTPAccounts" type="View" /> <Control key="" src="WebsitePanel/FtpAccounts.ascx" title="FTPAccounts" type="View" />

View file

@ -212,6 +212,17 @@
</Content> </Content>
</Page> </Page>
<Page name="LyncPhoneNumbers" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" hidden="True">
<Content id="LeftPane">
<Module moduleDefinitionID="SpaceMenu" title="SpaceMenu" container="Clear.ascx">
<ModuleData ref="SpaceMenu"/>
</Module>
</Content>
<Content id="ContentPane">
<Module moduleDefinitionID="LyncPhoneNumbers" title="LyncPhoneNumbers" icon="adress_48.png" />
</Content>
</Page>
<Page name="SpaceFtpAccounts" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" hidden="True"> <Page name="SpaceFtpAccounts" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" hidden="True">
<Content id="LeftPane"> <Content id="LeftPane">
<Module moduleDefinitionID="SpaceMenu" title="SpaceMenu" container="Clear.ascx"> <Module moduleDefinitionID="SpaceMenu" title="SpaceMenu" container="Clear.ascx">
@ -558,6 +569,11 @@
<Module moduleDefinitionID="IPAddresses" title="IPAddresses" container="Edit.ascx" icon="adress_48.png" /> <Module moduleDefinitionID="IPAddresses" title="IPAddresses" container="Edit.ascx" icon="adress_48.png" />
</Content> </Content>
</Page> </Page>
<Page name="PhoneNumbers" roles="Administrator" skin="Browse1.ascx">
<Content id="ContentPane">
<Module moduleDefinitionID="PhoneNumbers" title="PhoneNumbers" container="Edit.ascx" icon="adress_48.png" />
</Content>
</Page>
<Page name="SystemSettings" roles="Administrator" skin="Browse1.ascx"> <Page name="SystemSettings" roles="Administrator" skin="Browse1.ascx">
<Content id="ContentPane"> <Content id="ContentPane">
<Module moduleDefinitionID="SystemSettings" title="SystemSettings" container="Edit.ascx" icon="tool_48.png" /> <Module moduleDefinitionID="SystemSettings" title="SystemSettings" container="Edit.ascx" icon="tool_48.png" />

View file

@ -771,8 +771,19 @@
<data name="ModuleTitle.ApplyEnableHardQuotaFeature" xml:space="preserve"> <data name="ModuleTitle.ApplyEnableHardQuotaFeature" xml:space="preserve">
<value>System Hard Quota</value> <value>System Hard Quota</value>
</data> </data>
<data name="ModuleTitle.HeliconZoo" xml:space="preserve"> <data name="ModuleTitle.HeliconZoo" xml:space="preserve">
<value>Helicon Zoo</value> <value>Helicon Zoo</value>
</data> </data>
<data name="ModuleTitle.LyncPhoneNumbers" xml:space="preserve">
<value>Phone Numbers</value>
</data>
<data name="ModuleTitle.AddPhoneNumber" xml:space="preserve">
<value>Add Phone Numbers</value>
</data>
<data name="ModuleTitle.EditPhoneNumber" xml:space="preserve">
<value>Edit Phone numbers</value>
</data>
<data name="ModuleTitle.PhoneNumbers" xml:space="preserve">
<value>Phone Numbers</value>
</data>
</root> </root>

View file

@ -462,4 +462,16 @@
<data name="PageName.SpaceApplyEnableHardQuotaFeature" xml:space="preserve"> <data name="PageName.SpaceApplyEnableHardQuotaFeature" xml:space="preserve">
<value>System Hard Quota</value> <value>System Hard Quota</value>
</data> </data>
<data name="PageName.LyncPhoneNumbers" xml:space="preserve">
<value>Phone Numbers</value>
</data>
<data name="PageTitle.LyncPhoneNumbers" xml:space="preserve">
<value>{user} - {space} - Phone Numbers</value>
</data>
<data name="PageName.PhoneNumbers" xml:space="preserve">
<value>Phone Numbers</value>
</data>
<data name="PageTitle.PhoneNumbers" xml:space="preserve">
<value>Phone Numbers</value>
</data>
</root> </root>

View file

@ -3118,7 +3118,6 @@
<data name="Error.ORGANIZATION_SET_USER_USERPRINCIPALNAME" xml:space="preserve"> <data name="Error.ORGANIZATION_SET_USER_USERPRINCIPALNAME" xml:space="preserve">
<value>Failed to update user login name.</value> <value>Failed to update user login name.</value>
</data> </data>
<data name="Success.EXCHANGE_MAILBOX_SET_DEFAULT_EMAIL" xml:space="preserve"> <data name="Success.EXCHANGE_MAILBOX_SET_DEFAULT_EMAIL" xml:space="preserve">
<value>Mailbox primary e-mail address has been changed.</value> <value>Mailbox primary e-mail address has been changed.</value>
</data> </data>
@ -3371,7 +3370,6 @@
<data name="Warning.NOT_ALL_EMAIL_ADDRESSES_DELETED" xml:space="preserve"> <data name="Warning.NOT_ALL_EMAIL_ADDRESSES_DELETED" xml:space="preserve">
<value>Please note not all email address are deleted</value> <value>Please note not all email address are deleted</value>
</data> </data>
<data name="Warning.EXCHANGE_NONE_PUBLIC_FOLDER_TO_DELETE" xml:space="preserve"> <data name="Warning.EXCHANGE_NONE_PUBLIC_FOLDER_TO_DELETE" xml:space="preserve">
<value>There are no public folders to delete</value> <value>There are no public folders to delete</value>
</data> </data>
@ -3960,9 +3958,6 @@
<data name="Warning.1602" xml:space="preserve"> <data name="Warning.1602" xml:space="preserve">
<value>IP Address could not be deleted</value> <value>IP Address could not be deleted</value>
</data> </data>
<data name="WarningDescription.1602" xml:space="preserve">
<value>IP Address could not be deleted because it is being used by Virtual Private Server.</value>
</data>
<data name="Error.VPS_ERROR_ADDING_IP_ADDRESS" xml:space="preserve"> <data name="Error.VPS_ERROR_ADDING_IP_ADDRESS" xml:space="preserve">
<value>Cannot add network adapter IP addresses</value> <value>Cannot add network adapter IP addresses</value>
</data> </data>
@ -5286,6 +5281,12 @@
<data name="Success.EXCHANGE_UPDATEPLANS" xml:space="preserve"> <data name="Success.EXCHANGE_UPDATEPLANS" xml:space="preserve">
<value>Mailbox plan updated</value> <value>Mailbox plan updated</value>
</data> </data>
<data name="Error.LYNC_UPDATEPLANS" xml:space="preserve">
<value>Lync plan update failed</value>
</data>
<data name="Success.LYNC_UPDATEPLANS" xml:space="preserve">
<value>Lync plan updated</value>
</data>
<data name="Error.LYNC_APPLYPLANTEMPLATE" xml:space="preserve"> <data name="Error.LYNC_APPLYPLANTEMPLATE" xml:space="preserve">
<value>Failed to apply plans template</value> <value>Failed to apply plans template</value>
</data> </data>
@ -5313,4 +5314,19 @@
<data name="WarningDescription.ApplyEnableHardQuotaFeature" xml:space="preserve"> <data name="WarningDescription.ApplyEnableHardQuotaFeature" xml:space="preserve">
<value>By clicking on the button 'Apply', you will apply the respective hard quota on each provisioned home folder. Note that this may take some time.</value> <value>By clicking on the button 'Apply', you will apply the respective hard quota on each provisioned home folder. Note that this may take some time.</value>
</data> </data>
<data name="Error.IP_ADD_PHONE" xml:space="preserve">
<value>Error adding Phone number</value>
</data>
<data name="Error.IP_ADD_PHONE_RANGE" xml:space="preserve">
<value>Cannot add Phone numbers range.</value>
</data>
<data name="Error.DEALLOCATE_SPACE_PHONE_NUMBER" xml:space="preserve">
<value>The following errors have been occurred:</value>
</data>
<data name="Success.DEALLOCATE_SPACE_PHONE_NUMBER" xml:space="preserve">
<value>Phone number have been successfully deallocated.</value>
</data>
<data name="WarningDescription.PHONE_EDIT_LIST_EMPTY_ERROR" xml:space="preserve">
<value>At least one Phone number must be selected.</value>
</data>
</root> </root>

View file

@ -0,0 +1,126 @@
<?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>
</root>

View file

@ -0,0 +1,126 @@
<?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>
</root>

View file

@ -0,0 +1,204 @@
<?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="btnAddItem.Text" xml:space="preserve">
<value>Add</value>
</data>
<data name="gvIPAddressesExternalIP.Header" xml:space="preserve">
<value>Numbers</value>
</data>
<data name="gvIPAddressesInternalIP.Header" xml:space="preserve">
<value>NAT Address</value>
</data>
<data name="gvIPAddressesServer.Header" xml:space="preserve">
<value>Server</value>
</data>
<data name="gvIPAddressesUser.Header" xml:space="preserve">
<value>User</value>
</data>
<data name="gvIPAddressesComments.Header" xml:space="preserve">
<value>Comments</value>
</data>
<data name="gvIPAddresses.Empty" xml:space="preserve">
<value>No Phone Numbers found in the selected Pool.</value>
</data>
<data name="SearchField.ExternalIP" xml:space="preserve">
<value>Numbers</value>
</data>
<data name="SearchField.InternalIP" xml:space="preserve">
<value>NAT Address</value>
</data>
<data name="SearchField.Server" xml:space="preserve">
<value>Server Name</value>
</data>
<data name="SearchField.Username" xml:space="preserve">
<value>Username</value>
</data>
<data name="gvIPAddressesIsVps.Header" xml:space="preserve">
<value>VPS</value>
</data>
<data name="gvIPAddressesGateway.Header" xml:space="preserve">
<value>Default Gateway</value>
</data>
<data name="ddlPoolsVpsExternalNetwork.Text" xml:space="preserve">
<value>VPS External Network IP</value>
</data>
<data name="ddlPoolsVpsManagementNetwork.Text" xml:space="preserve">
<value>VPS Management Network IP</value>
</data>
<data name="ddlPoolsWebSites.Text" xml:space="preserve">
<value>Web Sites IP</value>
</data>
<data name="ddlPoolsGeneral.Text" xml:space="preserve">
<value>General IP</value>
</data>
<data name="lblItemsPerPage.Text" xml:space="preserve">
<value>Page size:</value>
</data>
<data name="lblPool.Text" xml:space="preserve">
<value>Pool:</value>
</data>
<data name="btnDeleteSelected.OnClientClick" xml:space="preserve">
<value>return confirm('Delete selected?');</value>
</data>
<data name="btnDeleteSelected.Text" xml:space="preserve">
<value>Delete selected</value>
</data>
<data name="btnEditSelected.Text" xml:space="preserve">
<value>Edit selected...</value>
</data>
<data name="gvAddressesItemName.HeaderText" xml:space="preserve">
<value>Item</value>
</data>
<data name="gvAddressesSpace.HeaderText" xml:space="preserve">
<value>Space</value>
</data>
<data name="gvAddressesUser.HeaderText" xml:space="preserve">
<value>User</value>
</data>
<data name="SearchField.DefaultGateway" xml:space="preserve">
<value>Default Gateway</value>
</data>
<data name="SearchField.ItemName" xml:space="preserve">
<value>Item Name</value>
</data>
<data name="ddlPoolsPhoneNumbers.Text" xml:space="preserve">
<value>Phone Numbers</value>
</data>
</root>

View file

@ -0,0 +1,172 @@
<?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="lblExternalIP.Text" xml:space="preserve">
<value>IP Address:</value>
</data>
<data name="lblInternalIP.Text" xml:space="preserve">
<value>NAT Address:</value>
</data>
<data name="locServer.Text" xml:space="preserve">
<value>Server:</value>
</data>
<data name="lblComments.Text" xml:space="preserve">
<value>Comments:</value>
</data>
<data name="btnAdd.Text" xml:space="preserve">
<value>Add</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="Text.NotAssigned" xml:space="preserve">
<value>&lt;Not Assigned&gt;</value>
</data>
<data name="locIPAddress.Text" xml:space="preserve">
<value>Settings:</value>
</data>
<data name="locTo.Text" xml:space="preserve">
<value>to</value>
</data>
<data name="locDefaultGateway.Text" xml:space="preserve">
<value>Default Gateway:</value>
</data>
<data name="locSubnetMask.Text" xml:space="preserve">
<value>Subnet Mask:</value>
</data>
<data name="ddlPoolsGeneral.Text" xml:space="preserve">
<value>General IP</value>
</data>
<data name="ddlPoolsVpsExternalNetwork.Text" xml:space="preserve">
<value>VPS External Network IP</value>
</data>
<data name="ddlPoolsVpsManagementNetwork.Text" xml:space="preserve">
<value>VPS Management Network IP</value>
</data>
<data name="ddlPoolsWebSites.Text" xml:space="preserve">
<value>Web Sites IP</value>
<comment> </comment>
</data>
<data name="ddlPoolsPhoneNumbers.Text" xml:space="preserve">
<value>Phone Numbers</value>
</data>
<data name="lblPhoneNumbers.Text" xml:space="preserve">
<value>Phone Numbers:</value>
</data>
</root>

View file

@ -0,0 +1,165 @@
<?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="lblServer.Text" xml:space="preserve">
<value>Server:</value>
</data>
<data name="lblComments.Text" xml:space="preserve">
<value>Comments:</value>
</data>
<data name="btnUpdate.Text" xml:space="preserve">
<value>Update</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="Text.NotAssigned" xml:space="preserve">
<value>&lt;Not Assigned&gt;</value>
</data>
<data name="locDefaultGateway.Text" xml:space="preserve">
<value>Default Gateway:</value>
</data>
<data name="locSubnetMask.Text" xml:space="preserve">
<value>Subnet Mask:</value>
</data>
<data name="ddlPoolsGeneral.Text" xml:space="preserve">
<value>General IP</value>
</data>
<data name="ddlPoolsVpsExternalNetwork.Text" xml:space="preserve">
<value>VPS External Network IP</value>
</data>
<data name="ddlPoolsVpsManagementNetwork.Text" xml:space="preserve">
<value>VPS Management Network IP</value>
</data>
<data name="ddlPoolsWebSites.Text" xml:space="preserve">
<value>Web Sites IP</value>
</data>
<data name="lblExternalIP.Text" xml:space="preserve">
<value>IP Address:</value>
</data>
<data name="lblInternalIP.Text" xml:space="preserve">
<value>NAT Address:</value>
</data>
<data name="ddlPoolsPhoneNumbers.Text" xml:space="preserve">
<value>Phone Numbers</value>
</data>
<data name="lblPhoneNumbers.Text" xml:space="preserve">
<value>Phone Number:</value>
</data>
</root>

View file

@ -1,10 +1,39 @@
//------------------------------------------------------------------------------ // 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.ExchangeServer { namespace WebsitePanel.Portal.ExchangeServer {
@ -13,128 +42,142 @@ namespace WebsitePanel.Portal.ExchangeServer {
public partial class ExchangeDisclaimerGeneralSettings { public partial class ExchangeDisclaimerGeneralSettings {
/// <summary> /// <summary>
/// asyncTasks элемент управления. /// asyncTasks control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks; protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
/// <summary> /// <summary>
/// breadcrumb элемент управления. /// breadcrumb control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb; protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
/// <summary> /// <summary>
/// menu элемент управления. /// menu control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu; protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
/// <summary> /// <summary>
/// Image1 элемент управления. /// Image1 control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Image Image1; protected global::System.Web.UI.WebControls.Image Image1;
/// <summary> /// <summary>
/// locTitle элемент управления. /// locTitle control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locTitle; protected global::System.Web.UI.WebControls.Localize locTitle;
/// <summary> /// <summary>
/// litDisplayName элемент управления. /// litDisplayName control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Literal litDisplayName; protected global::System.Web.UI.WebControls.Literal litDisplayName;
/// <summary> /// <summary>
/// messageBox элемент управления. /// messageBox control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
/// <summary> /// <summary>
/// locDisplayName элемент управления. /// locDisplayName control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locDisplayName; protected global::System.Web.UI.WebControls.Localize locDisplayName;
/// <summary> /// <summary>
/// txtDisplayName элемент управления. /// txtDisplayName control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtDisplayName; protected global::System.Web.UI.WebControls.TextBox txtDisplayName;
/// <summary> /// <summary>
/// valRequireDisplayName элемент управления. /// valRequireDisplayName control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireDisplayName; protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireDisplayName;
/// <summary> /// <summary>
/// locNotes элемент управления. /// locNotes control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locNotes; protected global::System.Web.UI.WebControls.Localize locNotes;
/// <summary> /// <summary>
/// txtNotes элемент управления. /// txtNotes control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtNotes; protected global::System.Web.UI.WebControls.TextBox txtNotes;
/// <summary> /// <summary>
/// btnSave элемент управления. /// btnSave control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Button btnSave; protected global::System.Web.UI.WebControls.Button btnSave;
/// <summary> /// <summary>
/// ValidationSummary1 элемент управления. /// ValidationSummary1 control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1; protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1;
} }

View file

@ -60,11 +60,6 @@
<asp:CheckBox ID="chkMobility" runat="server" meta:resourcekey="chkMobility" Text="Mobility"></asp:CheckBox> <asp:CheckBox ID="chkMobility" runat="server" meta:resourcekey="chkMobility" Text="Mobility"></asp:CheckBox>
</td> </td>
</tr> </tr>
<tr>
<td>
<asp:CheckBox ID="chkFederation" runat="server" meta:resourcekey="chkFederation" Text="Federation"></asp:CheckBox>
</td>
</tr>
<tr> <tr>
<td> <td>
<asp:CheckBox ID="chkConferencing" runat="server" meta:resourcekey="chkConferencing" Text="Conferencing"></asp:CheckBox> <asp:CheckBox ID="chkConferencing" runat="server" meta:resourcekey="chkConferencing" Text="Conferencing"></asp:CheckBox>
@ -79,6 +74,135 @@
<br /> <br />
</asp:Panel> </asp:Panel>
<wsp:CollapsiblePanel id="secPlanFeaturesFederation" runat="server"
TargetControlID="PlanFeaturesFederation" meta:resourcekey="secPlanFeaturesFederation" Text="Federation">
</wsp:CollapsiblePanel>
<asp:Panel ID="PlanFeaturesFederation" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td>
<asp:CheckBox ID="chkFederation" runat="server" meta:resourcekey="chkFederation" Text="Federation"></asp:CheckBox>
</td>
</tr>
<tr>
<td>
<asp:CheckBox ID="chkRemoteUserAccess" runat="server" meta:resourcekey="chkRemoteUserAccess" Text="Remote User access"></asp:CheckBox>
</td>
</tr>
<tr>
<td>
<asp:CheckBox ID="chkPublicIMConnectivity" runat="server" meta:resourcekey="chkPublicIMConnectivity" Text="Public IM Connectivity"></asp:CheckBox>
</td>
</tr>
</table>
<br />
</asp:Panel>
<wsp:CollapsiblePanel id="secPlanFeaturesArchiving" runat="server"
TargetControlID="PlanFeaturesArchiving" meta:resourcekey="secPlanFeaturesArchiving" Text="Archiving">
</wsp:CollapsiblePanel>
<asp:Panel ID="PlanFeaturesArchiving" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locArchivingPolicy" meta:resourcekey="locArchivingPolicy" Text="Archiving Policy:" />
</td>
<td>
<asp:DropDownList ID="ddArchivingPolicy" runat="server"></asp:DropDownList>
</td>
</tr>
</table>
<br />
</asp:Panel>
<wsp:CollapsiblePanel id="secPlanFeaturesMeeting" runat="server"
TargetControlID="PlanFeaturesMeeting" meta:resourcekey="secPlanFeaturesMeeting" Text="Meeting">
</wsp:CollapsiblePanel>
<asp:Panel ID="PlanFeaturesMeeting" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td>
<asp:CheckBox ID="chkAllowOrganizeMeetingsWithExternalAnonymous" runat="server" meta:resourcekey="chkAllowOrganizeMeetingsWithExternalAnonymous" Text="Allow organize meetings with external anonymous participants"></asp:CheckBox>
</td>
</tr>
</table>
<br />
</asp:Panel>
<wsp:CollapsiblePanel id="secPlanFeaturesTelephony" runat="server"
TargetControlID="PlanFeaturesTelephony" meta:resourcekey="secPlanFeaturesTelephony" Text="Telephony">
</wsp:CollapsiblePanel>
<asp:Panel ID="PlanFeaturesTelephony" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locTelephony" meta:resourcekey="locTelephony" Text="Telephony :" />
</td>
<td>
<asp:DropDownList ID="ddTelephony" runat="server" AutoPostBack="True">
<asp:ListItem Value="0" Text="Audio/Video disabled" meta:resourcekey="ddlTelephonyDisabled" />
<asp:ListItem Value="1" Text="PC-to-PC only" meta:resourcekey="ddlTelephonyPCtoPCOnly" />
<asp:ListItem Value="2" Text="Enterprise voice" meta:resourcekey="ddlTelephonyEnterpriseVoice" />
<asp:ListItem Value="3" Text="Remote call control" meta:resourcekey="ddlTelephonyRemoteCallControl" />
<asp:ListItem Value="4" Text="Remote call control only" meta:resourcekey="ddlTelephonyRemoteCallControlOnly" />
</asp:DropDownList>
</td>
</tr>
</table>
<asp:Panel runat="server" ID="pnEnterpriseVoice">
<table>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locTelephonyProvider" meta:resourcekey="locTelephonyProvider" Text="Telephony Provider :" />
</td>
<td>
<asp:TextBox ID="tbTelephoneProvider" runat="server"></asp:TextBox>
<asp:Button runat="server" ID="btnAccept" Text="Accept" OnClick="btnAccept_Click" OnClientClick="ShowProgressDialog('Loading...');" ValidationGroup="Accept"/>
<asp:RequiredFieldValidator id="AcceptRequiredValidator" runat="server" ErrorMessage="Please enter provider name"
ControlToValidate="tbTelephoneProvider" Display="Dynamic" ValidationGroup="Accept" SetFocusOnError="true"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locDialPlan" meta:resourcekey="locDialPlan" Text="Dial Plan :" />
</td>
<td>
<asp:DropDownList ID="ddTelephonyDialPlanPolicy" runat="server"></asp:DropDownList>
</td>
</tr>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locVoicePolicy" meta:resourcekey="locVoicePolicy" Text="Voice Policy :" />
</td>
<td>
<asp:DropDownList ID="ddTelephonyVoicePolicy" runat="server"></asp:DropDownList>
</td>
</tr>
</table>
</asp:Panel>
<asp:Panel runat="server" ID="pnServerURI">
<table>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locServerURI" meta:resourcekey="locServerURI" Text="Server URI :" />
</td>
<td>
<asp:TextBox ID="tbServerURI" runat="server"></asp:TextBox>
</td>
</tr>
</table>
</asp:Panel>
<br />
</asp:Panel>
<%-- Disable because not used
<wsp:CollapsiblePanel id="secEnterpriseVoice" runat="server" <wsp:CollapsiblePanel id="secEnterpriseVoice" runat="server"
TargetControlID="EnterpriseVoice" meta:resourcekey="secEnterpriseVoice" Text="Enterprise Voice Policy"> TargetControlID="EnterpriseVoice" meta:resourcekey="secEnterpriseVoice" Text="Enterprise Voice Policy">
</wsp:CollapsiblePanel> </wsp:CollapsiblePanel>
@ -115,7 +239,7 @@
</table> </table>
<br /> <br />
</asp:Panel> </asp:Panel>
--%>
<br /> <br />
<div class="FormFooterClean"> <div class="FormFooterClean">

View file

@ -30,6 +30,11 @@ using System;
using WebsitePanel.EnterpriseServer; using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.HostedSolution; using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.Providers;
using WebsitePanel.Providers.Web;
using WebsitePanel.Providers.Common;
using WebsitePanel.Portal.Code.Helpers;
namespace WebsitePanel.Portal.Lync namespace WebsitePanel.Portal.Lync
{ {
@ -37,11 +42,22 @@ namespace WebsitePanel.Portal.Lync
{ {
protected void Page_Load(object sender, EventArgs e) protected void Page_Load(object sender, EventArgs e)
{ {
PackageContext cntx = null;
if (!IsPostBack) if (!IsPostBack)
{ {
cntx = ES.Services.Packages.GetPackageContext(PanelSecurity.PackageId);
PackageContext cntx = ES.Services.Packages.GetPackageContext(PanelSecurity.PackageId); string[] archivePolicy = ES.Services.Lync.GetPolicyList(PanelRequest.ItemID, LyncPolicyType.Archiving, null);
if (archivePolicy != null)
{
foreach (string policy in archivePolicy)
{
if (policy.ToLower()=="global") continue;
string txt = policy.Replace("Tag:","");
ddArchivingPolicy.Items.Add( new System.Web.UI.WebControls.ListItem( txt, policy) );
}
}
if (PanelRequest.GetInt("LyncUserPlanId") != 0) if (PanelRequest.GetInt("LyncUserPlanId") != 0)
{ {
@ -54,6 +70,8 @@ namespace WebsitePanel.Portal.Lync
chkConferencing.Checked = plan.Conferencing; chkConferencing.Checked = plan.Conferencing;
chkMobility.Checked = plan.Mobility; chkMobility.Checked = plan.Mobility;
chkEnterpriseVoice.Checked = plan.EnterpriseVoice; chkEnterpriseVoice.Checked = plan.EnterpriseVoice;
/* because not used
switch (plan.VoicePolicy) switch (plan.VoicePolicy)
{ {
case LyncVoicePolicyType.None: case LyncVoicePolicyType.None:
@ -74,16 +92,40 @@ namespace WebsitePanel.Portal.Lync
chkNone.Checked = true; chkNone.Checked = true;
break; break;
} }
*/
chkRemoteUserAccess.Checked = plan.RemoteUserAccess;
chkPublicIMConnectivity.Checked = plan.PublicIMConnectivity;
chkAllowOrganizeMeetingsWithExternalAnonymous.Checked = plan.AllowOrganizeMeetingsWithExternalAnonymous;
ddTelephony.SelectedIndex = plan.Telephony;
tbServerURI.Text = plan.ServerURI;
locTitle.Text = plan.LyncUserPlanName; locTitle.Text = plan.LyncUserPlanName;
this.DisableControls = true; this.DisableControls = true;
string planArchivePolicy = "";
if (plan.ArchivePolicy != null) planArchivePolicy = plan.ArchivePolicy;
string planTelephonyDialPlanPolicy = "";
if (plan.TelephonyDialPlanPolicy != null) planTelephonyDialPlanPolicy = plan.TelephonyDialPlanPolicy;
string planTelephonyVoicePolicy = "";
if (plan.TelephonyVoicePolicy != null) planTelephonyVoicePolicy = plan.TelephonyVoicePolicy;
ddArchivingPolicy.Items.Clear();
ddArchivingPolicy.Items.Add(new System.Web.UI.WebControls.ListItem(planArchivePolicy.Replace("Tag:", ""), planArchivePolicy));
ddTelephonyDialPlanPolicy.Items.Clear();
ddTelephonyDialPlanPolicy.Items.Add(new System.Web.UI.WebControls.ListItem(planTelephonyDialPlanPolicy.Replace("Tag:", ""), planTelephonyDialPlanPolicy));
ddTelephonyVoicePolicy.Items.Clear();
ddTelephonyVoicePolicy.Items.Add(new System.Web.UI.WebControls.ListItem(planTelephonyVoicePolicy.Replace("Tag:", ""), planTelephonyVoicePolicy));
} }
else else
{ {
chkIM.Checked = true; chkIM.Checked = true;
chkIM.Enabled = false; chkIM.Enabled = false;
chkNone.Checked = true; // chkNone.Checked = true; because not used
if (cntx != null) if (cntx != null)
{ {
foreach (QuotaValueInfo quota in cntx.QuotasArray) foreach (QuotaValueInfo quota in cntx.QuotasArray)
@ -110,6 +152,33 @@ namespace WebsitePanel.Portal.Lync
} }
} }
chkEnterpriseVoice.Enabled = false;
chkEnterpriseVoice.Checked = false;
pnEnterpriseVoice.Visible = false;
pnServerURI.Visible = false;
switch (ddTelephony.SelectedIndex)
{
case 1:
break;
case 2:
pnEnterpriseVoice.Visible = true;
chkEnterpriseVoice.Checked = true;
break;
case 3:
pnServerURI.Visible = true;
break;
case 4:
pnServerURI.Visible = true;
break;
}
cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
PlanFeaturesTelephony.Visible = Utils.CheckQouta(Quotas.LYNC_ENTERPRISEVOICE, cntx);
secPlanFeaturesTelephony.Visible = PlanFeaturesTelephony.Visible;
} }
protected void btnAdd_Click(object sender, EventArgs e) protected void btnAdd_Click(object sender, EventArgs e)
@ -117,6 +186,37 @@ namespace WebsitePanel.Portal.Lync
AddPlan(); AddPlan();
} }
protected void btnAccept_Click(object sender, EventArgs e)
{
string name = tbTelephoneProvider.Text;
if (string.IsNullOrEmpty(name)) return;
ddTelephonyDialPlanPolicy.Items.Clear();
string[] dialPlan = ES.Services.Lync.GetPolicyList(PanelRequest.ItemID, LyncPolicyType.DialPlan, name);
if (dialPlan != null)
{
foreach (string policy in dialPlan)
{
if (policy.ToLower() == "global") continue;
string txt = policy.Replace("Tag:", "");
ddTelephonyDialPlanPolicy.Items.Add(new System.Web.UI.WebControls.ListItem(txt, policy));
}
}
ddTelephonyVoicePolicy.Items.Clear();
string[] voicePolicy = ES.Services.Lync.GetPolicyList(PanelRequest.ItemID, LyncPolicyType.Voice, name);
if (voicePolicy != null)
{
foreach (string policy in voicePolicy)
{
if (policy.ToLower() == "global") continue;
string txt = policy.Replace("Tag:", "");
ddTelephonyVoicePolicy.Items.Add(new System.Web.UI.WebControls.ListItem(txt, policy));
}
}
}
private void AddPlan() private void AddPlan()
{ {
try try
@ -132,6 +232,10 @@ namespace WebsitePanel.Portal.Lync
plan.EnterpriseVoice = chkEnterpriseVoice.Checked; plan.EnterpriseVoice = chkEnterpriseVoice.Checked;
plan.VoicePolicy = LyncVoicePolicyType.None;
/* because not used
if (!plan.EnterpriseVoice) if (!plan.EnterpriseVoice)
{ {
plan.VoicePolicy = LyncVoicePolicyType.None; plan.VoicePolicy = LyncVoicePolicyType.None;
@ -150,6 +254,20 @@ namespace WebsitePanel.Portal.Lync
plan.VoicePolicy = LyncVoicePolicyType.None; plan.VoicePolicy = LyncVoicePolicyType.None;
} }
*/
plan.RemoteUserAccess = chkRemoteUserAccess.Checked;
plan.PublicIMConnectivity = chkPublicIMConnectivity.Checked;
plan.AllowOrganizeMeetingsWithExternalAnonymous = chkAllowOrganizeMeetingsWithExternalAnonymous.Checked;
plan.Telephony = ddTelephony.SelectedIndex;
plan.ServerURI = tbServerURI.Text;
plan.ArchivePolicy = ddArchivingPolicy.SelectedValue;
plan.TelephonyDialPlanPolicy = ddTelephonyDialPlanPolicy.SelectedValue;
plan.TelephonyVoicePolicy = ddTelephonyVoicePolicy.SelectedValue;
int result = ES.Services.Lync.AddLyncUserPlan(PanelRequest.ItemID, int result = ES.Services.Lync.AddLyncUserPlan(PanelRequest.ItemID,
plan); plan);

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation. // Copyright (c) 2011, Outercurve Foundation.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without modification, // Redistribution and use in source and binary forms, with or without modification,
@ -34,7 +34,6 @@
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace WebsitePanel.Portal.Lync { namespace WebsitePanel.Portal.Lync {
@ -166,15 +165,6 @@ namespace WebsitePanel.Portal.Lync {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.CheckBox chkMobility; protected global::System.Web.UI.WebControls.CheckBox chkMobility;
/// <summary>
/// chkFederation control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.CheckBox chkFederation;
/// <summary> /// <summary>
/// chkConferencing control. /// chkConferencing control.
/// </summary> /// </summary>
@ -194,67 +184,256 @@ namespace WebsitePanel.Portal.Lync {
protected global::System.Web.UI.WebControls.CheckBox chkEnterpriseVoice; protected global::System.Web.UI.WebControls.CheckBox chkEnterpriseVoice;
/// <summary> /// <summary>
/// secEnterpriseVoice control. /// secPlanFeaturesFederation control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secEnterpriseVoice; protected global::WebsitePanel.Portal.CollapsiblePanel secPlanFeaturesFederation;
/// <summary> /// <summary>
/// EnterpriseVoice control. /// PlanFeaturesFederation control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Panel EnterpriseVoice; protected global::System.Web.UI.WebControls.Panel PlanFeaturesFederation;
/// <summary> /// <summary>
/// chkNone control. /// chkFederation control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RadioButton chkNone; protected global::System.Web.UI.WebControls.CheckBox chkFederation;
/// <summary> /// <summary>
/// chkEmergency control. /// chkRemoteUserAccess control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RadioButton chkEmergency; protected global::System.Web.UI.WebControls.CheckBox chkRemoteUserAccess;
/// <summary> /// <summary>
/// chkNational control. /// chkPublicIMConnectivity control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RadioButton chkNational; protected global::System.Web.UI.WebControls.CheckBox chkPublicIMConnectivity;
/// <summary> /// <summary>
/// chkMobile control. /// secPlanFeaturesArchiving control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RadioButton chkMobile; protected global::WebsitePanel.Portal.CollapsiblePanel secPlanFeaturesArchiving;
/// <summary> /// <summary>
/// chkInternational control. /// PlanFeaturesArchiving control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RadioButton chkInternational; protected global::System.Web.UI.WebControls.Panel PlanFeaturesArchiving;
/// <summary>
/// locArchivingPolicy 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 locArchivingPolicy;
/// <summary>
/// ddArchivingPolicy control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddArchivingPolicy;
/// <summary>
/// secPlanFeaturesMeeting control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secPlanFeaturesMeeting;
/// <summary>
/// PlanFeaturesMeeting 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.Panel PlanFeaturesMeeting;
/// <summary>
/// chkAllowOrganizeMeetingsWithExternalAnonymous control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.CheckBox chkAllowOrganizeMeetingsWithExternalAnonymous;
/// <summary>
/// secPlanFeaturesTelephony control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secPlanFeaturesTelephony;
/// <summary>
/// PlanFeaturesTelephony 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.Panel PlanFeaturesTelephony;
/// <summary>
/// locTelephony 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 locTelephony;
/// <summary>
/// ddTelephony control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddTelephony;
/// <summary>
/// pnEnterpriseVoice 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.Panel pnEnterpriseVoice;
/// <summary>
/// locTelephonyProvider 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 locTelephonyProvider;
/// <summary>
/// tbTelephoneProvider 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 tbTelephoneProvider;
/// <summary>
/// btnAccept 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 btnAccept;
/// <summary>
/// AcceptRequiredValidator 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 AcceptRequiredValidator;
/// <summary>
/// locDialPlan 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 locDialPlan;
/// <summary>
/// ddTelephonyDialPlanPolicy control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddTelephonyDialPlanPolicy;
/// <summary>
/// locVoicePolicy 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 locVoicePolicy;
/// <summary>
/// ddTelephonyVoicePolicy control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddTelephonyVoicePolicy;
/// <summary>
/// pnServerURI 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.Panel pnServerURI;
/// <summary>
/// locServerURI 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 locServerURI;
/// <summary>
/// tbServerURI 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 tbServerURI;
/// <summary> /// <summary>
/// btnAdd control. /// btnAdd control.
@ -273,14 +452,5 @@ namespace WebsitePanel.Portal.Lync {
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1; protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1;
/// <summary>
/// FormComments control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize FormComments;
} }
} }

View file

@ -45,9 +45,40 @@
</tr> </tr>
</table> </table>
<asp:Panel runat="server" ID="pnEnterpriseVoice">
<table>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locPhoneNumber" meta:resourcekey="locPhoneNumber" Text="Phone Number:" />
</td>
<td>
<!-- <asp:TextBox runat="server" ID="tb_PhoneNumber" /> -->
<asp:dropdownlist id="ddlPhoneNumber" Runat="server" CssClass="NormalTextBox"></asp:dropdownlist>
<asp:RegularExpressionValidator ID="PhoneFormatValidator" runat="server"
ControlToValidate="ddlPhoneNumber" Display="Dynamic" ValidationGroup="Validation1" SetFocusOnError="true"
ValidationExpression="^([0-9])*$"
ErrorMessage="Must contain only numbers.">
</asp:RegularExpressionValidator>
</td>
</tr>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locLyncPin" meta:resourcekey="locLyncPin" Text="Lync Pin:" />
</td>
<td>
<asp:TextBox runat="server" ID="tbPin" />
<asp:RegularExpressionValidator ID="PinRegularExpressionValidator" runat="server"
ControlToValidate="tbPin" Display="Dynamic" ValidationGroup="Validation1" SetFocusOnError="true"
ValidationExpression="^([0-9])*$"
ErrorMessage="Must contain only numbers.">
</asp:RegularExpressionValidator>
</td>
</tr>
</table>
</asp:Panel>
<div class="FormFooterClean"> <div class="FormFooterClean">
<asp:Button id="btnCreate" runat="server" <asp:Button id="btnCreate" runat="server" ValidationGroup="Validation1"
CssClass="Button1" meta:resourcekey="btnCreate" CssClass="Button1" meta:resourcekey="btnCreate"
onclick="btnCreate_Click" ></asp:Button> onclick="btnCreate_Click" ></asp:Button>
</div> </div>

View file

@ -30,6 +30,13 @@
using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.EnterpriseServer; using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.HostedSolution;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace WebsitePanel.Portal.Lync namespace WebsitePanel.Portal.Lync
{ {
public partial class CreateLyncUser : WebsitePanelModuleBase public partial class CreateLyncUser : WebsitePanelModuleBase
@ -40,10 +47,60 @@ namespace WebsitePanel.Portal.Lync
{ {
WebsitePanel.Providers.HostedSolution.LyncUserPlan[] plans = ES.Services.Lync.GetLyncUserPlans(PanelRequest.ItemID); WebsitePanel.Providers.HostedSolution.LyncUserPlan[] plans = ES.Services.Lync.GetLyncUserPlans(PanelRequest.ItemID);
BindPhoneNumbers();
if (plans.Length == 0) if (plans.Length == 0)
btnCreate.Enabled = false; btnCreate.Enabled = false;
} }
}
private void BindPhoneNumbers()
{
ddlPhoneNumber.Items.Add(new ListItem("<Select Phone>", ""));
PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, IPAddressPool.PhoneNumbers);
foreach (PackageIPAddress ip in ips)
{
string phone = ip.ExternalIP;
ddlPhoneNumber.Items.Add(new ListItem(phone, ip.PackageAddressID.ToString()));
}
}
protected void Page_PreRender(object sender, EventArgs e)
{
bool EnterpriseVoice = false;
WebsitePanel.Providers.HostedSolution.LyncUserPlan plan = planSelector.plan;
if (plan != null)
EnterpriseVoice = plan.EnterpriseVoice;
pnEnterpriseVoice.Visible = EnterpriseVoice;
if (!EnterpriseVoice)
{
ddlPhoneNumber.Text = "";
tbPin.Text = "";
}
if (EnterpriseVoice)
{
string[] pinPolicy = ES.Services.Lync.GetPolicyList(PanelRequest.ItemID, LyncPolicyType.Pin, "MinPasswordLength");
if (pinPolicy != null)
{
if (pinPolicy.Length > 0)
{
int MinPasswordLength = -1;
if (int.TryParse(pinPolicy[0], out MinPasswordLength))
{
PinRegularExpressionValidator.ValidationExpression = "^([0-9]){" + MinPasswordLength.ToString() + ",}$";
PinRegularExpressionValidator.ErrorMessage = "Must contain only numbers. Min. length " + MinPasswordLength.ToString();
}
}
}
}
} }
@ -53,6 +110,11 @@ namespace WebsitePanel.Portal.Lync
LyncUserResult res = ES.Services.Lync.CreateLyncUser(PanelRequest.ItemID, accountId, Convert.ToInt32(planSelector.planId)); LyncUserResult res = ES.Services.Lync.CreateLyncUser(PanelRequest.ItemID, accountId, Convert.ToInt32(planSelector.planId));
if (res.IsSuccess && res.ErrorCodes.Count == 0) if (res.IsSuccess && res.ErrorCodes.Count == 0)
{ {
//#1
LyncUser lyncUser = ES.Services.Lync.GetLyncUserGeneralSettings(PanelRequest.ItemID, accountId);
ES.Services.Lync.SetLyncUserGeneralSettings(PanelRequest.ItemID, accountId, lyncUser.SipAddress, ddlPhoneNumber.SelectedItem.Text + ":" + tbPin.Text);
Response.Redirect(EditUrl("AccountID", accountId.ToString(), "edit_lync_user", Response.Redirect(EditUrl("AccountID", accountId.ToString(), "edit_lync_user",
"SpaceID=" + PanelSecurity.PackageId, "SpaceID=" + PanelSecurity.PackageId,
"ItemID=" + PanelRequest.ItemID)); "ItemID=" + PanelRequest.ItemID));

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation. // Copyright (c) 2011, Outercurve Foundation.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without modification, // Redistribution and use in source and binary forms, with or without modification,
@ -46,6 +46,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks; protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
@ -55,6 +56,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb; protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
@ -64,6 +66,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu; protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
@ -73,6 +76,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Image Image1; protected global::System.Web.UI.WebControls.Image Image1;
@ -82,6 +86,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locTitle; protected global::System.Web.UI.WebControls.Localize locTitle;
@ -91,6 +96,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
@ -100,6 +106,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlTable ExistingUserTable; protected global::System.Web.UI.HtmlControls.HtmlTable ExistingUserTable;
@ -109,6 +116,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize Localize1; protected global::System.Web.UI.WebControls.Localize Localize1;
@ -118,6 +126,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.UserSelector userSelector; protected global::WebsitePanel.Portal.ExchangeServer.UserControls.UserSelector userSelector;
@ -127,6 +136,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locPlanName; protected global::System.Web.UI.WebControls.Localize locPlanName;
@ -136,15 +146,87 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.Lync.UserControls.LyncUserPlanSelector planSelector; protected global::WebsitePanel.Portal.Lync.UserControls.LyncUserPlanSelector planSelector;
/// <summary>
/// pnEnterpriseVoice 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.Panel pnEnterpriseVoice;
/// <summary>
/// locPhoneNumber 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 locPhoneNumber;
/// <summary>
/// ddlPhoneNumber control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlPhoneNumber;
/// <summary>
/// PhoneFormatValidator 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.RegularExpressionValidator PhoneFormatValidator;
/// <summary>
/// locLyncPin 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 locLyncPin;
/// <summary>
/// tbPin 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 tbPin;
/// <summary>
/// PinRegularExpressionValidator 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.RegularExpressionValidator PinRegularExpressionValidator;
/// <summary> /// <summary>
/// btnCreate control. /// btnCreate control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Button btnCreate; protected global::System.Web.UI.WebControls.Button btnCreate;
} }

View file

@ -47,11 +47,42 @@
<wsp:LyncUserSettings ID="lyncUserSettings" runat="server" /> <wsp:LyncUserSettings ID="lyncUserSettings" runat="server" />
</td> </td>
</tr> </tr>
</table> </table>
<asp:Panel runat="server" ID="pnEnterpriseVoice">
<table>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locPhoneNumber" meta:resourcekey="locPhoneNumber" Text="Phone Number:" />
</td>
<td>
<!-- <asp:TextBox runat="server" ID="tb_PhoneNumber" /> -->
<asp:dropdownlist id="ddlPhoneNumber" Runat="server" CssClass="NormalTextBox"></asp:dropdownlist>
<asp:RegularExpressionValidator ID="PhoneFormatValidator" runat="server"
ControlToValidate="ddlPhoneNumber" Display="Dynamic" ValidationGroup="Validation1" SetFocusOnError="true"
ValidationExpression="^([0-9])*$"
ErrorMessage="Must contain only numbers.">
</asp:RegularExpressionValidator>
</td>
</tr>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locLyncPin" meta:resourcekey="locLyncPin" Text="Lync Pin:" />
</td>
<td>
<asp:TextBox runat="server" ID="tbPin" />
<asp:RegularExpressionValidator ID="PinRegularExpressionValidator" runat="server"
ControlToValidate="tbPin" Display="Dynamic" ValidationGroup="Validation1" SetFocusOnError="true"
ValidationExpression="^([0-9])*$"
ErrorMessage="Must contain only numbers.">
</asp:RegularExpressionValidator>
</td>
</tr>
</table>
</asp:Panel>
<div class="FormFooterClean"> <div class="FormFooterClean">
<asp:Button runat="server" ID="btnSave" meta:resourcekey="btnSave" <asp:Button runat="server" ID="btnSave" meta:resourcekey="btnSave" ValidationGroup="Validation1"
CssClass="Button1" onclick="btnSave_Click" /> CssClass="Button1" onclick="btnSave_Click" />
</div> </div>
</div> </div>

View file

@ -31,6 +31,11 @@ using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.Providers.HostedSolution; using WebsitePanel.Providers.HostedSolution;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace WebsitePanel.Portal.Lync namespace WebsitePanel.Portal.Lync
{ {
public partial class EditLyncUser : WebsitePanelModuleBase public partial class EditLyncUser : WebsitePanelModuleBase
@ -39,7 +44,59 @@ namespace WebsitePanel.Portal.Lync
protected void Page_Load(object sender, EventArgs e) protected void Page_Load(object sender, EventArgs e)
{ {
if (!IsPostBack) if (!IsPostBack)
{
BindPhoneNumbers();
BindItems(); BindItems();
}
}
private void BindPhoneNumbers()
{
ddlPhoneNumber.Items.Add(new ListItem("<Select Phone>", ""));
PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(PanelSecurity.PackageId, IPAddressPool.PhoneNumbers);
foreach (PackageIPAddress ip in ips)
{
string phone = ip.ExternalIP;
ddlPhoneNumber.Items.Add(new ListItem(phone, phone));
}
}
protected void Page_PreRender(object sender, EventArgs e)
{
bool EnterpriseVoice = false;
WebsitePanel.Providers.HostedSolution.LyncUserPlan plan = planSelector.plan;
if (plan != null)
EnterpriseVoice = plan.EnterpriseVoice;
pnEnterpriseVoice.Visible = EnterpriseVoice;
if (!EnterpriseVoice)
{
ddlPhoneNumber.Text = "";
tbPin.Text = "";
}
if (EnterpriseVoice)
{
string[] pinPolicy = ES.Services.Lync.GetPolicyList(PanelRequest.ItemID, LyncPolicyType.Pin, "MinPasswordLength");
if (pinPolicy != null)
{
if (pinPolicy.Length > 0)
{
int MinPasswordLength = -1;
if (int.TryParse(pinPolicy[0], out MinPasswordLength))
{
PinRegularExpressionValidator.ValidationExpression = "^([0-9]){" + MinPasswordLength.ToString() + ",}$";
PinRegularExpressionValidator.ErrorMessage = "Must contain only numbers. Min. length " + MinPasswordLength.ToString();
}
}
}
}
} }
@ -54,6 +111,7 @@ namespace WebsitePanel.Portal.Lync
planSelector.planId = lyncUser.LyncUserPlanId.ToString(); planSelector.planId = lyncUser.LyncUserPlanId.ToString();
lyncUserSettings.sipAddress = lyncUser.SipAddress; lyncUserSettings.sipAddress = lyncUser.SipAddress;
Utils.SelectListItem(ddlPhoneNumber, lyncUser.LineUri);
} }
protected void btnSave_Click(object sender, EventArgs e) protected void btnSave_Click(object sender, EventArgs e)
@ -65,7 +123,7 @@ namespace WebsitePanel.Portal.Lync
LyncUserResult res = ES.Services.Lync.SetUserLyncPlan(PanelRequest.ItemID, PanelRequest.AccountID, Convert.ToInt32(planSelector.planId)); LyncUserResult res = ES.Services.Lync.SetUserLyncPlan(PanelRequest.ItemID, PanelRequest.AccountID, Convert.ToInt32(planSelector.planId));
if (res.IsSuccess && res.ErrorCodes.Count == 0) if (res.IsSuccess && res.ErrorCodes.Count == 0)
{ {
res = ES.Services.Lync.SetLyncUserGeneralSettings(PanelRequest.ItemID, PanelRequest.AccountID, lyncUserSettings.sipAddress, string.Empty); res = ES.Services.Lync.SetLyncUserGeneralSettings(PanelRequest.ItemID, PanelRequest.AccountID, lyncUserSettings.sipAddress, ddlPhoneNumber.SelectedItem.Text + ":" + tbPin.Text);
} }
if (res.IsSuccess && res.ErrorCodes.Count == 0) if (res.IsSuccess && res.ErrorCodes.Count == 0)

View file

@ -46,6 +46,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks; protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
@ -55,6 +56,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb; protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
@ -64,6 +66,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu; protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
@ -73,6 +76,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Image Image1; protected global::System.Web.UI.WebControls.Image Image1;
@ -82,6 +86,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locTitle; protected global::System.Web.UI.WebControls.Localize locTitle;
@ -91,6 +96,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Literal litDisplayName; protected global::System.Web.UI.WebControls.Literal litDisplayName;
@ -100,6 +106,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
@ -109,6 +116,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locPlanName; protected global::System.Web.UI.WebControls.Localize locPlanName;
@ -118,6 +126,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.Lync.UserControls.LyncUserPlanSelector planSelector; protected global::WebsitePanel.Portal.Lync.UserControls.LyncUserPlanSelector planSelector;
@ -127,6 +136,7 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Localize locSipAddress; protected global::System.Web.UI.WebControls.Localize locSipAddress;
@ -136,15 +146,97 @@ namespace WebsitePanel.Portal.Lync {
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.Lync.UserControls.LyncUserSettings lyncUserSettings; protected global::WebsitePanel.Portal.Lync.UserControls.LyncUserSettings lyncUserSettings;
/// <summary>
/// pnEnterpriseVoice 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.Panel pnEnterpriseVoice;
/// <summary>
/// locPhoneNumber 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 locPhoneNumber;
/// <summary>
/// tb_PhoneNumber 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 tb_PhoneNumber;
/// <summary>
/// ddlPhoneNumber control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlPhoneNumber;
/// <summary>
/// PhoneFormatValidator 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.RegularExpressionValidator PhoneFormatValidator;
/// <summary>
/// locLyncPin 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 locLyncPin;
/// <summary>
/// tbPin 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 tbPin;
/// <summary>
/// PinRegularExpressionValidator 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.RegularExpressionValidator PinRegularExpressionValidator;
/// <summary> /// <summary>
/// btnSave control. /// btnSave control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Button btnSave; protected global::System.Web.UI.WebControls.Button btnSave;
} }

View file

@ -1,2 +1,2 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LyncUserPlanSelector.ascx.cs" Inherits="WebsitePanel.Portal.Lync.UserControls.LyncUserPlanSelector" %> <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LyncUserPlanSelector.ascx.cs" Inherits="WebsitePanel.Portal.Lync.UserControls.LyncUserPlanSelector" %>
<asp:DropDownList ID="ddlPlan" runat="server" CssClass="NormalTextBox"></asp:DropDownList> <asp:DropDownList ID="ddlPlan" runat="server" CssClass="NormalTextBox" AutoPostBack="true"></asp:DropDownList>

View file

@ -39,7 +39,10 @@ namespace WebsitePanel.Portal.Lync.UserControls
public string planId public string planId
{ {
get { return ddlPlan.SelectedItem.Value; } get {
if (ddlPlan.Items.Count == 0) return "";
return ddlPlan.SelectedItem.Value;
}
set set
{ {
planToSelect = value; planToSelect = value;
@ -72,6 +75,19 @@ namespace WebsitePanel.Portal.Lync.UserControls
} }
} }
public WebsitePanel.Providers.HostedSolution.LyncUserPlan plan
{
get
{
WebsitePanel.Providers.HostedSolution.LyncUserPlan[] plans = ES.Services.Lync.GetLyncUserPlans(PanelRequest.ItemID);
foreach (WebsitePanel.Providers.HostedSolution.LyncUserPlan planitem in plans)
{
if (planitem.LyncUserPlanId.ToString() == planId) return planitem;
}
return null;
}
}
private void BindPlans() private void BindPlans()
{ {
WebsitePanel.Providers.HostedSolution.LyncUserPlan[] plans = ES.Services.Lync.GetLyncUserPlans(PanelRequest.ItemID); WebsitePanel.Providers.HostedSolution.LyncUserPlan[] plans = ES.Services.Lync.GetLyncUserPlans(PanelRequest.ItemID);

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation. // Copyright (c) 2011, Outercurve Foundation.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without modification, // Redistribution and use in source and binary forms, with or without modification,
@ -26,7 +26,6 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
@ -35,7 +34,6 @@
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace WebsitePanel.Portal.Lync.UserControls { namespace WebsitePanel.Portal.Lync.UserControls {

View file

@ -0,0 +1,11 @@
<%@ 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

@ -0,0 +1,44 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebsitePanel.Portal
{
public partial class LyncAllocatePhoneNumbers : WebsitePanelModuleBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}

View file

@ -0,0 +1,53 @@
// 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 {
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;
}
}

View file

@ -0,0 +1,30 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LyncPhoneNumbers.ascx.cs" Inherits="WebsitePanel.Portal.LyncPhoneNumbers" %>
<%@ 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" %>
<div class="FormBody">
<wsp:PackagePhoneNumbers id="webAddresses" 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="addressesQuota" runat="server" QuotaName="Web.IPAddresses" /></td>
</tr>
</table>
</asp:Panel>
</div>

View file

@ -0,0 +1,43 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebsitePanel.Portal
{
public partial class LyncPhoneNumbers : WebsitePanelModuleBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}

View file

@ -0,0 +1,93 @@
// 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 {
public partial class LyncPhoneNumbers {
/// <summary>
/// webAddresses control.
/// </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.
/// </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.
/// </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.
/// </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.
/// </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

@ -0,0 +1,100 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PhoneNumbers.ascx.cs" Inherits="WebsitePanel.Portal.PhoneNumbers" %>
<%@ Register Src="UserControls/SearchBox.ascx" TagName="SearchBox" TagPrefix="wsp" %>
<%@ Register Src="UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<script language="javascript">
function SelectAllCheckboxes(box)
{
var state = box.checked;
var elm = box.parentElement.parentElement.parentElement.parentElement.getElementsByTagName("INPUT");
for(i = 0; i < elm.length; i++)
if(elm[i].type == "checkbox" && elm[i].id != box.id && elm[i].checked != state && !elm[i].disabled)
elm[i].checked = state;
}
</script>
<wsp:SimpleMessageBox id="messageBox" runat="server" />
<div style="padding: 4px;">
<asp:Button ID="btnAddItem" runat="server" meta:resourcekey="btnAddItem" Text="Add" CssClass="Button3" OnClick="btnAddItem_Click" />
</div>
<div class="FormButtonsBar">
<div class="Right">
<wsp:SearchBox ID="searchBox" runat="server" />
</div>
</div>
<asp:GridView id="gvIPAddresses" runat="server" AutoGenerateColumns="False"
AllowSorting="True" EmptyDataText="gvIPAddresses"
CssSelectorClass="NormalGridView" DataKeyNames="AddressID"
AllowPaging="True" DataSourceID="odsIPAddresses">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkSelectAll" runat="server" onclick="javascript:SelectAllCheckboxes(this);" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" Enabled='<%# ((int)Eval("ItemID") == 0) %>' />
</ItemTemplate>
<ItemStyle Width="10px" />
</asp:TemplateField>
<asp:TemplateField SortExpression="ExternalIP" HeaderText="gvIPAddressesExternalIP">
<ItemTemplate>
<asp:hyperlink NavigateUrl='<%# EditUrl("AddressID", DataBinder.Eval(Container.DataItem, "AddressID").ToString(), "edit_phone") %>' runat="server" ID="Hyperlink2">
<%# Eval("ExternalIP") %>
</asp:hyperlink>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ServerName" SortExpression="ServerName" HeaderText="gvIPAddressesServer" ItemStyle-Wrap="false"></asp:BoundField>
<asp:TemplateField HeaderText="gvAddressesUser" meta:resourcekey="gvAddressesUser" SortExpression="Username" >
<ItemTemplate>
<%# Eval("UserName") %>&nbsp;
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="gvAddressesSpace" meta:resourcekey="gvAddressesSpace" SortExpression="PackageName" >
<ItemTemplate>
<asp:hyperlink id="lnkSpace" runat="server" NavigateUrl='<%# GetSpaceHomeUrl((int)Eval("PackageID")) %>'>
<%# Eval("PackageName") %>
</asp:hyperlink>&nbsp;
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="gvAddressesItemName" meta:resourcekey="gvAddressesItemName" DataField="ItemName" SortExpression="ItemName" />
<asp:BoundField DataField="Comments" HeaderText="gvIPAddressesComments"></asp:BoundField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="odsIPAddresses" runat="server" EnablePaging="True"
SelectCountMethod="GetIPAddressesPagedCount"
SelectMethod="GetIPAddressesPaged"
SortParameterName="sortColumn"
TypeName="WebsitePanel.Portal.IPAddressesHelper"
OnSelected="odsIPAddresses_Selected">
<SelectParameters>
<asp:Parameter Name="pool" DefaultValue="PhoneNumbers" />
<asp:Parameter Name="serverId" DefaultValue="0" />
<asp:ControlParameter Name="filterColumn" ControlID="searchBox" PropertyName="FilterColumn" />
<asp:ControlParameter Name="filterValue" ControlID="searchBox" PropertyName="FilterValue" />
</SelectParameters>
</asp:ObjectDataSource>
<div class="GridFooter">
<div class="Left">
<asp:Button id="btnEditSelected" runat="server" Text="Edit Selected..."
meta:resourcekey="btnEditSelected" CssClass="SmallButton"
CausesValidation="false" onclick="btnEditSelected_Click"></asp:Button>
<asp:Button id="btnDeleteSelected" runat="server" Text="Delete Selected"
meta:resourcekey="btnDeleteSelected" CssClass="SmallButton"
CausesValidation="false" onclick="btnDeleteSelected_Click"></asp:Button>
</div>
<div class="Right">
<asp:Label ID="lblItemsPerPage" runat="server" meta:resourcekey="lblItemsPerPage" Text="Page size:" CssClass="Normal"></asp:Label>
<asp:DropDownList ID="ddlItemsPerPage" runat="server" CssClass="NormalTextBox"
AutoPostBack="True" onselectedindexchanged="ddlItemsPerPage_SelectedIndexChanged">
<asp:ListItem Value="10">10</asp:ListItem>
<asp:ListItem Value="20">20</asp:ListItem>
<asp:ListItem Value="50">50</asp:ListItem>
<asp:ListItem Value="100">100</asp:ListItem>
</asp:DropDownList>
</div>
</div>

View file

@ -0,0 +1,157 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Web.UI.WebControls;
using System.Collections.Generic;
using WebsitePanel.Providers.Common;
using System.Text;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Portal
{
public partial class PhoneNumbers : WebsitePanelModuleBase
{
protected void Page_Load(object sender, EventArgs e)
{
// set display preferences
if (!IsPostBack)
{
// page size
gvIPAddresses.PageSize = UsersHelper.GetDisplayItemsPerPage();
ddlItemsPerPage.SelectedValue = gvIPAddresses.PageSize.ToString();
}
else
{
gvIPAddresses.PageSize = Utils.ParseInt(ddlItemsPerPage.SelectedValue, 10);
}
if (!IsPostBack)
{
searchBox.AddCriteria("ExternalIP", GetLocalizedString("SearchField.ExternalIP"));
searchBox.AddCriteria("ServerName", GetLocalizedString("SearchField.Server"));
searchBox.AddCriteria("ItemName", GetLocalizedString("SearchField.ItemName"));
searchBox.AddCriteria("Username", GetLocalizedString("SearchField.Username"));
}
}
protected void odsIPAddresses_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
ProcessException(e.Exception);
this.DisableControls = true;
e.ExceptionHandled = true;
}
}
public string GetSpaceHomeUrl(int spaceId)
{
return PortalUtils.GetSpaceHomePageUrl(spaceId);
}
protected void btnAddItem_Click(object sender, EventArgs e)
{
Response.Redirect(EditUrl("PoolID", "PhoneNumbers", "add_phone"), true);
}
protected void ddlItemsPerPage_SelectedIndexChanged(object sender, EventArgs e)
{
gvIPAddresses.PageSize = Utils.ParseInt(ddlItemsPerPage.SelectedValue, 10);
gvIPAddresses.DataBind();
}
protected void btnEditSelected_Click(object sender, EventArgs e)
{
int[] addresses = GetSelectedItems(gvIPAddresses);
if (addresses.Length == 0)
{
ShowWarningMessage("IP_EDIT_LIST_EMPTY_ERROR");
return;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < addresses.Length; i++)
{
if (i > 0) sb.Append(",");
sb.Append(addresses[i]);
}
// go to edit screen
Response.Redirect(EditUrl("Addresses", sb.ToString(), "edit_phone"), true);
}
protected void btnDeleteSelected_Click(object sender, EventArgs e)
{
int[] addresses = GetSelectedItems(gvIPAddresses);
if (addresses.Length == 0)
{
ShowWarningMessage("IP_DELETE_LIST_EMPTY_ERROR");
return;
}
try
{
// delete selected IP addresses
ResultObject res = ES.Services.Servers.DeleteIPAddresses(addresses);
if (!res.IsSuccess)
{
messageBox.ShowMessage(res, "IP_DELETE_RANGE_IP", "IP");
return;
}
// refresh grid
gvIPAddresses.DataBind();
}
catch (Exception ex)
{
ShowErrorMessage("IP_DELETE_RANGE_IP", ex);
return;
}
}
private int[] GetSelectedItems(GridView gv)
{
List<int> items = new List<int>();
for (int i = 0; i < gv.Rows.Count; i++)
{
GridViewRow row = gv.Rows[i];
CheckBox chkSelect = (CheckBox)row.FindControl("chkSelect");
if (chkSelect.Checked)
items.Add((int)gv.DataKeys[i].Value);
}
return items.ToArray();
}
}
}

View file

@ -0,0 +1,134 @@
// 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 {
public partial class PhoneNumbers {
/// <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>
/// btnAddItem 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 btnAddItem;
/// <summary>
/// searchBox control.
/// </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>
/// gvIPAddresses 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.GridView gvIPAddresses;
/// <summary>
/// odsIPAddresses 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.ObjectDataSource odsIPAddresses;
/// <summary>
/// btnEditSelected 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 btnEditSelected;
/// <summary>
/// btnDeleteSelected 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 btnDeleteSelected;
/// <summary>
/// lblItemsPerPage 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.Label lblItemsPerPage;
/// <summary>
/// ddlItemsPerPage control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlItemsPerPage;
}
}

View file

@ -0,0 +1,43 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PhoneNumbersAddPhoneNumber.ascx.cs" Inherits="WebsitePanel.Portal.PhoneNumbersAddPhoneNumber" %>
<%@ Register Src="UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<div class="FormBody">
<wsp:SimpleMessageBox id="messageBox" runat="server" />
<asp:ValidationSummary ID="validatorsSummary" runat="server"
ValidationGroup="EditAddress" ShowMessageBox="True" ShowSummary="False" />
<asp:CustomValidator ID="consistentAddresses" runat="server" ErrorMessage="You must not mix IPv4 and IPv6 addresses." ValidationGroup="EditAddress" Display="dynamic" ServerValidate="CheckIPAddresses" />
<table cellspacing="0" cellpadding="3">
<tr>
<td><asp:Localize ID="locServer" runat="server" meta:resourcekey="locServer" Text="Server:"></asp:Localize></td>
<td>
<asp:dropdownlist id="ddlServer" CssClass="NormalTextBox" runat="server" DataTextField="ServerName" DataValueField="ServerID"></asp:dropdownlist>
</td>
</tr>
<tr id="PhoneNumbersRow" runat="server">
<td><asp:Localize ID="Localize1" runat="server" meta:resourcekey="lblPhoneNumbers" Text="Phone Numbers:"></asp:Localize></td>
<td>
<asp:TextBox id="startPhone" runat="server" Width="260px" MaxLength="45" CssClass="NormalTextBox"/>
<asp:RequiredFieldValidator ID="requireStartPhoneValidator" runat="server" meta:resourcekey="requireStartPhoneValidator"
ControlToValidate="startPhone" SetFocusOnError="true" Text="*" Enabled="false" ValidationGroup="EditAddress" ErrorMessage="Enter Phone Number" />
&nbsp;<asp:Localize ID="Localize2" runat="server" meta:resourcekey="locTo" Text="to"></asp:Localize>&nbsp;
<asp:TextBox id="endPhone" runat="server" ValidationGroup="EditAddress" Width="260px" MaxLength="45" CssClass="NormalTextBox"/>
</td>
</tr>
<tr>
<td><asp:Localize ID="lblComments" runat="server" meta:resourcekey="lblComments" Text="Comments:"></asp:Localize></td>
<td class="NormalBold"><asp:textbox id="txtComments" Width="250px" CssClass="NormalTextBox" runat="server" Rows="3" TextMode="MultiLine"></asp:textbox></td>
</tr>
</table>
</div>
<div class="FormFooter">
<asp:Button ID="btnAdd" runat="server" meta:resourcekey="btnAdd" CssClass="Button1" OnClick="btnAdd_Click" Text="Add" ValidationGroup="EditAddress" />
<asp:Button ID="btnCancel" runat="server" meta:resourcekey="btnCancel" CssClass="Button1" Text="Cancel" CausesValidation="False" OnClick="btnCancel_Click" />
</div>

View file

@ -0,0 +1,173 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.Providers.Common;
namespace WebsitePanel.Portal
{
public partial class PhoneNumbersAddPhoneNumber : WebsitePanelModuleBase
{
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// bind dropdowns
try
{
BindServers();
// set server if found in request
if (PanelRequest.ServerId != 0)
Utils.SelectListItem(ddlServer, PanelRequest.ServerId);
}
catch (Exception ex)
{
ShowErrorMessage("IP_ADD_INIT_FORM", ex);
return;
}
ToggleControls();
}
}
private void BindServers()
{
try
{
ddlServer.DataSource = ES.Services.Servers.GetServers();
ddlServer.DataBind();
}
catch (Exception ex)
{
Response.Write(ex);
}
// add "select" item
ddlServer.Items.Insert(0, new ListItem(GetLocalizedString("Text.NotAssigned"), ""));
}
protected void btnAdd_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
int serverId = Utils.ParseInt(ddlServer.SelectedValue, 0);
IPAddressPool pool = IPAddressPool.PhoneNumbers;
string comments = txtComments.Text.Trim();
string start;
string end;
start = startPhone.Text;
end = endPhone.Text;
// add ip address
if (end != "" || start.Contains("/"))
{
string errorKey = "IP_ADD_PHONE_RANGE";
try
{
// add IP range
ResultObject res = ES.Services.Servers.AddIPAddressesRange(pool, serverId, start, end,
"", "", "", comments);
if (!res.IsSuccess)
{
// show error
messageBox.ShowMessage(res, errorKey, "IP");
return;
}
}
catch (Exception ex)
{
ShowErrorMessage(errorKey, ex);
return;
}
}
else
{
string errorKey = "IP_ADD_PHONE";
// add single IP
try
{
IntResult res = ES.Services.Servers.AddIPAddress(pool, serverId, start,
"", "", "", comments);
if (!res.IsSuccess)
{
messageBox.ShowMessage(res, errorKey, "IP");
return;
}
}
catch (Exception ex)
{
ShowErrorMessage(errorKey, ex);
return;
}
}
// Redirect back to the portal home page
RedirectBack();
}
}
protected void btnCancel_Click(object sender, EventArgs e)
{
// Redirect back to the portal home page
RedirectBack();
}
private void RedirectBack()
{
Response.Redirect(NavigateURL("PoolID", "PhoneNumbers"));
}
protected void ddlPools_SelectedIndexChanged(object sender, EventArgs e)
{
ToggleControls();
}
private void ToggleControls()
{
requireStartPhoneValidator.Enabled = true;
}
}
}

View file

@ -0,0 +1,194 @@
// 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 {
public partial class PhoneNumbersAddPhoneNumber {
/// <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>
/// consistentAddresses 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.CustomValidator consistentAddresses;
/// <summary>
/// locServer 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 locServer;
/// <summary>
/// ddlServer control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlServer;
/// <summary>
/// PhoneNumbersRow 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 PhoneNumbersRow;
/// <summary>
/// Localize1 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 Localize1;
/// <summary>
/// startPhone 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 startPhone;
/// <summary>
/// requireStartPhoneValidator 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 requireStartPhoneValidator;
/// <summary>
/// Localize2 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 Localize2;
/// <summary>
/// endPhone 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 endPhone;
/// <summary>
/// lblComments 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 lblComments;
/// <summary>
/// txtComments 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 txtComments;
/// <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

@ -0,0 +1,38 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PhoneNumbersEditPhoneNumber.ascx.cs" Inherits="WebsitePanel.Portal.PhoneNumbersEditPhoneNumber" %>
<%@ Register Src="UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<div class="FormBody">
<wsp:SimpleMessageBox id="messageBox" runat="server" />
<asp:ValidationSummary ID="validatorsSummary" runat="server"
ValidationGroup="EditAddress" ShowMessageBox="True" ShowSummary="False" />
<table cellspacing="0" cellpadding="3">
<tr>
<td><asp:Localize ID="locServer" runat="server" meta:resourcekey="locServer" Text="Server:"></asp:Localize></td>
<td>
<asp:dropdownlist id="ddlServer" CssClass="NormalTextBox" runat="server" DataTextField="ServerName" DataValueField="ServerID"></asp:dropdownlist>
</td>
</tr>
<tr id="PhoneNumbersRow" runat="server">
<td><asp:Localize ID="Localize1" runat="server" meta:resourcekey="lblPhoneNumbers" Text="Phone Numbers:"></asp:Localize></td>
<td>
<asp:TextBox id="Phone" runat="server" Width="260px" MaxLength="45" CssClass="NormalTextBox"/>
<asp:RequiredFieldValidator ID="requireStartPhoneValidator" runat="server" meta:resourcekey="requireStartPhoneValidator"
ControlToValidate="Phone" SetFocusOnError="true" Text="*" Enabled="false" ValidationGroup="EditAddress" ErrorMessage="Enter Phone Number" />
</td>
</tr>
<tr>
<td><asp:Localize ID="lblComments" runat="server" meta:resourcekey="lblComments" Text="Comments:"></asp:Localize></td>
<td><asp:textbox id="txtComments" Width="300px" CssClass="NormalTextBox" runat="server" Rows="3" TextMode="MultiLine"></asp:textbox></td>
</tr>
</table>
</div>
<div class="FormFooter">
<asp:Button ID="btnUpdate" runat="server" meta:resourcekey="btnUpdate" CssClass="Button1" Text="Update" OnClick="btnUpdate_Click" ValidationGroup="EditAddress" />
<asp:Button ID="btnCancel" runat="server" meta:resourcekey="btnCancel" CssClass="Button1" Text="Cancel" CausesValidation="False" OnClick="btnCancel_Click" />
</div>

View file

@ -0,0 +1,176 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.Common;
namespace WebsitePanel.Portal
{
public partial class PhoneNumbersEditPhoneNumber : WebsitePanelModuleBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
try
{
// bind dropdowns
BindServers();
// bind IP
BindPhone();
}
catch (Exception ex)
{
ShowErrorMessage("IP_GET_IP", ex);
return;
}
}
}
private void BindPhone()
{
int addressId = PanelRequest.AddressID;
// check if multiple editing
if (!String.IsNullOrEmpty(PanelRequest.Addresses))
{
string[] ids = PanelRequest.Addresses.Split(',');
addressId = Utils.ParseInt(ids[0], 0);
}
// bind first address
IPAddressInfo addr = ES.Services.Servers.GetIPAddress(addressId);
if (addr != null)
{
Utils.SelectListItem(ddlServer, addr.ServerId);
Phone.Text = addr.ExternalIP;
txtComments.Text = addr.Comments;
ToggleControls();
}
else
{
// exit
RedirectBack();
}
}
private void BindServers()
{
ddlServer.DataSource = ES.Services.Servers.GetServers();
ddlServer.DataBind();
ddlServer.Items.Insert(0, new ListItem(GetLocalizedString("Text.NotAssigned"), ""));
}
private void RedirectBack()
{
Response.Redirect(NavigateURL("PoolID", "PhoneNumbers"));
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
try
{
int serverId = Utils.ParseInt(ddlServer.SelectedValue, 0);
IPAddressPool pool = IPAddressPool.PhoneNumbers;
ResultObject res = null;
// update single IP address
if (!String.IsNullOrEmpty(PanelRequest.Addresses))
{
// update multiple IPs
string[] ids = PanelRequest.Addresses.Split(',');
int[] addresses = new int[ids.Length];
for (int i = 0; i < ids.Length; i++)
addresses[i] = Utils.ParseInt(ids[i], 0);
res = ES.Services.Servers.UpdateIPAddresses(addresses,
pool, serverId, "", "", txtComments.Text.Trim());
}
else
{
string address = Phone.Text;
// update single IP
res = ES.Services.Servers.UpdateIPAddress(PanelRequest.AddressID,
pool, serverId, address, "", "", "", txtComments.Text.Trim());
}
if (!res.IsSuccess)
{
messageBox.ShowMessage(res, "IP_UPDATE_IP", "IP");
return;
}
// Redirect back to the portal home page
RedirectBack();
}
catch (Exception ex)
{
ShowErrorMessage("IP_UPDATE_IP", ex);
return;
}
}
}
protected void btnCancel_Click(object sender, EventArgs e)
{
// Redirect back to the portal home page
RedirectBack();
}
protected void ddlPools_SelectedIndexChanged(object sender, EventArgs e)
{
ToggleControls();
}
private void ToggleControls()
{
bool multipleEdit = !String.IsNullOrEmpty(PanelRequest.Addresses);
PhoneNumbersRow.Visible = !multipleEdit;
requireStartPhoneValidator.Enabled = !multipleEdit;
}
}
}

View file

@ -0,0 +1,164 @@
// 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 {
public partial class PhoneNumbersEditPhoneNumber {
/// <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>
/// locServer 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 locServer;
/// <summary>
/// ddlServer control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlServer;
/// <summary>
/// PhoneNumbersRow 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 PhoneNumbersRow;
/// <summary>
/// Localize1 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 Localize1;
/// <summary>
/// Phone 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 Phone;
/// <summary>
/// requireStartPhoneValidator 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 requireStartPhoneValidator;
/// <summary>
/// lblComments 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 lblComments;
/// <summary>
/// txtComments 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 txtComments;
/// <summary>
/// btnUpdate 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 btnUpdate;
/// <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

@ -1,10 +1,39 @@
//------------------------------------------------------------------------------ // Copyright (c) 2011, Outercurve Foundation.
// <автоматически создаваемое> // All rights reserved.
// Этот код создан программой.
// //
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае // Redistribution and use in source and binary forms, with or without modification,
// повторной генерации кода. // are permitted provided that the following conditions are met:
// </автоматически создаваемое> //
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace WebsitePanel.Portal.ProviderControls { namespace WebsitePanel.Portal.ProviderControls {
@ -13,83 +42,92 @@ namespace WebsitePanel.Portal.ProviderControls {
public partial class CRM2011_Settings { public partial class CRM2011_Settings {
/// <summary> /// <summary>
/// txtSqlServer элемент управления. /// txtSqlServer control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtSqlServer; protected global::System.Web.UI.WebControls.TextBox txtSqlServer;
/// <summary> /// <summary>
/// RequiredFieldValidator1 элемент управления. /// RequiredFieldValidator1 control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1; protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1;
/// <summary> /// <summary>
/// txtReportingService элемент управления. /// txtReportingService control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtReportingService; protected global::System.Web.UI.WebControls.TextBox txtReportingService;
/// <summary> /// <summary>
/// txtDomainName элемент управления. /// txtDomainName control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtDomainName; protected global::System.Web.UI.WebControls.TextBox txtDomainName;
/// <summary> /// <summary>
/// RequiredFieldValidator2 элемент управления. /// RequiredFieldValidator2 control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator2; protected global::System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator2;
/// <summary> /// <summary>
/// ddlSchema элемент управления. /// ddlSchema control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlSchema; protected global::System.Web.UI.WebControls.DropDownList ddlSchema;
/// <summary> /// <summary>
/// ddlCrmIpAddress элемент управления. /// ddlCrmIpAddress control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.SelectIPAddress ddlCrmIpAddress; protected global::WebsitePanel.Portal.SelectIPAddress ddlCrmIpAddress;
/// <summary> /// <summary>
/// txtPort элемент управления. /// txtPort control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtPort; protected global::System.Web.UI.WebControls.TextBox txtPort;
/// <summary> /// <summary>
/// txtAppRootDomain элемент управления. /// txtAppRootDomain control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Автоматически создаваемое поле. /// Auto-generated field.
/// Для изменения переместите объявление поля из файла конструктора в файл кода программной части. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtAppRootDomain; protected global::System.Web.UI.WebControls.TextBox txtAppRootDomain;
} }

View file

@ -40,6 +40,7 @@
</Columns> </Columns>
</asp:GridView> </asp:GridView>
<br /> <br />
<wsp:CollapsiblePanel id="secPlan" runat="server" <wsp:CollapsiblePanel id="secPlan" runat="server"
TargetControlID="Plan" meta:resourcekey="secPlan" Text="Plan"> TargetControlID="Plan" meta:resourcekey="secPlan" Text="Plan">
</wsp:CollapsiblePanel> </wsp:CollapsiblePanel>
@ -59,7 +60,8 @@
<br /> <br />
</asp:Panel> </asp:Panel>
<wsp:CollapsiblePanel id="secPlanFeatures" runat="server" TargetControlID="PlanFeatures" meta:resourcekey="secPlanFeatures" Text="Plan Features"> <wsp:CollapsiblePanel id="secPlanFeatures" runat="server"
TargetControlID="PlanFeatures" meta:resourcekey="secPlanFeatures" Text="Plan Features">
</wsp:CollapsiblePanel> </wsp:CollapsiblePanel>
<asp:Panel ID="PlanFeatures" runat="server" Height="0" style="overflow:hidden;"> <asp:Panel ID="PlanFeatures" runat="server" Height="0" style="overflow:hidden;">
<table> <table>
@ -73,11 +75,6 @@
<asp:CheckBox ID="chkMobility" runat="server" meta:resourcekey="chkMobility" Text="Mobility"></asp:CheckBox> <asp:CheckBox ID="chkMobility" runat="server" meta:resourcekey="chkMobility" Text="Mobility"></asp:CheckBox>
</td> </td>
</tr> </tr>
<tr>
<td>
<asp:CheckBox ID="chkFederation" runat="server" meta:resourcekey="chkFederation" Text="Federation"></asp:CheckBox>
</td>
</tr>
<tr> <tr>
<td> <td>
<asp:CheckBox ID="chkConferencing" runat="server" meta:resourcekey="chkConferencing" Text="Conferencing"></asp:CheckBox> <asp:CheckBox ID="chkConferencing" runat="server" meta:resourcekey="chkConferencing" Text="Conferencing"></asp:CheckBox>
@ -92,6 +89,136 @@
<br /> <br />
</asp:Panel> </asp:Panel>
<wsp:CollapsiblePanel id="secPlanFeaturesFederation" runat="server"
TargetControlID="PlanFeaturesFederation" meta:resourcekey="secPlanFeaturesFederation" Text="Federation">
</wsp:CollapsiblePanel>
<asp:Panel ID="PlanFeaturesFederation" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td>
<asp:CheckBox ID="chkFederation" runat="server" meta:resourcekey="chkFederation" Text="Federation"></asp:CheckBox>
</td>
</tr>
<tr>
<td>
<asp:CheckBox ID="chkRemoteUserAccess" runat="server" meta:resourcekey="chkRemoteUserAccess" Text="Remote User access"></asp:CheckBox>
</td>
</tr>
<tr>
<td>
<asp:CheckBox ID="chkPublicIMConnectivity" runat="server" meta:resourcekey="chkPublicIMConnectivity" Text="Public IM Connectivity"></asp:CheckBox>
</td>
</tr>
</table>
<br />
</asp:Panel>
<wsp:CollapsiblePanel id="secPlanFeaturesArchiving" runat="server"
TargetControlID="PlanFeaturesArchiving" meta:resourcekey="secPlanFeaturesArchiving" Text="Archiving">
</wsp:CollapsiblePanel>
<asp:Panel ID="PlanFeaturesArchiving" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locArchivingPolicy" meta:resourcekey="locArchivingPolicy" Text="Archiving Policy:" />
</td>
<td>
<asp:DropDownList ID="ddArchivingPolicy" runat="server" CssClass="TextBox200"></asp:DropDownList>
</td>
</tr>
</table>
<br />
</asp:Panel>
<wsp:CollapsiblePanel id="secPlanFeaturesMeeting" runat="server"
TargetControlID="PlanFeaturesMeeting" meta:resourcekey="secPlanFeaturesMeeting" Text="Meeting">
</wsp:CollapsiblePanel>
<asp:Panel ID="PlanFeaturesMeeting" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td>
<asp:CheckBox ID="chkAllowOrganizeMeetingsWithExternalAnonymous" runat="server" meta:resourcekey="chkAllowOrganizeMeetingsWithExternalAnonymous" Text="Allow organize meetings with external anonymous participants"></asp:CheckBox>
</td>
</tr>
</table>
<br />
</asp:Panel>
<wsp:CollapsiblePanel id="secPlanFeaturesTelephony" runat="server"
TargetControlID="PlanFeaturesTelephony" meta:resourcekey="secPlanFeaturesTelephony" Text="Telephony">
</wsp:CollapsiblePanel>
<asp:Panel ID="PlanFeaturesTelephony" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locTelephony" meta:resourcekey="locTelephony" Text="Telephony :" />
</td>
<td>
<asp:DropDownList ID="ddTelephony" runat="server" AutoPostBack="True">
<asp:ListItem Value="0" Text="Audio/Video disabled" meta:resourcekey="ddlTelephonyDisabled" />
<asp:ListItem Value="1" Text="PC-to-PC only" meta:resourcekey="ddlTelephonyPCtoPCOnly" />
<asp:ListItem Value="2" Text="Enterprise voice" meta:resourcekey="ddlTelephonyEnterpriseVoice" />
<asp:ListItem Value="3" Text="Remote call control" meta:resourcekey="ddlTelephonyRemoteCallControl" />
<asp:ListItem Value="4" Text="Remote call control only" meta:resourcekey="ddlTelephonyRemoteCallControlOnly" />
</asp:DropDownList>
</td>
</tr>
</table>
<asp:Panel runat="server" ID="pnEnterpriseVoice">
<table>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locTelephonyProvider" meta:resourcekey="locTelephonyProvider" Text="Telephony Provider :" />
</td>
<td>
<asp:TextBox ID="tbTelephoneProvider" runat="server"></asp:TextBox>
<asp:Button runat="server" ID="btnAccept" Text="Accept" OnClick="btnAccept_Click" OnClientClick="ShowProgressDialog('Loading...');" ValidationGroup="Accept"/>
<asp:RequiredFieldValidator id="AcceptRequiredValidator" runat="server" ErrorMessage="Please enter provider name"
ControlToValidate="tbTelephoneProvider" Display="Dynamic" ValidationGroup="Accept" SetFocusOnError="true"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locDialPlan" meta:resourcekey="locDialPlan" Text="Dial Plan :" />
</td>
<td>
<asp:DropDownList ID="ddTelephonyDialPlanPolicy" runat="server"></asp:DropDownList>
</td>
</tr>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locVoicePolicy" meta:resourcekey="locVoicePolicy" Text="Voice Policy :" />
</td>
<td>
<asp:DropDownList ID="ddTelephonyVoicePolicy" runat="server"></asp:DropDownList>
</td>
</tr>
</table>
</asp:Panel>
<asp:Panel runat="server" ID="pnServerURI">
<table>
<tr>
<td class="FormLabel150">
<asp:Localize runat="server" ID="locServerURI" meta:resourcekey="locServerURI" Text="Server URI :" />
</td>
<td>
<asp:TextBox ID="tbServerURI" runat="server"></asp:TextBox>
</td>
</tr>
</table>
</asp:Panel>
<br />
</asp:Panel>
<%-- Disable because not used
<wsp:CollapsiblePanel id="secEnterpriseVoice" runat="server" <wsp:CollapsiblePanel id="secEnterpriseVoice" runat="server"
TargetControlID="EnterpriseVoice" meta:resourcekey="secEnterpriseVoice" Text="Enterprise Voice Policy"> TargetControlID="EnterpriseVoice" meta:resourcekey="secEnterpriseVoice" Text="Enterprise Voice Policy">
</wsp:CollapsiblePanel> </wsp:CollapsiblePanel>
@ -128,6 +255,7 @@
</table> </table>
<br /> <br />
</asp:Panel> </asp:Panel>
--%>
<br /> <br />

View file

@ -55,6 +55,52 @@ namespace WebsitePanel.Portal
internal static List<LyncUserPlan> list; internal static List<LyncUserPlan> list;
protected void ddArchivingPolicyUpdate()
{
string[] archivePolicy = ES.Services.Lync.GetPolicyList(-1, LyncPolicyType.Archiving, null);
if (archivePolicy != null)
{
foreach (string policy in archivePolicy)
{
if (policy.ToLower() == "global") continue;
string txt = policy.Replace("Tag:", "");
if (ddArchivingPolicy.Items.FindByValue(policy)==null)
ddArchivingPolicy.Items.Add(new System.Web.UI.WebControls.ListItem(txt, policy));
}
}
}
protected void Page_PreRender(object sender, EventArgs e)
{
if (ddArchivingPolicy.Items.Count == 0)
ddArchivingPolicyUpdate();
chkEnterpriseVoice.Enabled = false;
chkEnterpriseVoice.Checked = false;
pnEnterpriseVoice.Visible = false;
pnServerURI.Visible = false;
switch (ddTelephony.SelectedIndex)
{
case 1:
break;
case 2:
pnEnterpriseVoice.Visible = true;
chkEnterpriseVoice.Checked = true;
break;
case 3:
pnServerURI.Visible = true;
break;
case 4:
pnServerURI.Visible = true;
break;
}
}
public void BindSettings(UserSettings settings) public void BindSettings(UserSettings settings)
{ {
@ -113,8 +159,7 @@ namespace WebsitePanel.Portal
} }
} }
Providers.HostedSolution.LyncUserPlan plan = new Providers.HostedSolution.LyncUserPlan();
LyncUserPlan plan = new LyncUserPlan();
plan.LyncUserPlanName = txtPlan.Text; plan.LyncUserPlanName = txtPlan.Text;
plan.IsDefault = false; plan.IsDefault = false;
@ -124,24 +169,21 @@ namespace WebsitePanel.Portal
plan.Conferencing = chkConferencing.Checked; plan.Conferencing = chkConferencing.Checked;
plan.EnterpriseVoice = chkEnterpriseVoice.Checked; plan.EnterpriseVoice = chkEnterpriseVoice.Checked;
if (!plan.EnterpriseVoice)
{
plan.VoicePolicy = LyncVoicePolicyType.None;
}
else
{
if (chkEmergency.Checked)
plan.VoicePolicy = LyncVoicePolicyType.Emergency;
else if (chkNational.Checked)
plan.VoicePolicy = LyncVoicePolicyType.National;
else if (chkMobile.Checked)
plan.VoicePolicy = LyncVoicePolicyType.Mobile;
else if (chkInternational.Checked)
plan.VoicePolicy = LyncVoicePolicyType.International;
else
plan.VoicePolicy = LyncVoicePolicyType.None; plan.VoicePolicy = LyncVoicePolicyType.None;
} plan.RemoteUserAccess = chkRemoteUserAccess.Checked;
plan.PublicIMConnectivity = chkPublicIMConnectivity.Checked;
plan.AllowOrganizeMeetingsWithExternalAnonymous = chkAllowOrganizeMeetingsWithExternalAnonymous.Checked;
plan.Telephony = ddTelephony.SelectedIndex;
plan.ServerURI = tbServerURI.Text;
plan.ArchivePolicy = ddArchivingPolicy.SelectedValue;
plan.TelephonyDialPlanPolicy = ddTelephonyDialPlanPolicy.SelectedValue;
plan.TelephonyVoicePolicy = ddTelephonyVoicePolicy.SelectedValue;
if (PanelSecurity.SelectedUser.Role == UserRole.Administrator) if (PanelSecurity.SelectedUser.Role == UserRole.Administrator)
plan.LyncUserPlanType = (int)LyncUserPlanType.Administrator; plan.LyncUserPlanType = (int)LyncUserPlanType.Administrator;
@ -234,7 +276,7 @@ namespace WebsitePanel.Portal
} }
catch (Exception) catch (Exception)
{ {
messageBox.ShowErrorMessage("EXCHANGE_DELETE_MAILBOXPLAN"); messageBox.ShowErrorMessage("LYNC_DELETE_PLAN");
} }
BindPlans(); BindPlans();
@ -261,7 +303,6 @@ namespace WebsitePanel.Portal
orgs = ES.Services.ExchangeServer.GetExchangeOrganizations(1, false); orgs = ES.Services.ExchangeServer.GetExchangeOrganizations(1, false);
} }
plan = ES.Services.Lync.GetLyncUserPlan(orgs[0].Id, planId); plan = ES.Services.Lync.GetLyncUserPlan(orgs[0].Id, planId);
txtPlan.Text = plan.LyncUserPlanName; txtPlan.Text = plan.LyncUserPlanName;
@ -271,26 +312,35 @@ namespace WebsitePanel.Portal
chkConferencing.Checked = plan.Conferencing; chkConferencing.Checked = plan.Conferencing;
chkMobility.Checked = plan.Mobility; chkMobility.Checked = plan.Mobility;
chkEnterpriseVoice.Checked = plan.EnterpriseVoice; chkEnterpriseVoice.Checked = plan.EnterpriseVoice;
switch (plan.VoicePolicy)
chkRemoteUserAccess.Checked = plan.RemoteUserAccess;
chkPublicIMConnectivity.Checked = plan.PublicIMConnectivity;
chkAllowOrganizeMeetingsWithExternalAnonymous.Checked = plan.AllowOrganizeMeetingsWithExternalAnonymous;
ddTelephony.SelectedIndex = plan.Telephony;
tbServerURI.Text = plan.ServerURI;
string planArchivePolicy = "";
if (plan.ArchivePolicy != null) planArchivePolicy = plan.ArchivePolicy;
string planTelephonyDialPlanPolicy = "";
if (plan.TelephonyDialPlanPolicy != null) planTelephonyDialPlanPolicy = plan.TelephonyDialPlanPolicy;
string planTelephonyVoicePolicy = "";
if (plan.TelephonyVoicePolicy != null) planTelephonyVoicePolicy = plan.TelephonyVoicePolicy;
ddArchivingPolicyUpdate();
ListItem li = ddArchivingPolicy.Items.FindByValue(planArchivePolicy);
if (li == null)
{ {
case LyncVoicePolicyType.None: li = new System.Web.UI.WebControls.ListItem(planArchivePolicy.Replace("Tag:", ""), planArchivePolicy);
break; ddArchivingPolicy.Items.Add(li);
case LyncVoicePolicyType.Emergency:
chkEmergency.Checked = true;
break;
case LyncVoicePolicyType.National:
chkNational.Checked = true;
break;
case LyncVoicePolicyType.Mobile:
chkMobile.Checked = true;
break;
case LyncVoicePolicyType.International:
chkInternational.Checked = true;
break;
default:
chkNone.Checked = true;
break;
} }
ddArchivingPolicy.SelectedIndex = ddArchivingPolicy.Items.IndexOf(li);
ddTelephonyDialPlanPolicy.Items.Clear();
ddTelephonyDialPlanPolicy.Items.Add(new System.Web.UI.WebControls.ListItem(planTelephonyDialPlanPolicy.Replace("Tag:", ""), planTelephonyDialPlanPolicy));
ddTelephonyVoicePolicy.Items.Clear();
ddTelephonyVoicePolicy.Items.Add(new System.Web.UI.WebControls.ListItem(planTelephonyVoicePolicy.Replace("Tag:", ""), planTelephonyVoicePolicy));
btnUpdatePlan.Enabled = (string.IsNullOrEmpty(txtPlan.Text)) ? false : true; btnUpdatePlan.Enabled = (string.IsNullOrEmpty(txtPlan.Text)) ? false : true;
@ -298,7 +348,6 @@ namespace WebsitePanel.Portal
} }
catch (Exception) catch (Exception)
{ {
messageBox.ShowErrorMessage("EXCHANGE_DELETE_MAILBOXPLAN");
} }
BindPlans(); BindPlans();
@ -375,7 +424,6 @@ namespace WebsitePanel.Portal
plan = new Providers.HostedSolution.LyncUserPlan(); plan = new Providers.HostedSolution.LyncUserPlan();
plan.LyncUserPlanId = (int)ViewState["LyncUserPlanID"]; plan.LyncUserPlanId = (int)ViewState["LyncUserPlanID"];
plan.LyncUserPlanName = txtPlan.Text; plan.LyncUserPlanName = txtPlan.Text;
plan.IsDefault = false; plan.IsDefault = false;
@ -385,24 +433,22 @@ namespace WebsitePanel.Portal
plan.Conferencing = chkConferencing.Checked; plan.Conferencing = chkConferencing.Checked;
plan.EnterpriseVoice = chkEnterpriseVoice.Checked; plan.EnterpriseVoice = chkEnterpriseVoice.Checked;
if (!plan.EnterpriseVoice)
{
plan.VoicePolicy = LyncVoicePolicyType.None;
}
else
{
if (chkEmergency.Checked)
plan.VoicePolicy = LyncVoicePolicyType.Emergency;
else if (chkNational.Checked)
plan.VoicePolicy = LyncVoicePolicyType.National;
else if (chkMobile.Checked)
plan.VoicePolicy = LyncVoicePolicyType.Mobile;
else if (chkInternational.Checked)
plan.VoicePolicy = LyncVoicePolicyType.International;
else
plan.VoicePolicy = LyncVoicePolicyType.None; plan.VoicePolicy = LyncVoicePolicyType.None;
} plan.RemoteUserAccess = chkRemoteUserAccess.Checked;
plan.PublicIMConnectivity = chkPublicIMConnectivity.Checked;
plan.AllowOrganizeMeetingsWithExternalAnonymous = chkAllowOrganizeMeetingsWithExternalAnonymous.Checked;
plan.Telephony = ddTelephony.SelectedIndex;
plan.ServerURI = tbServerURI.Text;
plan.ArchivePolicy = ddArchivingPolicy.SelectedValue;
plan.TelephonyDialPlanPolicy = ddTelephonyDialPlanPolicy.SelectedValue;
plan.TelephonyVoicePolicy = ddTelephonyVoicePolicy.SelectedValue;
if (PanelSecurity.SelectedUser.Role == UserRole.Administrator) if (PanelSecurity.SelectedUser.Role == UserRole.Administrator)
plan.LyncUserPlanType = (int)LyncUserPlanType.Administrator; plan.LyncUserPlanType = (int)LyncUserPlanType.Administrator;
@ -417,11 +463,11 @@ namespace WebsitePanel.Portal
if (result < 0) if (result < 0)
{ {
messageBox.ShowErrorMessage("EXCHANGE_UPDATEPLANS"); messageBox.ShowErrorMessage("LYNC_UPDATEPLANS");
} }
else else
{ {
messageBox.ShowSuccessMessage("EXCHANGE_UPDATEPLANS"); messageBox.ShowSuccessMessage("LYNC_UPDATEPLANS");
} }
} }
@ -503,6 +549,39 @@ namespace WebsitePanel.Portal
BindPlans(); BindPlans();
} }
protected void btnAccept_Click(object sender, EventArgs e)
{
string name = tbTelephoneProvider.Text;
if (string.IsNullOrEmpty(name)) return;
ddTelephonyDialPlanPolicy.Items.Clear();
string[] dialPlan = ES.Services.Lync.GetPolicyList(-1, LyncPolicyType.DialPlan, name);
if (dialPlan != null)
{
foreach (string policy in dialPlan)
{
if (policy.ToLower() == "global") continue;
string txt = policy.Replace("Tag:", "");
ddTelephonyDialPlanPolicy.Items.Add(new System.Web.UI.WebControls.ListItem(txt, policy));
}
}
ddTelephonyVoicePolicy.Items.Clear();
string[] voicePolicy = ES.Services.Lync.GetPolicyList(-1, LyncPolicyType.Voice, name);
if (voicePolicy != null)
{
foreach (string policy in voicePolicy)
{
if (policy.ToLower() == "global") continue;
string txt = policy.Replace("Tag:", "");
ddTelephonyVoicePolicy.Items.Add(new System.Web.UI.WebControls.ListItem(txt, policy));
}
}
}
} }
} }

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation. // Copyright (c) 2011, Outercurve Foundation.
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without modification, // Redistribution and use in source and binary forms, with or without modification,
@ -34,7 +34,6 @@
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace WebsitePanel.Portal { namespace WebsitePanel.Portal {
@ -139,15 +138,6 @@ namespace WebsitePanel.Portal {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.CheckBox chkMobility; protected global::System.Web.UI.WebControls.CheckBox chkMobility;
/// <summary>
/// chkFederation control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.CheckBox chkFederation;
/// <summary> /// <summary>
/// chkConferencing control. /// chkConferencing control.
/// </summary> /// </summary>
@ -167,67 +157,256 @@ namespace WebsitePanel.Portal {
protected global::System.Web.UI.WebControls.CheckBox chkEnterpriseVoice; protected global::System.Web.UI.WebControls.CheckBox chkEnterpriseVoice;
/// <summary> /// <summary>
/// secEnterpriseVoice control. /// secPlanFeaturesFederation control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secEnterpriseVoice; protected global::WebsitePanel.Portal.CollapsiblePanel secPlanFeaturesFederation;
/// <summary> /// <summary>
/// EnterpriseVoice control. /// PlanFeaturesFederation control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.Panel EnterpriseVoice; protected global::System.Web.UI.WebControls.Panel PlanFeaturesFederation;
/// <summary> /// <summary>
/// chkNone control. /// chkFederation control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RadioButton chkNone; protected global::System.Web.UI.WebControls.CheckBox chkFederation;
/// <summary> /// <summary>
/// chkEmergency control. /// chkRemoteUserAccess control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RadioButton chkEmergency; protected global::System.Web.UI.WebControls.CheckBox chkRemoteUserAccess;
/// <summary> /// <summary>
/// chkNational control. /// chkPublicIMConnectivity control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RadioButton chkNational; protected global::System.Web.UI.WebControls.CheckBox chkPublicIMConnectivity;
/// <summary> /// <summary>
/// chkMobile control. /// secPlanFeaturesArchiving control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RadioButton chkMobile; protected global::WebsitePanel.Portal.CollapsiblePanel secPlanFeaturesArchiving;
/// <summary> /// <summary>
/// chkInternational control. /// PlanFeaturesArchiving control.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Auto-generated field. /// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file. /// To modify move field declaration from designer file to code-behind file.
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.RadioButton chkInternational; protected global::System.Web.UI.WebControls.Panel PlanFeaturesArchiving;
/// <summary>
/// locArchivingPolicy 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 locArchivingPolicy;
/// <summary>
/// ddArchivingPolicy control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddArchivingPolicy;
/// <summary>
/// secPlanFeaturesMeeting control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secPlanFeaturesMeeting;
/// <summary>
/// PlanFeaturesMeeting 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.Panel PlanFeaturesMeeting;
/// <summary>
/// chkAllowOrganizeMeetingsWithExternalAnonymous control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.CheckBox chkAllowOrganizeMeetingsWithExternalAnonymous;
/// <summary>
/// secPlanFeaturesTelephony control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secPlanFeaturesTelephony;
/// <summary>
/// PlanFeaturesTelephony 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.Panel PlanFeaturesTelephony;
/// <summary>
/// locTelephony 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 locTelephony;
/// <summary>
/// ddTelephony control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddTelephony;
/// <summary>
/// pnEnterpriseVoice 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.Panel pnEnterpriseVoice;
/// <summary>
/// locTelephonyProvider 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 locTelephonyProvider;
/// <summary>
/// tbTelephoneProvider 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 tbTelephoneProvider;
/// <summary>
/// btnAccept 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 btnAccept;
/// <summary>
/// AcceptRequiredValidator 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 AcceptRequiredValidator;
/// <summary>
/// locDialPlan 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 locDialPlan;
/// <summary>
/// ddTelephonyDialPlanPolicy control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddTelephonyDialPlanPolicy;
/// <summary>
/// locVoicePolicy 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 locVoicePolicy;
/// <summary>
/// ddTelephonyVoicePolicy control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddTelephonyVoicePolicy;
/// <summary>
/// pnServerURI 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.Panel pnServerURI;
/// <summary>
/// locServerURI 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 locServerURI;
/// <summary>
/// tbServerURI 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 tbServerURI;
/// <summary> /// <summary>
/// btnAddPlan control. /// btnAddPlan control.

View file

@ -0,0 +1,71 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AllocatePackagePhoneNumbers.ascx.cs" Inherits="WebsitePanel.Portal.UserControls.AllocatePackagePhoneNumbers" %>
<%@ Register Src="SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<wsp:SimpleMessageBox id="messageBox" runat="server" />
<asp:ValidationSummary ID="validatorsSummary" runat="server"
ValidationGroup="AddAddress" ShowMessageBox="True" ShowSummary="False" />
<ul id="ErrorMessagesList" runat="server" visible="false">
<li id="EmptyAddressesMessage" runat="server">
<asp:Localize ID="locNotEnoughAddresses" runat="server" Text="Not enough..." meta:resourcekey="locNotEnoughAddresses"></asp:Localize>
</li>
<li id="QuotaReachedMessage" runat="server">
<asp:Localize ID="locQuotaReached" runat="server" Text="Quota reached..." meta:resourcekey="locQuotaReached"></asp:Localize>
</li>
</ul>
<asp:UpdatePanel runat="server" ID="AddressesTable" UpdateMode="Conditional">
<ContentTemplate>
<table cellspacing="5" style="width: 100%;">
<tr>
<td>
<asp:RadioButton ID="radioExternalRandom" runat="server" AutoPostBack="true"
meta:resourcekey="radioExternalRandom" Text="Randomly select phone Numbers from the pool"
Checked="True" GroupName="ExternalAddress"
oncheckedchanged="radioExternalRandom_CheckedChanged" />
</td>
</tr>
<tr id="AddressesNumberRow" runat="server">
<td style="padding-left: 30px;">
<asp:Localize ID="locExternalAddresses" runat="server"
meta:resourcekey="locExternalAddresses" Text="Number of Phone Numbers:"></asp:Localize>
<asp:TextBox ID="txtExternalAddressesNumber" runat="server" CssClass="NormalTextBox" Width="50"></asp:TextBox>
<asp:RequiredFieldValidator ID="ExternalAddressesValidator" runat="server" Text="*" Display="Dynamic"
ControlToValidate="txtExternalAddressesNumber" meta:resourcekey="ExternalAddressesValidator" SetFocusOnError="true"
ValidationGroup="AddAddress">*</asp:RequiredFieldValidator>
<asp:Literal ID="litMaxAddresses" runat="server"></asp:Literal>
</td>
</tr>
<tr>
<td>
<asp:RadioButton ID="radioExternalSelected" runat="server" AutoPostBack="true"
meta:resourcekey="radioExternalSelected" Text="Select PHone Number from the list"
GroupName="ExternalAddress"
oncheckedchanged="radioExternalSelected_CheckedChanged" />
</td>
</tr>
<tr id="AddressesListRow" runat="server">
<td style="padding-left: 30px;">
<asp:ListBox ID="listExternalAddresses" SelectionMode="Multiple" runat="server" Rows="8"
CssClass="NormalTextBox" Width="220" style="height:100px;" ></asp:ListBox>
<br />
<asp:Localize ID="locHoldCtrl" runat="server"
meta:resourcekey="locHoldCtrl" Text="* Hold CTRL key to select multiple phone numbers" ></asp:Localize>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
<p>
<asp:Button ID="btnAdd" runat="server" meta:resourcekey="btnAdd"
ValidationGroup="AddAddress" Text="Add" CssClass="Button1"
onclick="btnAdd_Click" />
<asp:Button ID="btnCancel" runat="server" meta:resourcekey="btnCancel"
CausesValidation="false" Text="Cancel" CssClass="Button1"
onclick="btnCancel_Click" />
</p>

View file

@ -0,0 +1,174 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.Common;
namespace WebsitePanel.Portal.UserControls
{
public partial class AllocatePackagePhoneNumbers : WebsitePanelControlBase
{
private IPAddressPool pool;
public IPAddressPool Pool
{
get { return pool; }
set { pool = value; }
}
private string listAddressesControl;
public string ListAddressesControl
{
get { return listAddressesControl; }
set { listAddressesControl = value; }
}
private string resourceGroup;
public string ResourceGroup
{
get { return resourceGroup; }
set { resourceGroup = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindIPAddresses();
ToggleControls();
}
}
private void BindIPAddresses()
{
bool vps = (Pool == IPAddressPool.VpsExternalNetwork || Pool == IPAddressPool.VpsManagementNetwork);
// bind list
IPAddressInfo[] ips = ES.Services.Servers.GetUnallottedIPAddresses(PanelSecurity.PackageId, ResourceGroup, Pool);
foreach (IPAddressInfo ip in ips)
{
string txt = ip.ExternalIP;
// web sites - NAT Address
if (!vps && !String.IsNullOrEmpty(ip.InternalIP))
txt += "/" + ip.InternalIP;
// VPS - Gateway Address
else if (vps && !String.IsNullOrEmpty(ip.DefaultGateway))
txt += "/" + ip.DefaultGateway;
listExternalAddresses.Items.Add(new ListItem(txt, ip.AddressId.ToString()));
}
int quotaAllowed = -1;
string quotaName = (String.Compare(ResourceGroup, ResourceGroups.VPS, true) == 0) ? Quotas.VPS_EXTERNAL_IP_ADDRESSES_NUMBER : Quotas.WEB_IP_ADDRESSES;
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Quotas.ContainsKey(quotaName))
{
int quotaAllocated = cntx.Quotas[quotaName].QuotaAllocatedValue;
int quotaUsed = cntx.Quotas[quotaName].QuotaUsedValue;
if (quotaAllocated != -1)
quotaAllowed = quotaAllocated - quotaUsed;
}
// bind controls
int max = quotaAllowed == -1 ? listExternalAddresses.Items.Count : quotaAllowed;
txtExternalAddressesNumber.Text = max.ToString();
litMaxAddresses.Text = String.Format(GetLocalizedString("litMaxAddresses.Text"), max);
if (max == 0)
{
AddressesTable.Visible = false;
ErrorMessagesList.Visible = true;
EmptyAddressesMessage.Visible = (listExternalAddresses.Items.Count == 0);
QuotaReachedMessage.Visible = (quotaAllowed == 0);
btnAdd.Enabled = false;
}
}
protected void btnAdd_Click(object sender, EventArgs e)
{
try
{
List<int> ids = new List<int>();
foreach (ListItem item in listExternalAddresses.Items)
{
if (item.Selected)
ids.Add(Utils.ParseInt(item.Value));
}
ResultObject res = ES.Services.Servers.AllocatePackageIPAddresses(PanelSecurity.PackageId,
ResourceGroup, Pool,
radioExternalRandom.Checked,
Utils.ParseInt(txtExternalAddressesNumber.Text),
ids.ToArray());
if (res.IsSuccess)
{
// return back
Response.Redirect(HostModule.EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), ListAddressesControl));
}
else
{
// show message
messageBox.ShowMessage(res, "VPS_ALLOCATE_EXTERNAL_ADDRESSES_ERROR", "VPS");
}
}
catch (Exception ex)
{
messageBox.ShowErrorMessage("VPS_ALLOCATE_EXTERNAL_ADDRESSES_ERROR", ex);
}
}
protected void btnCancel_Click(object sender, EventArgs e)
{
Response.Redirect(HostModule.EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), ListAddressesControl));
}
protected void radioExternalSelected_CheckedChanged(object sender, EventArgs e)
{
ToggleControls();
}
private void ToggleControls()
{
AddressesNumberRow.Visible = radioExternalRandom.Checked;
AddressesListRow.Visible = radioExternalSelected.Checked;
}
protected void radioExternalRandom_CheckedChanged(object sender, EventArgs e)
{
ToggleControls();
}
}
}

View file

@ -0,0 +1,243 @@
// 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.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

@ -0,0 +1,153 @@
<?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="btnAdd.Text" xml:space="preserve">
<value>Add</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="ExternalAddressesValidator.ErrorMessage" xml:space="preserve">
<value>Enter the number of Phone Numbers</value>
</data>
<data name="litMaxAddresses.Text" xml:space="preserve">
<value>({0} max)</value>
</data>
<data name="locExternalAddresses.Text" xml:space="preserve">
<value>Number of Phone Numbers:</value>
</data>
<data name="locHoldCtrl.Text" xml:space="preserve">
<value>* Hold CTRL key to select multiple phone numbers</value>
</data>
<data name="locNotEnoughAddresses.Text" xml:space="preserve">
<value>The pool of Phone Numbers is empty.&lt;br/&gt;Allocate more Phone Numbers on reseller level. If the current hosting space is nested within "System" space then add more server Phone Numbers to the appropriate pool on "Configuration -&gt; Phone Numbers" page.</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Allocate Phone Numbers</value>
</data>
<data name="radioExternalRandom.Text" xml:space="preserve">
<value>Randomly select Phone Numbers from the pool</value>
</data>
<data name="radioExternalSelected.Text" xml:space="preserve">
<value>Select Phone Numbers from the list</value>
</data>
<data name="locQuotaReached.Text" xml:space="preserve">
<value>Phone Numbers quota has been reached.</value>
</data>
</root>

View file

@ -0,0 +1,165 @@
<?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="btnAllocateAddress.Text" xml:space="preserve">
<value>Allocate...</value>
</data>
<data name="btnDeallocateAddresses.Text" xml:space="preserve">
<value>Deallocate Selected</value>
</data>
<data name="gvAddresses.Empty" xml:space="preserve">
<value>No Phone Numbers have been allocated to this hosting space.</value>
</data>
<data name="gvAddressesDefaultGateway.HeaderText" xml:space="preserve">
<value>Gateway</value>
</data>
<data name="gvAddressesIPAddress.HeaderText" xml:space="preserve">
<value>Phone Numbers</value>
</data>
<data name="gvAddressesItemName.HeaderText" xml:space="preserve">
<value>Item Name</value>
</data>
<data name="gvAddressesPrimary.HeaderText" xml:space="preserve">
<value>Primary</value>
</data>
<data name="gvAddressesSpace.HeaderText" xml:space="preserve">
<value>Space</value>
</data>
<data name="gvAddressesSubnetMask.HeaderText" xml:space="preserve">
<value>Subnet Mask</value>
</data>
<data name="gvAddressesUser.HeaderText" xml:space="preserve">
<value>User</value>
</data>
<data name="SearchField.DefaultGateway" xml:space="preserve">
<value>Default Gateway</value>
</data>
<data name="SearchField.IPAddress" xml:space="preserve">
<value>Phone Numbers</value>
</data>
<data name="SearchField.ItemName" xml:space="preserve">
<value>Item Name</value>
</data>
<data name="SearchField.Username" xml:space="preserve">
<value>User Name</value>
</data>
<data name="btnDeallocateAddresses.OnClientClick" xml:space="preserve">
<value>return confirm('Deallocate selected Phone Numbers from hosting space?');</value>
</data>
</root>

View file

@ -0,0 +1,87 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PackagePhoneNumbers.ascx.cs" Inherits="WebsitePanel.Portal.UserControls.PackagePhoneNumbers" %>
<%@ Register Src="SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<%@ Register Src="SearchBox.ascx" TagName="SearchBox" TagPrefix="wsp" %>
<script language="javascript">
function SelectAllCheckboxes(box) {
var state = box.checked;
var elm = box.parentElement.parentElement.parentElement.parentElement.getElementsByTagName("INPUT");
for (i = 0; i < elm.length; i++)
if (elm[i].type == "checkbox" && elm[i].id != box.id && elm[i].checked != state && !elm[i].disabled)
elm[i].checked = state;
}
</script>
<wsp:SimpleMessageBox id="messageBox" runat="server" />
<div class="FormButtonsBarClean">
<div class="FormButtonsBarCleanLeft">
<asp:Button ID="btnAllocateAddress" runat="server" meta:resourcekey="btnAllocateAddress"
Text="Allocate IP Addresses" CssClass="Button1" CausesValidation="False"
onclick="btnAllocateAddress_Click" />
</div>
<div class="FormButtonsBarCleanRight">
<wsp:SearchBox ID="searchBox" runat="server" />
</div>
</div>
<asp:GridView ID="gvAddresses" runat="server" AutoGenerateColumns="False"
Width="100%" EmptyDataText="gvAddresses" CssSelectorClass="NormalGridView"
AllowPaging="True" AllowSorting="True" DataSourceID="odsExternalAddressesPaged"
onrowdatabound="gvAddresses_RowDataBound" DataKeyNames="PackageAddressID" >
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkSelectAll" runat="server" onclick="javascript:SelectAllCheckboxes(this);" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" />&nbsp;
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="gvAddressesIPAddress" meta:resourcekey="gvAddressesIPAddress"
DataField="ExternalIP" SortExpression="ExternalIP" />
<asp:TemplateField HeaderText="gvAddressesItemName" meta:resourcekey="gvAddressesItemName" SortExpression="ItemName">
<ItemTemplate>
<asp:hyperlink id="lnkEdit" runat="server" NavigateUrl='<%# GetItemEditUrl(Eval("ItemID").ToString()) %>'>
<%# Eval("ItemName") %>
</asp:hyperlink>&nbsp;
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="gvAddressesSpace" meta:resourcekey="gvAddressesSpace" SortExpression="PackageName" >
<ItemTemplate>
<asp:hyperlink id="lnkSpace" runat="server" NavigateUrl='<%# GetSpaceHomeUrl(Eval("PackageID").ToString()) %>'>
<%# Eval("PackageName") %>
</asp:hyperlink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="gvAddressesUser" meta:resourcekey="gvAddressesUser" SortExpression="Username" >
<ItemTemplate>
<%# Eval("UserName") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="odsExternalAddressesPaged" runat="server" EnablePaging="True"
SelectCountMethod="GetPackageIPAddressesCount"
SelectMethod="GetPackageIPAddresses"
SortParameterName="sortColumn"
TypeName="WebsitePanel.Portal.VirtualMachinesHelper"
OnSelected="odsExternalAddressesPaged_Selected"
onselecting="odsExternalAddressesPaged_Selecting">
<SelectParameters>
<asp:QueryStringParameter Name="packageId" QueryStringField="SpaceID" DefaultValue="0" />
<asp:Parameter Name="pool" DefaultValue="0" />
<asp:ControlParameter Name="filterColumn" ControlID="searchBox" PropertyName="FilterColumn" />
<asp:ControlParameter Name="filterValue" ControlID="searchBox" PropertyName="FilterValue" />
</SelectParameters>
</asp:ObjectDataSource>
<div style="margin-top:4px;">
<asp:Button ID="btnDeallocateAddresses" runat="server" meta:resourcekey="btnDeallocateAddresses"
Text="Deallocate selected" CssClass="SmallButton" CausesValidation="False"
onclick="btnDeallocateAddresses_Click" />
</div>

View file

@ -0,0 +1,172 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.Common;
namespace WebsitePanel.Portal.UserControls
{
public partial class PackagePhoneNumbers : WebsitePanelControlBase
{
private bool spaceOwner;
private IPAddressPool pool;
public IPAddressPool Pool
{
get { return pool; }
set { pool = value; }
}
private string editItemControl;
public string EditItemControl
{
get { return editItemControl; }
set { editItemControl = value; }
}
private string spaceHomeControl;
public string SpaceHomeControl
{
get { return spaceHomeControl; }
set { spaceHomeControl = value; }
}
private string allocateAddressesControl;
public string AllocateAddressesControl
{
get { return allocateAddressesControl; }
set { allocateAddressesControl = value; }
}
public bool ManageAllowed
{
get { return ViewState["ManageAllowed"] != null ? (bool)ViewState["ManageAllowed"] : false; }
set { ViewState["ManageAllowed"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
searchBox.AddCriteria("ExternalIP", GetLocalizedString("SearchField.IPAddress"));
searchBox.AddCriteria("ItemName", GetLocalizedString("SearchField.ItemName"));
searchBox.AddCriteria("Username", GetLocalizedString("SearchField.Username"));
}
bool isUserSelected = PanelSecurity.SelectedUser.Role == WebsitePanel.EnterpriseServer.UserRole.User;
bool isUserLogged = PanelSecurity.EffectiveUser.Role == WebsitePanel.EnterpriseServer.UserRole.User;
spaceOwner = PanelSecurity.EffectiveUserId == PanelSecurity.SelectedUserId;
gvAddresses.Columns[3].Visible = !isUserSelected; // space
gvAddresses.Columns[4].Visible = !isUserSelected; // user
// managing external network permissions
gvAddresses.Columns[0].Visible = !isUserLogged && ManageAllowed;
btnAllocateAddress.Visible = !isUserLogged && !spaceOwner && ManageAllowed && !String.IsNullOrEmpty(AllocateAddressesControl);
btnDeallocateAddresses.Visible = !isUserLogged && ManageAllowed;
}
public string GetItemEditUrl(string itemID)
{
return HostModule.EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), EditItemControl,
"ItemID=" + itemID);
}
public string GetSpaceHomeUrl(string spaceId)
{
return HostModule.EditUrl("SpaceID", spaceId, SpaceHomeControl);
}
protected void odsExternalAddressesPaged_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
messageBox.ShowErrorMessage("EXCHANGE_GET_MAILBOXES", e.Exception);
e.ExceptionHandled = true;
}
}
protected void btnAllocateAddress_Click(object sender, EventArgs e)
{
Response.Redirect(HostModule.EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), AllocateAddressesControl));
}
protected void gvAddresses_RowDataBound(object sender, GridViewRowEventArgs e)
{
PackageIPAddress item = e.Row.DataItem as PackageIPAddress;
if (item != null)
{
// checkbox
CheckBox chkSelect = e.Row.FindControl("chkSelect") as CheckBox;
chkSelect.Enabled = (!spaceOwner || (PanelSecurity.PackageId != item.PackageId)) && item.ItemId == 0;
}
}
protected void btnDeallocateAddresses_Click(object sender, EventArgs e)
{
List<int> ids = new List<int>();
try
{
List<int> items = new List<int>();
for (int i = 0; i < gvAddresses.Rows.Count; i++)
{
GridViewRow row = gvAddresses.Rows[i];
CheckBox chkSelect = (CheckBox)row.FindControl("chkSelect");
if (chkSelect.Checked)
items.Add((int)gvAddresses.DataKeys[i].Value);
}
// check if at least one is selected
if (items.Count == 0)
{
messageBox.ShowWarningMessage("PHONE_EDIT_LIST_EMPTY_ERROR");
return;
}
ResultObject res = ES.Services.Servers.DeallocatePackageIPAddresses(PanelSecurity.PackageId, items.ToArray());
messageBox.ShowMessage(res, "DEALLOCATE_SPACE_PHONE_NUMBER", "VPS");
gvAddresses.DataBind();
}
catch (Exception ex)
{
messageBox.ShowErrorMessage("DEALLOCATE_SPACE_PHONE_NUMBER", ex);
}
}
protected void odsExternalAddressesPaged_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["pool"] = Pool;
}
}
}

View file

@ -0,0 +1,103 @@
// 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.UserControls {
public partial class PackagePhoneNumbers {
/// <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>
/// btnAllocateAddress 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 btnAllocateAddress;
/// <summary>
/// searchBox control.
/// </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.
/// </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.
/// </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.
/// </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

@ -38,7 +38,6 @@ namespace WebsitePanel.Portal
{ {
protected void Page_Load(object sender, EventArgs e) protected void Page_Load(object sender, EventArgs e)
{ {
} }
} }
} }

View file

@ -461,6 +461,20 @@
<Compile Include="UserControls\OrgIdPolicyEditor.ascx.designer.cs"> <Compile Include="UserControls\OrgIdPolicyEditor.ascx.designer.cs">
<DependentUpon>OrgIdPolicyEditor.ascx</DependentUpon> <DependentUpon>OrgIdPolicyEditor.ascx</DependentUpon>
</Compile> </Compile>
<Compile Include="UserControls\PackagePhoneNumbers.ascx.cs">
<DependentUpon>PackagePhoneNumbers.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="UserControls\PackagePhoneNumbers.ascx.designer.cs">
<DependentUpon>PackagePhoneNumbers.ascx</DependentUpon>
</Compile>
<Compile Include="UserControls\AllocatePackagePhoneNumbers.ascx.cs">
<DependentUpon>AllocatePackagePhoneNumbers.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="UserControls\AllocatePackagePhoneNumbers.ascx.designer.cs">
<DependentUpon>AllocatePackagePhoneNumbers.ascx</DependentUpon>
</Compile>
<Compile Include="VPSForPC\MonitoringPage.aspx.cs"> <Compile Include="VPSForPC\MonitoringPage.aspx.cs">
<DependentUpon>MonitoringPage.aspx</DependentUpon> <DependentUpon>MonitoringPage.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
@ -3879,6 +3893,41 @@
<Compile Include="WebsitesSSL.ascx.designer.cs"> <Compile Include="WebsitesSSL.ascx.designer.cs">
<DependentUpon>WebsitesSSL.ascx</DependentUpon> <DependentUpon>WebsitesSSL.ascx</DependentUpon>
</Compile> </Compile>
<Compile Include="LyncPhoneNumbers.ascx.cs">
<DependentUpon>LyncPhoneNumbers.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="LyncPhoneNumbers.ascx.designer.cs">
<DependentUpon>LyncPhoneNumbers.ascx</DependentUpon>
</Compile>
<Compile Include="LyncAllocatePhoneNumbers.ascx.cs">
<DependentUpon>LyncAllocatePhoneNumbers.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="LyncAllocatePhoneNumbers.ascx.designer.cs">
<DependentUpon>LyncAllocatePhoneNumbers.ascx</DependentUpon>
</Compile>
<Compile Include="PhoneNumbers.ascx.cs">
<DependentUpon>PhoneNumbers.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="PhoneNumbers.ascx.designer.cs">
<DependentUpon>PhoneNumbers.ascx</DependentUpon>
</Compile>
<Compile Include="PhoneNumbersAddPhoneNumber.ascx.cs">
<DependentUpon>PhoneNumbersAddPhoneNumber.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="PhoneNumbersAddPhoneNumber.ascx.designer.cs">
<DependentUpon>PhoneNumbersAddPhoneNumber.ascx</DependentUpon>
</Compile>
<Compile Include="PhoneNumbersEditPhoneNumber.ascx.cs">
<DependentUpon>PhoneNumbersEditPhoneNumber.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="PhoneNumbersEditPhoneNumber.ascx.designer.cs">
<DependentUpon>PhoneNumbersEditPhoneNumber.ascx</DependentUpon>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="ApplyEnableHardQuotaFeature.ascx" /> <Content Include="ApplyEnableHardQuotaFeature.ascx" />
@ -3918,6 +3967,8 @@
<Content Include="SettingsLyncUserPlansPolicy.ascx" /> <Content Include="SettingsLyncUserPlansPolicy.ascx" />
<Content Include="UserControls\EditFeedsList.ascx" /> <Content Include="UserControls\EditFeedsList.ascx" />
<Content Include="UserControls\OrgIdPolicyEditor.ascx" /> <Content Include="UserControls\OrgIdPolicyEditor.ascx" />
<Content Include="UserControls\PackagePhoneNumbers.ascx" />
<Content Include="UserControls\AllocatePackagePhoneNumbers.ascx" />
<Content Include="VPSForPC\MonitoringPage.aspx" /> <Content Include="VPSForPC\MonitoringPage.aspx" />
<Content Include="VPSForPC\VdcAccountVLanAdd.ascx" /> <Content Include="VPSForPC\VdcAccountVLanAdd.ascx" />
<Content Include="VPSForPC\VdcAccountVLanNetwork.ascx" /> <Content Include="VPSForPC\VdcAccountVLanNetwork.ascx" />
@ -3980,6 +4031,11 @@
<Content Include="UserControls\UsernameControl.ascx" /> <Content Include="UserControls\UsernameControl.ascx" />
<Content Include="WebSitesHeliconZooControl.ascx" /> <Content Include="WebSitesHeliconZooControl.ascx" />
<Content Include="WebsitesSSL.ascx" /> <Content Include="WebsitesSSL.ascx" />
<Content Include="LyncPhoneNumbers.ascx" />
<Content Include="LyncAllocatePhoneNumbers.ascx" />
<Content Include="PhoneNumbers.ascx" />
<Content Include="PhoneNumbersAddPhoneNumber.ascx" />
<Content Include="PhoneNumbersEditPhoneNumber.ascx" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="App_LocalResources\BandwidthReport.ascx.resx"> <Content Include="App_LocalResources\BandwidthReport.ascx.resx">
@ -5061,6 +5117,12 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Content> </Content>
<Content Include="UserControls\App_LocalResources\OrgIdPolicyEditor.ascx.resx" /> <Content Include="UserControls\App_LocalResources\OrgIdPolicyEditor.ascx.resx" />
<Content Include="UserControls\App_LocalResources\PackagePhoneNumbers.ascx.resx">
<SubType>Designer</SubType>
</Content>
<Content Include="UserControls\App_LocalResources\AllocatePackagePhoneNumbers.ascx.resx">
<SubType>Designer</SubType>
</Content>
<None Include="Resources\Windows2008_Settings.ascx.resx" /> <None Include="Resources\Windows2008_Settings.ascx.resx" />
<Content Include="App_LocalResources\WebSitesHeliconZooControl.ascx.resx" /> <Content Include="App_LocalResources\WebSitesHeliconZooControl.ascx.resx" />
<Content Include="ExchangeServer\App_LocalResources\ExchangeDisclaimers.ascx.resx"> <Content Include="ExchangeServer\App_LocalResources\ExchangeDisclaimers.ascx.resx">
@ -5072,6 +5134,15 @@
<Content Include="ExchangeServer\App_LocalResources\ExchangeDistributionListMemberOf.ascx.resx" /> <Content Include="ExchangeServer\App_LocalResources\ExchangeDistributionListMemberOf.ascx.resx" />
<Content Include="ExchangeServer\App_LocalResources\ExchangeMailboxMemberOf.ascx.resx" /> <Content Include="ExchangeServer\App_LocalResources\ExchangeMailboxMemberOf.ascx.resx" />
<Content Include="ExchangeServer\App_LocalResources\OrganizationUserMemberOf.ascx.resx" /> <Content Include="ExchangeServer\App_LocalResources\OrganizationUserMemberOf.ascx.resx" />
<Content Include="App_LocalResources\LyncPhoneNumbers.ascx.resx">
<SubType>Designer</SubType>
</Content>
<Content Include="App_LocalResources\LyncAllocatePhoneNumbers.ascx.resx">
<SubType>Designer</SubType>
</Content>
<Content Include="App_LocalResources\PhoneNumbers.ascx.resx" />
<Content Include="App_LocalResources\PhoneNumbersAddPhoneNumber.ascx.resx" />
<Content Include="App_LocalResources\PhoneNumbersEditPhoneNumber.ascx.resx" />
<EmbeddedResource Include="UserControls\App_LocalResources\EditDomainsList.ascx.resx"> <EmbeddedResource Include="UserControls\App_LocalResources\EditDomainsList.ascx.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>