Added functionality of Service Levels

This commit is contained in:
vfedosevich 2014-09-11 22:23:48 +03:00
parent 4c58752483
commit b1c52c36eb
39 changed files with 2282 additions and 175 deletions

View file

@ -0,0 +1,144 @@
<?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="btnAddServiceLevel.Text" xml:space="preserve">
<value>Add New</value>
</data>
<data name="gvServiceLevels.Empty" xml:space="preserve">
<value>No service levels have been added yet. To add a new service level set params and click "Add New" button.</value>
</data>
<data name="valRequireServiceLevelName.ErrorMessage" xml:space="preserve">
<value>Please enter service level name</value>
</data>
<data name="valRequireServiceLevelName.Text" xml:space="preserve">
<value>*</value>
</data>
<data name="btnUpdateServiceLevel.Text" xml:space="preserve">
<value>Update</value>
</data>
<data name="lblServiceLevelDescr.Text" xml:space="preserve">
<value>Description:</value>
</data>
<data name="lblServiceLevelName.Text" xml:space="preserve">
<value>Name:</value>
</data>
<data name="secServiceLevel.Text" xml:space="preserve">
<value>Service Level</value>
</data>
</root>

View file

@ -150,4 +150,7 @@
<data name="lnkWebPolicy.Text" xml:space="preserve">
<value>WEB Policy</value>
</data>
<data name="lnkServiceLevels.Text" xml:space="preserve">
<value>Service Levels</value>
</data>
</root>

View file

@ -177,4 +177,7 @@
<data name="locTitleArchiving.Text" xml:space="preserve">
<value>Archiving Mailboxes</value>
</data>
<data name="gvServiceLevel.Header" xml:space="preserve">
<value>Service Level</value>
</data>
</root>

View file

@ -246,4 +246,13 @@
<data name="chkInherit.Text" xml:space="preserve">
<value>Update Services</value>
</data>
<data name="locServiceLevel.Text" xml:space="preserve">
<value>Service Level:</value>
</data>
<data name="locVIPUser.Text" xml:space="preserve">
<value>VIP:</value>
</data>
<data name="secServiceLevels.Text" xml:space="preserve">
<value>Service Level Information</value>
</data>
</root>

View file

@ -180,4 +180,7 @@
<data name="gvUsersLogin.Header" xml:space="preserve">
<value>Login</value>
</data>
<data name="gvServiceLevel.Header" xml:space="preserve">
<value>Service Level</value>
</data>
</root>

View file

@ -213,7 +213,9 @@ namespace WebsitePanel.Portal.ExchangeServer
null,
null,
user.ExternalEmail,
txtSubscriberNumber.Text);
txtSubscriberNumber.Text,
0,
false);
}

View file

@ -52,10 +52,16 @@
OnRowCommand="gvMailboxes_RowCommand" AllowPaging="True" AllowSorting="True"
DataSourceID="odsAccountsPaged" PageSize="20">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Image ID="img2" runat="server" Width="16px" Height="16px" ImageUrl='<%# GetStateImage((bool)Eval("Locked"),(bool)Eval("Disabled")) %>' ImageAlign="AbsMiddle" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="gvMailboxesDisplayName" SortExpression="DisplayName">
<ItemStyle Width="40%"></ItemStyle>
<ItemStyle Width="20%"></ItemStyle>
<ItemTemplate>
<asp:Image ID="img1" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType")) %>' ImageAlign="AbsMiddle" />
<asp:Image ID="img1" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType"),(bool)Eval("IsVIP")) %>' ImageAlign="AbsMiddle" />
<asp:Label runat="server" Text='<%# (bool)Eval("IsVIP") ? "*" : string.Empty %>' style="font-weight:bold;"/>
<asp:hyperlink id="lnk1" runat="server"
NavigateUrl='<%# GetMailboxEditUrl(Eval("AccountId").ToString()) %>'>
<%# Eval("DisplayName") %>
@ -63,7 +69,7 @@
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="gvUsersLogin" SortExpression="UserPrincipalName">
<ItemStyle></ItemStyle>
<ItemStyle Width="20%"></ItemStyle>
<ItemTemplate>
<asp:hyperlink id="lnk2" runat="server"
NavigateUrl='<%# GetOrganizationUserEditUrl(Eval("AccountId").ToString()) %>'>
@ -71,6 +77,14 @@
</asp:hyperlink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="gvServiceLevel">
<ItemStyle Width="20%"></ItemStyle>
<ItemTemplate>
<asp:Label id="lbServLevel" runat="server" ToolTip = '<%# GetServiceLevel((int)Eval("LevelId")).LevelDescription%>'>
<%# GetServiceLevel((int)Eval("LevelId")).LevelName%>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="gvMailboxesEmail" DataField="PrimaryEmailAddress" SortExpression="PrimaryEmailAddress" ItemStyle-Width="25%" />
<asp:BoundField HeaderText="gvSubscriberNumber" DataField="SubscriberNumber" ItemStyle-Width="10%" />
<asp:BoundField HeaderText="gvMailboxesMailboxPlan" DataField="MailboxPlan" SortExpression="MailboxPlan" ItemStyle-Width="50%" />

View file

@ -27,9 +27,11 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Linq;
using System.Web.UI.WebControls;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
namespace WebsitePanel.Portal.ExchangeServer
{
@ -43,6 +45,8 @@ namespace WebsitePanel.Portal.ExchangeServer
}
}
private ServiceLevel[] ServiceLevels;
protected void Page_Load(object sender, EventArgs e)
{
locTitle.Text = ArchivingBoxes ? GetLocalizedString("locTitleArchiving.Text") : GetLocalizedString("locTitle.Text");
@ -54,14 +58,23 @@ namespace WebsitePanel.Portal.ExchangeServer
BindStats();
}
BindServiceLevels();
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_ISCONSUMER))
{
if (cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue != 1)
{
gvMailboxes.Columns[3].Visible = false;
gvMailboxes.Columns[4].Visible = false;
}
}
gvMailboxes.Columns[3].Visible = cntx.Groups.ContainsKey(ResourceGroups.ServiceLevels);
}
private void BindServiceLevels()
{
ServiceLevels = ES.Services.Organizations.GetSupportServiceLevels();
}
private void BindStats()
@ -96,7 +109,7 @@ namespace WebsitePanel.Portal.ExchangeServer
}
}
public string GetAccountImage(int accountTypeId)
public string GetAccountImage(int accountTypeId, bool vip)
{
ExchangeAccountType accountType = (ExchangeAccountType)accountTypeId;
string imgName = "mailbox_16.gif";
@ -109,6 +122,21 @@ namespace WebsitePanel.Portal.ExchangeServer
else if (accountType == ExchangeAccountType.Equipment)
imgName = "equipment_16.gif";
if (vip) imgName = "admin_16.png";
return GetThemedImage("Exchange/" + imgName);
}
public string GetStateImage(bool locked, bool disabled)
{
string imgName = "enabled.png";
if (locked)
imgName = "locked.png";
else
if (disabled)
imgName = "disabled.png";
return GetThemedImage("Exchange/" + imgName);
}
@ -166,5 +194,10 @@ namespace WebsitePanel.Portal.ExchangeServer
{
e.InputParameters["archiving"] = ArchivingBoxes;
}
public ServiceLevel GetServiceLevel(int levelId)
{
return ServiceLevels.Where(x => x.LevelId == levelId).DefaultIfEmpty(new ServiceLevel { LevelName = "", LevelDescription = "" }).FirstOrDefault();
}
}
}

View file

@ -1,31 +1,3 @@
// Copyright (c) 2014, 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.

View file

@ -167,7 +167,9 @@ namespace WebsitePanel.Portal.HostedSolution
null,
null,
user.ExternalEmail,
txtSubscriberNumber.Text);
txtSubscriberNumber.Text,
0,
false);
}
}
}

View file

@ -117,12 +117,34 @@
<asp:TextBox ID="txtNotes" runat="server" CssClass="TextBox200" Rows="4" TextMode="MultiLine"></asp:TextBox>
</td>
</tr>
</table>
</table>
<wsp:CollapsiblePanel id="secServiceLevels" runat="server" IsCollapsed="true"
TargetControlID="ServiceLevels" meta:resourcekey="secServiceLevels" Text="Service Level Information">
</wsp:CollapsiblePanel>
<asp:Panel ID="ServiceLevels" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel150"><asp:Localize ID="locServiceLevel" runat="server" meta:resourcekey="locServiceLevel" Text="Service Level:"></asp:Localize></td>
<td>
<asp:DropDownList ID="ddlServiceLevels" DataValueField="LevelId" DataTextField="LevelName" runat="server"></asp:DropDownList>
</td>
</tr>
<tr>
<td class="FormLabel150"><asp:Localize ID="locVIPUser" runat="server" meta:resourcekey="locVIPUser" Text="VIP:"></asp:Localize></td>
<td>
<asp:CheckBox ID="chkVIP" runat="server"/>
</td>
</tr>
</table>
</asp:Panel>
<wsp:CollapsiblePanel id="secCompanyInfo" runat="server" IsCollapsed="true"
TargetControlID="CompanyInfo" meta:resourcekey="secCompanyInfo" Text="Company Information">
</wsp:CollapsiblePanel>
<asp:Panel ID="CompanyInfo" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
@ -207,6 +229,7 @@
<wsp:CollapsiblePanel id="secAddressInfo" runat="server" IsCollapsed="true"
TargetControlID="AddressInfo" meta:resourcekey="secAddressInfo" Text="Address">
</wsp:CollapsiblePanel>
<asp:Panel ID="AddressInfo" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>

View file

@ -27,8 +27,11 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
@ -40,6 +43,8 @@ namespace WebsitePanel.Portal.HostedSolution
{
if (!IsPostBack)
{
BindServiceLevels();
BindSettings();
MailboxTabsId.Visible = (PanelRequest.Context == "Mailbox");
@ -81,6 +86,18 @@ namespace WebsitePanel.Portal.HostedSolution
txtInitials.Text = user.Initials;
txtLastName.Text = user.LastName;
if (user.LevelId > 0 && secServiceLevels.Visible)
{
ServiceLevel serviceLevel = ES.Services.Organizations.GetSupportServiceLevel(user.LevelId);
if (ddlServiceLevels.Items.FindByValue(serviceLevel.LevelId.ToString()) == null)
ddlServiceLevels.Items.Add(new ListItem(serviceLevel.LevelName, serviceLevel.LevelId.ToString()));
ddlServiceLevels.Items.FindByValue(string.Empty).Selected = false;
ddlServiceLevels.Items.FindByValue(serviceLevel.LevelId.ToString()).Selected = true;
}
chkVIP.Checked = user.IsVIP && secServiceLevels.Visible;
txtJobTitle.Text = user.JobTitle;
txtCompany.Text = user.Company;
txtDepartment.Text = user.Department;
@ -196,6 +213,51 @@ namespace WebsitePanel.Portal.HostedSolution
}
}
private void BindServiceLevels()
{
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Groups.ContainsKey(ResourceGroups.ServiceLevels))
{
List<ServiceLevel> enabledServiceLevels = new List<ServiceLevel>();
foreach (var quota in cntx.Quotas.Where(x => x.Key.Contains(Quotas.SERVICE_LEVELS)))
{
foreach (var serviceLevel in ES.Services.Organizations.GetSupportServiceLevels())
{
if (quota.Key.Replace(Quotas.SERVICE_LEVELS, "") == serviceLevel.LevelName && CheckServiceLevelQuota(quota.Value, serviceLevel.LevelId))
{
enabledServiceLevels.Add(serviceLevel);
}
}
}
ddlServiceLevels.DataSource = enabledServiceLevels;
ddlServiceLevels.DataTextField = "LevelName";
ddlServiceLevels.DataValueField = "LevelId";
ddlServiceLevels.DataBind();
ddlServiceLevels.Items.Insert(0, new ListItem("<Select Service Level>", string.Empty));
ddlServiceLevels.Items.FindByValue(string.Empty).Selected = true;
secServiceLevels.Visible = true;
}
else { secServiceLevels.Visible = false; }
}
private bool CheckServiceLevelQuota(QuotaValueInfo quota, int levelID)
{
quota.QuotaUsedValue = ES.Services.Organizations.SearchAccounts(PanelRequest.ItemID, "", "", "", true).Where(x => x.LevelId == levelID).Count();
if (quota.QuotaAllocatedValue != -1)
{
return quota.QuotaAllocatedValue > quota.QuotaUsedValue;
}
return true;
}
private void SaveSettings()
{
if (!Page.IsValid)
@ -235,7 +297,9 @@ namespace WebsitePanel.Portal.HostedSolution
txtWebPage.Text,
txtNotes.Text,
txtExternalEmailAddress.Text,
txtSubscriberNumber.Text);
txtSubscriberNumber.Text,
string.IsNullOrEmpty(ddlServiceLevels.SelectedValue) ? 0 : int.Parse(ddlServiceLevels.SelectedValue),
chkVIP.Checked);
if (result < 0)
{

View file

@ -1,31 +1,3 @@
// Copyright (c) 2014, 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.
@ -346,6 +318,60 @@ namespace WebsitePanel.Portal.HostedSolution {
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtNotes;
/// <summary>
/// secServiceLevels control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secServiceLevels;
/// <summary>
/// ServiceLevels 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 ServiceLevels;
/// <summary>
/// locServiceLevel 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 locServiceLevel;
/// <summary>
/// ddlServiceLevels 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 ddlServiceLevels;
/// <summary>
/// locVIPUser 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 locVIPUser;
/// <summary>
/// chkVIP 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 chkVIP;
/// <summary>
/// secCompanyInfo control.
/// </summary>

View file

@ -59,9 +59,10 @@
</asp:TemplateField>
<asp:TemplateField HeaderText="gvUsersDisplayName" SortExpression="DisplayName">
<ItemStyle Width="50%"></ItemStyle>
<ItemStyle Width="25%"></ItemStyle>
<ItemTemplate>
<asp:Image ID="img1" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType")) %>' ImageAlign="AbsMiddle" />
<asp:Image ID="img1" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType"),(bool)Eval("IsVIP")) %>' ImageAlign="AbsMiddle"/>
<asp:Label runat="server" Text='<%# (bool)Eval("IsVIP") ? "*" : string.Empty %>' style="font-weight:bold;"/>
<asp:hyperlink id="lnk1" runat="server"
NavigateUrl='<%# GetUserEditUrl(Eval("AccountId").ToString()) %>'>
<%# Eval("DisplayName") %>
@ -69,8 +70,16 @@
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="gvUsersLogin" DataField="UserPrincipalName" SortExpression="UserPrincipalName" ItemStyle-Width="25%" />
<asp:TemplateField HeaderText="gvServiceLevel">
<ItemStyle Width="25%"></ItemStyle>
<ItemTemplate>
<asp:Label id="lbServLevel" runat="server" ToolTip = '<%# GetServiceLevel((int)Eval("LevelId")).LevelDescription%>'>
<%# GetServiceLevel((int)Eval("LevelId")).LevelName%>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="gvUsersEmail" DataField="PrimaryEmailAddress" SortExpression="PrimaryEmailAddress" ItemStyle-Width="25%" />
<asp:BoundField HeaderText="gvSubscriberNumber" DataField="SubscriberNumber" ItemStyle-Width="25%" />
<asp:BoundField HeaderText="gvSubscriberNumber" DataField="SubscriberNumber" ItemStyle-Width="20%" />
<asp:TemplateField ItemStyle-Wrap="False">
<ItemTemplate>
<asp:ImageButton ID="Image2" runat="server" Width="16px" Height="16px" ToolTip="Mail" ImageUrl='<%# GetMailImage((int)Eval("AccountType")) %>' CommandName="OpenMailProperties" CommandArgument='<%# Eval("AccountId") %>' Enabled=<%# EnableMailImageButton((int)Eval("AccountType")) %>/>

View file

@ -27,32 +27,42 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
namespace WebsitePanel.Portal.HostedSolution
{
public partial class OrganizationUsers : WebsitePanelModuleBase
{
private ServiceLevel[] ServiceLevels;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
{
BindStats();
}
BindServiceLevels();
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_ISCONSUMER))
{
if (cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue != 1)
{
gvUsers.Columns[4].Visible = false;
gvUsers.Columns[5].Visible = false;
}
}
gvUsers.Columns[3].Visible = cntx.Groups.ContainsKey(ResourceGroups.ServiceLevels);
}
private void BindServiceLevels()
{
ServiceLevels = ES.Services.Organizations.GetSupportServiceLevels();
}
private void BindStats()
@ -164,7 +174,7 @@ namespace WebsitePanel.Portal.HostedSolution
}
public string GetAccountImage(int accountTypeId)
public string GetAccountImage(int accountTypeId, bool vip)
{
string imgName = string.Empty;
@ -181,6 +191,7 @@ namespace WebsitePanel.Portal.HostedSolution
imgName = "admin_16.png";
break;
}
if (vip) imgName = "admin_16.png";
return GetThemedImage("Exchange/" + imgName);
}
@ -298,8 +309,9 @@ namespace WebsitePanel.Portal.HostedSolution
return accountID.ToString() + "|" + IsOCS.ToString() + "|" + IsLync.ToString();
}
public ServiceLevel GetServiceLevel(int levelId)
{
return ServiceLevels.Where(x => x.LevelId == levelId).DefaultIfEmpty(new ServiceLevel { LevelName = "", LevelDescription = "" }).FirstOrDefault();
}
}
}

View file

@ -1,31 +1,3 @@
// Copyright (c) 2014, 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.

View file

@ -100,7 +100,7 @@ namespace WebsitePanel.Portal
// rebind settings
BindSettings();
}
else
else if (!SettingsName.Equals("ServiceLevels"))
{
ToggleControls();
}

View file

@ -0,0 +1,84 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SettingsServiceLevels.ascx.cs" Inherits="WebsitePanel.Portal.SettingsServiceLevels" %>
<%@ Register Src="UserControls/CollapsiblePanel.ascx" TagName="CollapsiblePanel" TagPrefix="wsp" %>
<%@ Register Src="UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<%@ Register Src="UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
<%@ Import Namespace="WebsitePanel.Portal" %>
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
<wsp:SimpleMessageBox id="messageBox" runat="server" />
<asp:GridView id="gvServiceLevels" runat="server" EnableViewState="true" AutoGenerateColumns="false"
Width="100%" EmptyDataText="gvServiceLevels" CssSelectorClass="NormalGridView" OnRowCommand="gvServiceLevels_RowCommand">
<Columns>
<asp:TemplateField HeaderText="Edit">
<ItemTemplate>
<asp:ImageButton ID="cmdEdit" runat="server" SkinID="EditSmall" CommandName="EditItem" AlternateText="Edit record" CommandArgument='<%# Eval("LevelId") %>' ></asp:ImageButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Service Level">
<ItemStyle Width="30%"></ItemStyle>
<ItemTemplate>
<asp:Label id="lnkServiceLevel" runat="server" EnableViewState="true" ><%# PortalAntiXSS.Encode((string)Eval("LevelName"))%></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Description">
<ItemStyle Width="60%"></ItemStyle>
<ItemTemplate>
<asp:Label id="lnkServiceLevelDescription" runat="server" EnableViewState="true" ><%# PortalAntiXSS.Encode((string)Eval("LevelDescription"))%></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
&nbsp;<asp:ImageButton id="imgDelMailboxPlan" runat="server" Text="Delete" SkinID="ExchangeDelete"
CommandName="DeleteItem" CommandArgument='<%# Eval("LevelId") %>'
meta:resourcekey="cmdDelete" OnClientClick="return confirm('Are you sure you want to delete selected service level?')"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<wsp:CollapsiblePanel id="secServiceLevel" runat="server"
TargetControlID="ServiceLevel" meta:resourcekey="secServiceLevel" Text="Service Level">
</wsp:CollapsiblePanel>
<asp:Panel ID="ServiceLevel" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel200" align="right">
<asp:Label ID="lblServiceLevelName" runat="server" meta:resourcekey="lblServiceLevelName" Text="Name:"></asp:Label>
</td>
<td class="Normal">
<asp:TextBox ID="txtServiceLevelName" runat="server" Width="100%" CssClass="NormalTextBox" MaxLength="255"></asp:TextBox>
<asp:RequiredFieldValidator ID="valRequireServiceLevelName" runat="server" meta:resourcekey="valRequireServiceLevelName" ControlToValidate="txtServiceLevelName"
ErrorMessage="Enter service level name" ValidationGroup="CreateServiceLevel" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="FormLabel200" align="right">
<asp:Label ID="lblServiceLevelDescr" runat="server" meta:resourcekey="lblServiceLevelDescr" Text="Description:"></asp:Label>
</td>
<td class="Normal" valign=top>
<asp:TextBox ID="txtServiceLevelDescr" runat="server" Rows="10" TextMode="MultiLine" Width="100%" CssClass="NormalTextBox" Wrap="False" MaxLength="511"></asp:TextBox></td>
</tr>
</table>
</asp:Panel>
<br />
<table>
<tr>
<td>
<div class="FormButtonsBarClean">
<asp:Button ID="btnAddServiceLevel" runat="server" meta:resourcekey="btnAddServiceLevel"
Text="Add New" CssClass="Button1" OnClick="btnAddServiceLevel_Click" />
</div>
</td>
<td>
<div class="FormButtonsBarClean">
<asp:Button ID="btnUpdateServiceLevel" runat="server" meta:resourcekey="btnUpdateServiceLevel"
Text="Update" CssClass="Button1" OnClick="btnUpdateServiceLevel_Click" />
</td>
</tr>
</table>
<br />
<asp:TextBox ID="txtStatus" runat="server" CssClass="TextBox400" MaxLength="128" ReadOnly="true"></asp:TextBox>

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.IO;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Collections.ObjectModel;
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.EnterpriseServer.Base.HostedSolution;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.Providers.Common;
namespace WebsitePanel.Portal
{
public partial class SettingsServiceLevels : WebsitePanelControlBase, IUserSettingsEditorControl
{
public void BindSettings(UserSettings settings)
{
if (PanelSecurity.SelectedUser.Role == UserRole.Administrator)
BindServiceLevels();
txtStatus.Visible = false;
}
private void BindServiceLevels()
{
ServiceLevel[] array = ES.Services.Organizations.GetSupportServiceLevels();
gvServiceLevels.DataSource = array;
gvServiceLevels.DataBind();
btnAddServiceLevel.Enabled = (string.IsNullOrEmpty(txtServiceLevelName.Text)) ? true : false;
btnUpdateServiceLevel.Enabled = (string.IsNullOrEmpty(txtServiceLevelName.Text)) ? false : true;
}
public void btnAddServiceLevel_Click(object sender, EventArgs e)
{
Page.Validate("CreateServiceLevel");
if (!Page.IsValid)
return;
ServiceLevel serviceLevel = new ServiceLevel();
int res = ES.Services.Organizations.AddSupportServiceLevel(txtServiceLevelName.Text, txtServiceLevelDescr.Text);
if (res < 0)
{
messageBox.ShowErrorMessage("ADD_SERVICE_LEVEL");
return;
}
txtServiceLevelName.Text = string.Empty;
txtServiceLevelDescr.Text = string.Empty;
BindServiceLevels();
}
protected void gvServiceLevels_RowCommand(object sender, GridViewCommandEventArgs e)
{
int levelID = Utils.ParseInt(e.CommandArgument.ToString(), 0);
switch (e.CommandName)
{
case "DeleteItem":
ResultObject result = ES.Services.Organizations.DeleteSupportServiceLevel(levelID);
if (!result.IsSuccess)
{
if (result.ErrorCodes.Contains("SERVICE_LEVEL_IN_USE:Service Level is being used; ")) messageBox.ShowErrorMessage("SERVICE_LEVEL_IN_USE");
else messageBox.ShowMessage(result, "DELETE_SERVICE_LEVEL", null);
return;
}
ViewState["ServiceLevelID"] = null;
txtServiceLevelName.Text = string.Empty;
txtServiceLevelDescr.Text = string.Empty;
BindServiceLevels();
break;
case "EditItem":
ServiceLevel serviceLevel;
ViewState["ServiceLevelID"] = levelID;
serviceLevel = ES.Services.Organizations.GetSupportServiceLevel(levelID);
txtServiceLevelName.Text = serviceLevel.LevelName;
txtServiceLevelDescr.Text = serviceLevel.LevelDescription;
btnUpdateServiceLevel.Enabled = (string.IsNullOrEmpty(txtServiceLevelName.Text)) ? false : true;
btnAddServiceLevel.Enabled = (string.IsNullOrEmpty(txtServiceLevelName.Text)) ? true : false;
break;
}
}
public void SaveSettings(UserSettings settings)
{
settings["ServiceLevels"] = "";
}
protected void btnUpdateServiceLevel_Click(object sender, EventArgs e)
{
Page.Validate("CreateServiceLevel");
if (!Page.IsValid)
return;
if (ViewState["ServiceLevelID"] == null)
return;
int levelID = (int)ViewState["ServiceLevelID"];
ES.Services.Organizations.UpdateSupportServiceLevel(levelID, txtServiceLevelName.Text, txtServiceLevelDescr.Text);
txtServiceLevelName.Text = string.Empty;
txtServiceLevelDescr.Text = string.Empty;
BindServiceLevels();
}
}
}

View file

@ -0,0 +1,132 @@
//------------------------------------------------------------------------------
// <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 SettingsServiceLevels {
/// <summary>
/// asyncTasks control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
/// <summary>
/// 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>
/// gvServiceLevels 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 gvServiceLevels;
/// <summary>
/// secServiceLevel control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secServiceLevel;
/// <summary>
/// ServiceLevel 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 ServiceLevel;
/// <summary>
/// lblServiceLevelName 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 lblServiceLevelName;
/// <summary>
/// txtServiceLevelName 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 txtServiceLevelName;
/// <summary>
/// valRequireServiceLevelName 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 valRequireServiceLevelName;
/// <summary>
/// lblServiceLevelDescr 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 lblServiceLevelDescr;
/// <summary>
/// txtServiceLevelDescr 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 txtServiceLevelDescr;
/// <summary>
/// btnAddServiceLevel 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 btnAddServiceLevel;
/// <summary>
/// btnUpdateServiceLevel 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 btnUpdateServiceLevel;
/// <summary>
/// txtStatus 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 txtStatus;
}
}

View file

@ -13,7 +13,7 @@
<ItemTemplate>
<div class="Quota">
<div class="Left">
<%# GetSharedLocalizedString("Quota." + (string)Eval("QuotaName"))%>:
<%# GetQuotaTitle((string)Eval("QuotaName"), (string)Eval("QuotaDescription"))%>:
</div>
<div class="Viewer">
<uc1:QuotaViewer ID="quota" runat="server"

View file

@ -75,5 +75,13 @@ namespace WebsitePanel.Portal
{
return new DataView(dsQuotas.Tables[1], "GroupID=" + groupId.ToString(), "", DataViewRowState.CurrentRows);
}
public string GetQuotaTitle(string quotaName, string quotaDescription)
{
return quotaName.Contains("ServiceLevel") ?
(string.IsNullOrEmpty(quotaDescription) ?
string.Empty : quotaDescription).ToString()
: GetSharedLocalizedString("Quota." + quotaName);
}
}
}

View file

@ -1,31 +1,3 @@
// Copyright (c) 2014, 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.

View file

@ -5,6 +5,10 @@
<asp:HyperLink ID="lnkWebsitePanelPolicy" runat="server" meta:resourcekey="lnkWebsitePanelPolicy"
Text="WebsitePanel Policy" NavigateUrl='<%# GetSettingsLink("WebsitePanelPolicy", "SettingsWebsitePanelPolicy") %>'></asp:HyperLink>
</li>
<li>
<asp:HyperLink ID="lnkServiceLevels" runat="server" meta:resourcekey="lnkServiceLevels"
Text="Service Levels" NavigateUrl='<%# GetSettingsLink("ServiceLevels", "SettingsServiceLevels") %>'></asp:HyperLink>
</li>
<li>
<asp:HyperLink ID="lnkWebPolicy" runat="server" meta:resourcekey="lnkWebPolicy"
Text="WEB Policy" NavigateUrl='<%# GetSettingsLink("WebPolicy", "SettingsWebPolicy") %>'></asp:HyperLink>

View file

@ -1,32 +1,3 @@
// Copyright (c) 2014, 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.
@ -50,6 +21,15 @@ namespace WebsitePanel.Portal {
/// </remarks>
protected global::System.Web.UI.WebControls.HyperLink lnkWebsitePanelPolicy;
/// <summary>
/// lnkServiceLevels 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.HyperLink lnkServiceLevels;
/// <summary>
/// lnkWebPolicy control.
/// </summary>

View file

@ -210,6 +210,13 @@
<Compile Include="Code\ReportingServices\IResourceStorage.cs" />
<Compile Include="Code\ReportingServices\ReportingServicesUtils.cs" />
<Compile Include="Code\UserControls\Tab.cs" />
<Compile Include="SettingsServiceLevels.ascx.cs">
<DependentUpon>SettingsServiceLevels.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="SettingsServiceLevels.ascx.designer.cs">
<DependentUpon>SettingsServiceLevels.ascx</DependentUpon>
</Compile>
<Compile Include="CRM\CRMStorageSettings.ascx.cs">
<DependentUpon>CRMStorageSettings.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
@ -4138,6 +4145,7 @@
</ItemGroup>
<ItemGroup>
<Content Include="ApplyEnableHardQuotaFeature.ascx" />
<Content Include="SettingsServiceLevels.ascx" />
<Content Include="CRM\CRMStorageSettings.ascx" />
<Content Include="ExchangeServer\EnterpriseStorageCreateDriveMap.ascx" />
<Content Include="ExchangeServer\EnterpriseStorageDriveMaps.ascx" />
@ -5421,6 +5429,7 @@
<Content Include="ProviderControls\App_LocalResources\IceWarp_EditGroup.ascx.resx" />
<Content Include="ProviderControls\App_LocalResources\IceWarp_EditList.ascx.resx" />
<Content Include="ProviderControls\App_LocalResources\IceWarp_Settings.ascx.resx" />
<Content Include="App_LocalResources\SettingsServiceLevels.ascx.resx" />
<EmbeddedResource Include="UserControls\App_LocalResources\EditDomainsList.ascx.resx">
<SubType>Designer</SubType>
</EmbeddedResource>