Searchbox controls replaced by JQuery autocomplete.

This commit is contained in:
alexY 2015-04-27 16:43:30 +03:00
parent 5f31a9f180
commit 837e1fec61
43 changed files with 1545 additions and 425 deletions

View file

@ -9798,3 +9798,229 @@ GO
UPDATE [dbo].[ServiceItemTypes] SET TypeName ='WebsitePanel.Providers.SharePoint.SharePointEnterpriseSiteCollection, WebsitePanel.Providers.Base' WHERE DisplayName = 'SharePointEnterpriseSiteCollection'
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetSearchObject')
DROP PROCEDURE GetSearchObject
CREATE PROCEDURE [dbo].[GetSearchObject]
(
@ActorID int,
@UserID int,
@FilterColumn nvarchar(50) = '',
@FilterValue nvarchar(50) = '',
@StatusID int,
@RoleID int,
@SortColumn nvarchar(50),
@StartRow int,
@MaximumRows int = 0,
@Recursive bit,
@ColType nvarchar(50) = ''
)
AS
IF dbo.CheckActorUserRights(@ActorID, @UserID) = 0
RAISERROR('You are not allowed to access this account', 16, 1)
DECLARE @columnUsername nvarchar(20)
SET @columnUsername = 'Username'
DECLARE @columnEmail nvarchar(20)
SET @columnEmail = 'Email'
DECLARE @columnCompanyName nvarchar(20)
SET @columnCompanyName = 'CompanyName'
DECLARE @columnFullName nvarchar(20)
SET @columnFullName = 'FullName'
DECLARE @curUsers cursor
DECLARE @curSpace cursor
DECLARE @sqlSpace nvarchar(2000)
DECLARE @sqlUsers nvarchar(2000)
DECLARE @sqlReturn nvarchar(2000)
IF @FilterColumn = '' AND @FilterValue <> ''
SET @FilterColumn = 'TextSearch'
SET @sqlUsers = '
DECLARE @HasUserRights bit
SET @HasUserRights = dbo.CheckActorUserRights(@ActorID, @UserID)
DECLARE @Users TABLE
(
ItemPosition int IDENTITY(0,1),
UserID int
)
INSERT INTO @Users (UserID)
SELECT
U.UserID
FROM UsersDetailed AS U
WHERE
U.UserID <> @UserID AND U.IsPeer = 0 AND
(
(@Recursive = 0 AND OwnerID = @UserID) OR
(@Recursive = 1 AND dbo.CheckUserParent(@UserID, U.UserID) = 1)
)
AND ((@StatusID = 0) OR (@StatusID > 0 AND U.StatusID = @StatusID))
AND ((@RoleID = 0) OR (@RoleID > 0 AND U.RoleID = @RoleID))
AND @HasUserRights = 1
SET @curValue = cursor local for
SELECT
U.ItemID,
U.TextSearch,
U.ColumnType,
''Users'' as FullType,
0 as PackageID
FROM @Users AS TU
INNER JOIN
(
SELECT ItemID, TextSearch, ColumnType
FROM(
SELECT U0.UserID as ItemID, U0.Username as TextSearch, @columnUsername as ColumnType
FROM dbo.Users AS U0
UNION
SELECT U1.UserID as ItemID, U1.Email as TextSearch, @columnEmail as ColumnType
FROM dbo.Users AS U1
UNION
SELECT U2.UserID as ItemID, U2.CompanyName as TextSearch, @columnCompanyName as ColumnType
FROM dbo.Users AS U2
UNION
SELECT U3.UserID as ItemID, U3.FirstName + '' '' + U3.LastName as TextSearch, @columnFullName as ColumnType
FROM dbo.Users AS U3) as U
WHERE TextSearch<>'' '' OR ISNULL(TextSearch, 0) > 0
)
AS U ON TU.UserID = U.ItemID'
SET @sqlUsers = @sqlUsers + ' open @curValue'
exec sp_executesql @sqlUsers, N'@UserID int, @FilterValue nvarchar(50), @ActorID int, @Recursive bit, @StatusID int, @RoleID int, @columnUsername nvarchar(20), @columnEmail nvarchar(20), @columnCompanyName nvarchar(20), @columnFullName nvarchar(20), @curValue cursor output',
@UserID, @FilterValue, @ActorID, @Recursive, @StatusID, @RoleID, @columnUsername, @columnEmail, @columnCompanyName, @columnFullName, @curValue=@curUsers output
SET @sqlSpace = '
DECLARE @ItemsService TABLE
(
ItemID int
)
INSERT INTO @ItemsService (ItemID)
SELECT
SI.ItemID
FROM ServiceItems AS SI
INNER JOIN Packages AS P ON P.PackageID = SI.PackageID
INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID
WHERE
dbo.CheckUserParent(@UserID, P.UserID) = 1
DECLARE @ItemsDomain TABLE
(
ItemID int
)
INSERT INTO @ItemsDomain (ItemID)
SELECT
D.DomainID
FROM Domains AS D
INNER JOIN Packages AS P ON P.PackageID = D.PackageID
INNER JOIN UsersDetailed AS U ON P.UserID = U.UserID
WHERE
dbo.CheckUserParent(@UserID, P.UserID) = 1
SET @curValue = cursor local for
SELECT
SI.ItemID as ItemID,
SI.ItemName as TextSearch,
STYPE.DisplayName as ColumnType,
SI.ItemName as FullType,
SI.PackageID as PackageID
FROM @ItemsService AS I
INNER JOIN ServiceItems AS SI ON I.ItemID = SI.ItemID
INNER JOIN ServiceItemTypes AS STYPE ON SI.ItemTypeID = STYPE.ItemTypeID
WHERE STYPE.Searchable = 1
UNION
SELECT
D.DomainID AS ItemID,
D.DomainName as TextSearch,
''Domain'' as ColumnType,
''Domain'' as FullType,
D.PackageID as PackageID
FROM @ItemsDomain AS I
INNER JOIN Domains AS D ON I.ItemID = D.DomainID
WHERE D.IsDomainPointer=0'
SET @sqlSpace = @sqlSpace + ' open @curValue'
exec sp_executesql @sqlSpace, N'@UserID int, @FilterValue nvarchar(50), @ActorID int, @curValue cursor output',
@UserID, @FilterValue, @ActorID, @curValue=@curSpace output
SET @sqlReturn = '
DECLARE @ItemID int
DECLARE @TextSearch nvarchar(500)
DECLARE @ColumnType nvarchar(50)
DECLARE @FullType nvarchar(50)
DECLARE @PackageID int
DECLARE @EndRow int
SET @EndRow = @StartRow + @MaximumRows
DECLARE @ItemsAll TABLE
(
ItemPosition int IDENTITY(1,1),
ItemID int,
TextSearch nvarchar(500),
ColumnType nvarchar(50),
FullType nvarchar(50),
PackageID int
)
FETCH NEXT FROM @curSpaceValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @ItemsAll(ItemID, TextSearch, ColumnType, FullType, PackageID)
VALUES(@ItemID, @TextSearch, @ColumnType, @FullType, @PackageID)
FETCH NEXT FROM @curSpaceValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID
END
FETCH NEXT FROM @curUsersValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @ItemsAll(ItemID, TextSearch, ColumnType, FullType, PackageID)
VALUES(@ItemID, @TextSearch, @ColumnType, @FullType, @PackageID)
FETCH NEXT FROM @curUsersValue INTO @ItemID, @TextSearch, @ColumnType, @FullType, @PackageID
END
DECLARE @ItemsReturn TABLE
(
ItemPosition int IDENTITY(1,1),
ItemID int,
TextSearch nvarchar(500),
ColumnType nvarchar(50),
FullType nvarchar(50),
PackageID int
)
INSERT INTO @ItemsReturn(ItemID, TextSearch, ColumnType, FullType, PackageID)
SELECT ItemID, TextSearch, ColumnType, FullType, PackageID
FROM @ItemsAll AS IA'
IF @FilterValue <> ''
SET @sqlReturn = @sqlReturn + ' WHERE IA.' + @FilterColumn + ' LIKE @FilterValue '
IF @SortColumn <> '' AND @SortColumn IS NOT NULL
SET @sqlReturn = @sqlReturn + ' ORDER BY ' + @SortColumn + ' '
SET @sqlReturn = @sqlReturn + '
SELECT COUNT(ItemID) FROM @ItemsReturn;
SELECT DISTINCT(ColumnType) FROM @ItemsReturn;
SELECT ItemPosition, ItemID, TextSearch, ColumnType, FullType, PackageID
FROM @ItemsReturn AS IR WHERE (1 = 1)
'
IF @MaximumRows > 0
SET @sqlReturn = @sqlReturn + ' AND IR.ItemPosition BETWEEN @StartRow AND @EndRow';
IF @ColType <> ''
SET @sqlReturn = @sqlReturn + ' AND ColumnType in ( ' + @ColType + ' ) ';
exec sp_executesql @sqlReturn, N'@StartRow int, @MaximumRows int, @FilterValue nvarchar(50), @curSpaceValue cursor, @curUsersValue cursor',
@StartRow, @MaximumRows, @FilterValue, @curSpace, @curUsers
CLOSE @curSpace
DEALLOCATE @curSpace
CLOSE @curUsers
DEALLOCATE @curUsers
RETURN

View file

@ -907,6 +907,27 @@ namespace WebsitePanel.EnterpriseServer {
return ((System.Data.DataSet)(results[0]));
}
/// <remarks/>
/// //TODO START
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetSearchObject", RequestNamespace = "http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace = "http://smbsaas/websitepanel/enterpriseserver", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public System.Data.DataSet GetSearchObject(int userId, string filterColumn, string filterValue, int statusId, int roleId, string sortColumn, int startRow, int maximumRows, string colType)
{
object[] results = this.Invoke("GetSearchObject", new object[] {
userId,
filterColumn,
filterValue,
statusId,
roleId,
sortColumn,
startRow,
maximumRows,
colType
});
return ((System.Data.DataSet)(results[0]));
}
//TODO END
/// <remarks/>
public void SearchServiceItemsPagedAsync(int userId, int itemTypeId, string filterValue, string sortColumn, int startRow, int maximumRows) {
this.SearchServiceItemsPagedAsync(userId, itemTypeId, filterValue, sortColumn, startRow, maximumRows, null);

View file

@ -138,6 +138,27 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@recursive", recursive));
}
//TODO START
public static DataSet GetSearchObject(int actorId, int userId, string filterColumn, string filterValue,
int statusId, int roleId, string sortColumn, int startRow, int maximumRows, string colType, bool recursive)
{
return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "GetSearchObject",
new SqlParameter("@actorId", actorId),
new SqlParameter("@UserID", userId),
new SqlParameter("@FilterColumn", VerifyColumnName(filterColumn)),
new SqlParameter("@FilterValue", VerifyColumnValue(filterValue)),
new SqlParameter("@statusId", statusId),
new SqlParameter("@roleId", roleId),
new SqlParameter("@SortColumn", VerifyColumnName(sortColumn)),
new SqlParameter("@startRow", startRow),
new SqlParameter("@maximumRows", maximumRows),
new SqlParameter("@recursive", recursive),
new SqlParameter("@ColType", colType));
}
//TODO END
public static DataSet GetUsersSummary(int actorId, int userId)
{
return SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure,

View file

@ -317,6 +317,15 @@ namespace WebsitePanel.EnterpriseServer
sortColumn, startRow, maximumRows);
}
//TODO START
public static DataSet GetSearchObject(int userId, string filterColumn, string filterValue,
int statusId, int roleId, string sortColumn, int startRow, int maximumRows, string colType)
{
return DataProvider.GetSearchObject(SecurityContext.User.UserId, userId,
filterColumn, filterValue, statusId, roleId, sortColumn, startRow, maximumRows, colType, false);
}
//TODO END
public static DataSet GetPackageQuotas(int packageId)
{
return DataProvider.GetPackageQuotas(SecurityContext.User.UserId, packageId);

View file

@ -134,6 +134,16 @@ namespace WebsitePanel.EnterpriseServer
sortColumn, startRow, maximumRows);
}
//TODO START
[WebMethod]
public DataSet GetSearchObject(int userId, string filterColumn, string filterValue,
int statusId, int roleId, string sortColumn, int startRow, int maximumRows, string colType)
{
return PackageController.GetSearchObject(userId, filterColumn, filterValue, statusId, roleId, sortColumn, startRow, maximumRows, colType);
}
//TODO END
[WebMethod]
public DataSet GetPackagesPaged(int userId, string filterColumn, string filterValue,
string sortColumn, int startRow, int maximumRows)

View file

@ -17,7 +17,7 @@
<OldToolsVersion>4.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile />
<UseIISExpress>false</UseIISExpress>
<IISExpressSSLPort />
@ -80,6 +80,7 @@
<Reference Include="System.ServiceModel" />
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Web" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.Extensions" />

View file

@ -0,0 +1 @@
<%@ WebHandler Language="C#" Class="WebsitePanel.WebPortal.WebsitePanelAjaxHandler,WebsitePanel.Portal.Modules" %>

View file

@ -29,6 +29,9 @@
<NestedSpacesPage>NestedSpaces</NestedSpacesPage>
<UsersSearchPage>SearchUsers</UsersSearchPage>
<SpacesSearchPage>SearchSpaces</SpacesSearchPage>
<!--TODO START-->
<SearchObjectPage>SearchObject</SearchObjectPage>
<!--TODO END-->
<LoggedUserAccountPage>LoggedUserDetails</LoggedUserAccountPage>
<!-- Skins and Containers -->
<PortalSkin>Browse2.ascx</PortalSkin>

View file

@ -25,6 +25,14 @@
</Controls>
</ModuleDefinition>
<!--TODO START-->
<ModuleDefinition id="SearchObject">
<Controls>
<Control key="" src="WebsitePanel/SearchObject.ascx" title="SearchObject" type="View" />
</Controls>
</ModuleDefinition>
<!--TODO END-->
<!-- User Account -->
<ModuleDefinition id="LoggedUserDetails">
<Controls>

View file

@ -32,6 +32,14 @@
</Content>
</Page>
<!--TODO START-->
<Page name="SearchObject" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" hidden="True" skin="Browse1.ascx">
<Content id="ContentPane">
<Module moduleDefinitionID="SearchObject" title="SearchObject" icon="sphere_zoom_48.png" container="Edit.ascx" />
</Content>
</Page>
<!--TODO END-->
<Page name="Home" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" skin="Browse3.ascx" align="right">
<Content id="LeftPane">
<Module moduleDefinitionID="UserAccountMenu" title="UserMenu" container="Clear.ascx">

View file

@ -711,6 +711,9 @@
<data name="ModuleTitle.SearchSpaces" xml:space="preserve">
<value>Search Hosting Spaces</value>
</data>
<data name="ModuleTitle.SearchObject" xml:space="preserve">
<value>Search Objects</value>
</data>
<data name="ModuleTitle.SearchUsers" xml:space="preserve">
<value>Search User Accounts</value>
</data>

View file

@ -141,6 +141,12 @@
<data name="PageTitle.SearchSpaces" xml:space="preserve">
<value>{user} - Search Hosting Spaces</value>
</data>
<data name="PageName.SearchObject" xml:space="preserve">
<value>Search Objects</value>
</data>
<data name="PageTitle.SearchObject" xml:space="preserve">
<value>{user} - Search Objects</value>
</data>
<data name="PageName.Home" xml:space="preserve">
<value>Account Home</value>
</data>

View file

@ -304,3 +304,75 @@ p.warningText {font-size:14px; color:Red; text-align:center;}
.LinkText {color:#428bca;}
.WrapText { white-space: normal;}
.chosen-container { margin-top: -30px; }
.ui-autocomplete {z-index: 200 !important; }
.ui-button {
padding: 5px 5px;
margin: 3px;
background: #20A0D0;
color: white;
border: 1px solid #2080A0;
float: left;
cursor: pointer;
display: block;
}
.ui-button:hover {
background: #20B0E0;
}
.ui-popupdialog {
display: none;
position: absolute;
background-color: #FFF;
border: 1px solid #C0C0C0;
border: 1px solid rgba(0, 0, 0, 0.15);
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
background-clip: padding-box;
}
.ui-popupdialog .title {
padding: 5px;
background: #F8F8F8;
}
.ui-popupdialog .content {
padding: 10px;
}
.ui-popupdialog .actions {
padding: 5px;
border-top: 1px solid #C0C0C0;
background: #F0F0F0;
}
.ui-menu {
background-color: #FFF;
border: 1px solid #C0C0C0;
border: 1px solid rgba(0, 0, 0, 0.15);
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
background-clip: padding-box;
}
.ui-menu-item {
}
.ui-widget-content {
background: #FFF;
}
.ui-corner-all {
border-radius: 0px;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
}
.ui-menu-item .ui-state-hover
{
background: #f0f0f0;
border-radius: 0px;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
border-color: #f0f0f0;
color: #000;
}
.ui-menu-item:hover {
background-color: #f0f0f0;
}

View file

@ -842,6 +842,13 @@ namespace WebsitePanel.Portal
return PortalConfiguration.SiteSettings["SpacesSearchPage"];
}
//TODO START
public static string GetObjectSearchPageId()
{
return PortalConfiguration.SiteSettings["SearchObjectPage"];
}
//TODO END
public static string GetNestedSpacesPageId()
{
return PortalConfiguration.SiteSettings["NestedSpacesPage"];

View file

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
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">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</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.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:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<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" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</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>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="gvType.Header" xml:space="preserve">
<value>Type</value>
</data>
<data name="gvText.Header" xml:space="preserve">
<value>Search text</value>
</data>
<data name="gvFullType.Header" xml:space="preserve">
<value>Full Type</value>
</data>
</root>

View file

@ -0,0 +1,68 @@
using System;
using System.Web;
using System.Web.Script.Serialization;
using System.Collections.Generic;
using System.Data;
using WebsitePanel.Portal;
namespace WebsitePanel.WebPortal
{
public class WebsitePanelAjaxHandler : IHttpHandler
{
public bool IsReusable { get { return true; } }
public void ProcessRequest(HttpContext context)
{
String filterValue = context.Request.Params["term"];
String fullType = context.Request.Params["fullType"];
String columnType = context.Request.Params["columnType"];
if (fullType == "Spaces")
{
String strItemType = context.Request.Params["itemType"];
int itemType = Int32.Parse(strItemType);
DataSet dsObjectItems = ES.Services.Packages.SearchServiceItemsPaged(PanelSecurity.EffectiveUserId, itemType,
String.Format("%{0}%", filterValue),
"",0, 100);
DataTable dt = dsObjectItems.Tables[1];
List<Dictionary<string, string>> dataList = new List<Dictionary<string, string>>();
for (int i = 0; i < dt.Rows.Count; ++i)
{
DataRow row = dt.Rows[i];
Dictionary<string, string> obj = new Dictionary<string, string>();
obj["ColumnType"] = "PackageName";
obj["TextSearch"] = row["PackageName"].ToString();
obj["FullType"] = "Space";
dataList.Add(obj);
}
var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(dataList);
context.Response.ContentType = "text/plain";
context.Response.Write(json);
}
else
{
DataSet dsObjectItems = ES.Services.Packages.GetSearchObject(PanelSecurity.EffectiveUserId, null,
String.Format("%{0}%", filterValue),
0, 0, "", 0, 100, columnType);
DataTable dt = dsObjectItems.Tables[2];
List<Dictionary<string, string>> dataList = new List<Dictionary<string, string>>();
for (int i = 0; i < dt.Rows.Count; ++i)
{
DataRow row = dt.Rows[i];
Dictionary<string, string> obj = new Dictionary<string, string>();
obj["ColumnType"] = row["ColumnType"].ToString();
obj["TextSearch"] = row["TextSearch"].ToString();
obj["FullType"] = row["FullType"].ToString();
dataList.Add(obj);
}
var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(dataList);
context.Response.ContentType = "text/plain";
context.Response.Write(json);
}
}
}
};

View file

@ -36,6 +36,7 @@ using System.Web.Caching;
using WebsitePanel.EnterpriseServer;
using System.Collections;
using System.Collections.Generic;
namespace WebsitePanel.Portal
{
@ -244,5 +245,33 @@ namespace WebsitePanel.Portal
return dsServiceItemsPaged.Tables[1];
}
#endregion
//TODO START
#region Service Items Paged Search
DataSet dsObjectItemsPaged;
public int SearchObjectItemsPagedCount(string filterColumn, string filterValue, string colType)
{
return (int)dsObjectItemsPaged.Tables[0].Rows[0][0];
}
public DataTable SearchObjectItemsPaged(int maximumRows, int startRowIndex, string sortColumn,
string filterColumn, string filterValue, string colType)
{
dsObjectItemsPaged = ES.Services.Packages.GetSearchObject(PanelSecurity.EffectiveUserId, filterColumn,
String.Format("%{0}%", filterValue),
0, 0, sortColumn, startRowIndex, maximumRows, colType);
return dsObjectItemsPaged.Tables[2];
}
public DataTable SearchObjectTypes(string filterColumn, string filterValue, string sortColumn)
{
dsObjectItemsPaged = ES.Services.Packages.GetSearchObject(PanelSecurity.EffectiveUserId, filterColumn,
String.Format("%{0}%", filterValue),
0, 0, sortColumn, 0, 0, "");
return dsObjectItemsPaged.Tables[1];
}
//TODO END
#endregion
}
}

View file

@ -0,0 +1,125 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SearchObject.ascx.cs" Inherits="WebsitePanel.Portal.SearchObject" %>
<%@ Import Namespace="WebsitePanel.Portal" %>
<script>
var estop = function (e) {
if (!e) e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return e;
}
var CPopupDialog = function (el, e) {
if (typeof el == 'string')
el = document.getElementById(el);
e = estop(e);
var oldclick = document.body.onclick;
el.onclick = estop;
function close() {
el.style.display = "none";
document.body.onclick = oldclick;
}
function show(x, y) {
el.style.left = x ? x : e.clientX + document.documentElement.scrollLeft + "px";
el.style.top = y ? y : e.clientY + document.documentElement.scrollTop + "px";
el.style.display = "block";
document.body.onclick = close;
}
show();
};
$(document).ready(function () {
var loadFilters = function()
{
var typesSelected = JSON.parse($("#tbFilters").val());
$("#mydialog input[rel]").each(function () {
var rel = $(this).attr('rel');
if (typesSelected.indexOf(rel) >= 0)
$(this).val("1");
})
}
$("#btnSelectFilter").click(function(e)
{
var typesSelected = [];
$("#mydialog input[rel]").each(function () {
var val = $(this).attr("checked");
if (val) typesSelected.push($(this).attr('rel'));
});
$("#tbFilters").val(JSON.stringify(typesSelected));
document.forms[0].submit();
})
loadFilters();
});
</script>
<asp:GridView id="gvObjects" runat="server" AutoGenerateColumns="False"
AllowPaging="True" AllowSorting="True"
CssSelectorClass="NormalGridView"
DataSourceID="odsObjectsPaged" EnableViewState="False"
EmptyDataText="gvObjects">
<Columns>
<asp:TemplateField HeaderText="gvType" SortExpression="ColumnType">
<HeaderTemplate>
<a href="javascript: void(0)" onclick="CPopupDialog('mydialog',event)">Type</a>
</HeaderTemplate>
<ItemTemplate>
<%# Eval("ColumnType") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="TextSearch" HeaderText="gvText" HeaderStyle-Wrap="false">
<ItemTemplate>
<asp:hyperlink id=lnkUser runat="server" NavigateUrl='<%# GetItemPageUrl((string)Eval("FullType"), (string)Eval("ColumnType"), (int)Eval("ItemID"), (int)Eval("PackageID")) %>'>
<%# Eval("TextSearch") %>
</asp:hyperlink>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FullType" HtmlEncode="false" SortExpression="FullType" HeaderText="gvFullType">
<HeaderStyle Wrap="false" />
</asp:BoundField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="odsObjectsPaged" runat="server" EnablePaging="True" SelectCountMethod="SearchObjectItemsPagedCount"
SelectMethod="SearchObjectItemsPaged" SortParameterName="sortColumn" TypeName="WebsitePanel.Portal.PackagesHelper" OnSelected="odsObjectPaged_Selected" OnSelecting="odsObjectPaged_Selecting">
<SelectParameters>
<asp:QueryStringParameter Name="filterColumn" QueryStringField="Criteria" />
<asp:QueryStringParameter Name="filterValue" QueryStringField="Query" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="odsObjectTypes" runat="server" EnablePaging="false"
SelectMethod="SearchObjectTypes" SortParameterName="sortColumn" TypeName="WebsitePanel.Portal.PackagesHelper">
<SelectParameters>
<asp:QueryStringParameter Name="filterColumn" QueryStringField="Criteria" />
<asp:QueryStringParameter Name="filterValue" QueryStringField="Query" />
</SelectParameters>
</asp:ObjectDataSource>
<div id="mydialog" class="ui-popupdialog">
<div class="title">Select filter</div>
<div class="content">
<asp:GridView runat="server" DataSourceID="odsObjectTypes" SortParameterName="sortColumn" ShowHeader="false" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<input type="checkbox" runat="server" rel='<%# Eval("ColumnType") %>'></input>
<%# Eval("ColumnType") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<div class="actions">
<a id="btnSelectFilter" href="javascript: void(0)" class="ui-button">Apply</a>
<a onclick="document.body.onclick.apply(event)" href="javascript: void(0)" class="ui-button">Close</a>
<div style="clear:both"></div>
</div>
<asp:TextBox ClientIDMode="Static" ID="tbFilters" type="hidden" runat="server"></asp:TextBox>
</div>

View file

@ -0,0 +1,86 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Script.Serialization;
using WebsitePanel.WebPortal;
namespace WebsitePanel.Portal
{
public partial class SearchObject : WebsitePanelModuleBase
{
const string TYPE_WEBSITE = "WebSite";
const string TYPE_DOMAIN = "Domain";
const string TYPE_ORGANIZATION = "Organization";
const string PID_SPACE_WEBSITES = "SpaceWebSites";
const string PID_SPACE_DIMAINS = "SpaceDomains";
const string PID_SPACE_EXCHANGESERVER = "SpaceExchangeServer";
String m_strColTypes = "";
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
var jsonSerialiser = new JavaScriptSerializer();
String[] aTypes = jsonSerialiser.Deserialize<String[]>(tbFilters.Text);
if ((aTypes != null) && (aTypes.Length > 0))
m_strColTypes = "'" + String.Join("','", aTypes) + "'";
else
m_strColTypes = "";
}
}
protected void odsObjectPaged_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["colType"] = m_strColTypes;
}
protected void odsObjectPaged_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
ProcessException(e.Exception.InnerException);
e.ExceptionHandled = true;
}
}
public string GetItemPageUrl(string fullType, string itemType, int itemId, int spaceId)
{
string res = "";
if (fullType.Equals("Users"))
{
res = PortalUtils.GetUserHomePageUrl(itemId);
}
else
{
switch (itemType)
{
case TYPE_WEBSITE:
res = PortalUtils.NavigatePageURL(PID_SPACE_WEBSITES, "ItemID", itemId.ToString(),
PortalUtils.SPACE_ID_PARAM + "=" + spaceId, DefaultPage.CONTROL_ID_PARAM + "=" + "edit_item",
"moduleDefId=websites");
break;
case TYPE_DOMAIN:
res = PortalUtils.NavigatePageURL(PID_SPACE_DIMAINS, "DomainID", itemId.ToString(),
PortalUtils.SPACE_ID_PARAM + "=" + spaceId, DefaultPage.CONTROL_ID_PARAM + "=" + "edit_item",
"moduleDefId=domains");
break;
case TYPE_ORGANIZATION:
res = PortalUtils.NavigatePageURL(PID_SPACE_EXCHANGESERVER, "ItemID", itemId.ToString(),
PortalUtils.SPACE_ID_PARAM + "=" + spaceId, DefaultPage.CONTROL_ID_PARAM + "=" + "organization_home",
"moduleDefId=ExchangeServer");
break;
default:
res = PortalUtils.GetSpaceHomePageUrl(itemId);
break;
}
}
return res;
}
}
}

View file

@ -0,0 +1,51 @@
//------------------------------------------------------------------------------
// <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 SearchObject {
/// <summary>
/// gvObjects 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 gvObjects;
/// <summary>
/// odsObjectsPaged 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 odsObjectsPaged;
/// <summary>
/// odsObjectTypes 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 odsObjectTypes;
/// <summary>
/// tbFilters 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 tbFilters;
}
}

View file

@ -3,13 +3,94 @@
<%@ Register Src="UserControls/ServerDetails.ascx" TagName="ServerDetails" TagPrefix="uc3" %>
<%@ Register Src="UserControls/Comments.ascx" TagName="Comments" TagPrefix="uc4" %>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function () {
$("#tbSearch").autocomplete({
zIndex: 100,
source: function (request, response) {
$.ajax({
type: "post",
dataType: "json",
data: {
term: request.term,
fullType: 'Spaces',
itemType: $("#ddlItemType").val()
},
url: "AjaxHandler.ashx",
success: function (data) {
response($.map(data, function (item) {
return {
label: item.TextSearch,
code: item
};
}));
}
})
},
select: function (event, ui) {
var item = ui.item;
$("#ddlItemType").val(item.code.ColumnType);
$("#tbSearchFullType").val(item.code.FullType);
$("#tbSearchText").val(item.code.TextSearch);
}
});
});//]]>
</script>
<div class="FormButtonsBar">
<asp:Panel ID="tblSearch" runat="server" DefaultButton="cmdSearch" CssClass="NormalBold">
<asp:Panel ID="tblSearch" runat="server" DefaultButton="ImageButton1" CssClass="NormalBold">
<asp:Label ID="lblSearch" runat="server" meta:resourcekey="lblSearch"></asp:Label>
<asp:DropDownList ID="ddlItemType" runat="server" CssClass="NormalTextBox">
</asp:DropDownList><asp:TextBox ID="txtFilterValue" runat="server" CssClass="NormalTextBox" Width="100"></asp:TextBox><asp:ImageButton ID="cmdSearch" Runat="server" SkinID="SearchButton" meta:resourcekey="cmdSearch"
CausesValidation="false" OnClick="cmdSearch_Click" />
<div align="center">
<table>
<tr>
<td>
<asp:DropDownList ClientIDMode="Static" ID="ddlItemType" runat="server" CssClass="NormalTextBox">
</asp:DropDownList>
</td>
<td>
<table cellpadding="0" cellspacing="0" align="right">
<tr>
<td align="left" class="SearchQuery">
<div class="ui-widget">
<asp:TextBox
ID="tbSearch"
ClientIDMode="Static"
runat="server"
CssClass="NormalTextBox"
Width="120px"
style="vertical-align: middle; z-index: 100;"
>
</asp:TextBox>
<asp:TextBox
ID="tbSearchFullType"
ClientIDMode="Static"
runat="server"
type="hidden"
>
</asp:TextBox>
<asp:TextBox
ID="tbSearchText"
ClientIDMode="Static"
runat="server"
type="hidden"
>
</asp:TextBox>
<asp:ImageButton
ID="ImageButton1"
runat="server"
SkinID="SearchButton"
OnClick="cmdSearch_Click"
CausesValidation="false"
style="vertical-align: middle;"
/>
</div>
</td>
</tr>
</table>
</td>
</tr>
</asp:Panel>
</div>

View file

@ -77,7 +77,7 @@ namespace WebsitePanel.Portal
// bind filter
Utils.SelectListItem(ddlItemType, Request["ItemTypeID"]);
txtFilterValue.Text = Request["Query"];
tbSearch.Text = Request["Query"];
}
}
@ -119,7 +119,9 @@ namespace WebsitePanel.Portal
protected void cmdSearch_Click(object sender, ImageClickEventArgs e)
{
string query = txtFilterValue.Text.Trim().Replace("%", "");
string query = tbSearchText.Text.Trim().Replace("%", "");
if (query.Length == 0)
query = tbSearch.Text.Trim().Replace("%", "");
Response.Redirect(NavigateURL(
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(),

View file

@ -1,31 +1,3 @@
// Copyright (c) 2015, 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.
@ -68,22 +40,40 @@ namespace WebsitePanel.Portal {
protected global::System.Web.UI.WebControls.DropDownList ddlItemType;
/// <summary>
/// txtFilterValue control.
/// tbSearch 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 txtFilterValue;
protected global::System.Web.UI.WebControls.TextBox tbSearch;
/// <summary>
/// cmdSearch control.
/// tbSearchFullType 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.ImageButton cmdSearch;
protected global::System.Web.UI.WebControls.TextBox tbSearchFullType;
/// <summary>
/// tbSearchText 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 tbSearchText;
/// <summary>
/// ImageButton1 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.ImageButton ImageButton1;
/// <summary>
/// gvPackages control.

View file

@ -5,16 +5,100 @@
<%@ Register Src="UserControls/UserDetails.ascx" TagName="UserDetails" TagPrefix="uc2" %>
<%@ Register Src="UserControls/CollapsiblePanel.ascx" TagName="CollapsiblePanel" TagPrefix="wsp" %>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function () {
$("#tbSearch").autocomplete({
zIndex: 100,
source: function (request, response) {
$.ajax({
type: "post",
dataType: "json",
data: {
term: request.term,
fullType: 'Users',
columnType: "'" + $("#ddlFilterColumn").val() + "'"
},
url: "AjaxHandler.ashx",
success: function (data) {
response($.map(data, function (item) {
return {
label: item.TextSearch,
code: item
};
}));
}
})
},
select: function (event, ui) {
var item = ui.item;
$("#ddlFilterColumn").val(item.code.ColumnType);
$("#tbSearchFullType").val(item.code.FullType);
$("#tbSearchText").val(item.code.TextSearch);
}
});
});//]]>
</script>
<div class="FormButtonsBar">
<asp:Panel ID="tblSearch" runat="server" DefaultButton="cmdSearch" CssClass="NormalBold">
<asp:Panel ID="tblSearch" runat="server" CssClass="NormalBold" DefaultButton="ImageButton1">
<asp:Label ID="lblSearch" runat="server" meta:resourcekey="lblSearch"></asp:Label>
<asp:DropDownList ID="ddlFilterColumn" runat="server" CssClass="NormalTextBox" resourcekey="ddlFilterColumn">
<div align="center">
<table>
<tr>
<td>
<asp:DropDownList ClientIDMode="Static" ID="ddlFilterColumn" runat="server" CssClass="NormalTextBox" resourcekey="ddlFilterColumn">
<asp:ListItem Value="Username">Username</asp:ListItem>
<asp:ListItem Value="Email">Email</asp:ListItem>
<asp:ListItem Value="FullName">FullName</asp:ListItem>
<asp:ListItem Value="CompanyName">CompanyName</asp:ListItem>
</asp:DropDownList><asp:TextBox ID="txtFilterValue" runat="server" CssClass="NormalTextBox" Width="100"></asp:TextBox><asp:ImageButton ID="cmdSearch" Runat="server" SkinID="SearchButton" meta:resourcekey="cmdSearch"
CausesValidation="false" OnClick="cmdSearch_Click" />
</asp:DropDownList>
</td>
<td>
<table cellpadding="0" cellspacing="0" align="right">
<tr>
<td align="left" class="SearchQuery">
<div class="ui-widget">
<asp:TextBox
ID="tbSearch"
ClientIDMode="Static"
runat="server"
CssClass="NormalTextBox"
Width="120px"
style="vertical-align: middle; z-index: 100;"
>
</asp:TextBox>
<asp:TextBox
ID="tbSearchFullType"
ClientIDMode="Static"
runat="server"
type="hidden"
>
</asp:TextBox>
<asp:TextBox
ID="tbSearchText"
ClientIDMode="Static"
runat="server"
type="hidden"
>
</asp:TextBox>
<asp:ImageButton
ID="ImageButton1"
runat="server"
SkinID="SearchButton"
OnClick="cmdSearch_Click"
CausesValidation="false"
style="vertical-align: middle;"
/>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</asp:Panel>
</div>

View file

@ -46,7 +46,7 @@ namespace WebsitePanel.Portal
if (!IsPostBack)
{
Utils.SelectListItem(ddlFilterColumn, Request["Criteria"]);
txtFilterValue.Text = Request["Query"];
tbSearch.Text = Request["Query"];
}
}
@ -57,7 +57,9 @@ namespace WebsitePanel.Portal
protected void cmdSearch_Click(object sender, ImageClickEventArgs e)
{
string query = txtFilterValue.Text.Trim().Replace("%", "");
string query = tbSearchText.Text.Trim().Replace("%", "");
if (query.Length == 0)
query = tbSearch.Text.Trim().Replace("%", "");
Response.Redirect(NavigateURL(
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(),

View file

@ -1,31 +1,3 @@
// Copyright (c) 2015, 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.
@ -68,22 +40,40 @@ namespace WebsitePanel.Portal {
protected global::System.Web.UI.WebControls.DropDownList ddlFilterColumn;
/// <summary>
/// txtFilterValue control.
/// tbSearch 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 txtFilterValue;
protected global::System.Web.UI.WebControls.TextBox tbSearch;
/// <summary>
/// cmdSearch control.
/// tbSearchFullType 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.ImageButton cmdSearch;
protected global::System.Web.UI.WebControls.TextBox tbSearchFullType;
/// <summary>
/// tbSearchText 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 tbSearchText;
/// <summary>
/// ImageButton1 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.ImageButton ImageButton1;
/// <summary>
/// gvUsers control.

View file

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
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">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</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.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:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<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" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</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>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="gvType.Header" xml:space="preserve">
<value>Type</value>
</data>
<data name="gvText.Header" xml:space="preserve">
<value>Search text</value>
</data>
<data name="gvFullType.Header" xml:space="preserve">
<value>Full Type</value>
</data>
</root>

View file

@ -1,54 +1,87 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="GlobalSearch.ascx.cs" Inherits="WebsitePanel.Portal.SkinControls.GlobalSearch" %>
<style>
.ui-menu-item a {white-space: nowrap; }
</style>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function () {
$("#<%= tbSearch.ClientID %>").autocomplete({
zIndex: 100,
source: function(request, response) {
$.ajax({
type: "post",
dataType: "json",
data: {
term: request.term
},
url: "AjaxHandler.ashx",
success: function(data)
{
response($.map(data, function (item) {
return {
label: item.TextSearch + " [" + item.FullType + "]",
code: item
};
}));
}
})
},
select: function (event, ui) {
var item = ui.item;
$("#<%= tbSearchColumnType.ClientID %>").val(item.code.ColumnType);
$("#<%= tbSearchFullType.ClientID %>").val(item.code.FullType);
$("#<%= tbSearchText.ClientID %>").val(item.code.TextSearch);
}
});
});//]]>
</script>
<asp:UpdatePanel runat="server" ID="updatePanelUsers" UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<table cellpadding="0" cellspacing="0" align="right">
<tr>
<td align="left">
<asp:DataList ID="dlTabs" runat="server" RepeatDirection="Horizontal"
OnSelectedIndexChanged="dlTabs_SelectedIndexChanged" RepeatLayout="Table">
<ItemStyle Wrap="false" VerticalAlign="Top" />
<ItemTemplate>
<asp:LinkButton ID="lnkTab" runat="server" CommandName="select"
CausesValidation="false" CssClass="SearchMethod">
<%# Eval("Name") %>
</asp:LinkButton>
</ItemTemplate>
<SelectedItemStyle Wrap="false" />
<SelectedItemTemplate>
<table cellpadding="0" cellspacing="0">
<tr>
<td class="SearchMethodSide" valign="top"></td>
<td class="SearchMethodSelected" valign="top"><%# Eval("Name")%></td>
<td class="SearchMethodSide" valign="top"></td>
</tr>
</table>
</SelectedItemTemplate>
</asp:DataList>
</td>
</tr>
<tr>
<td align="left" class="SearchQuery">
<asp:MultiView ID="tabs" runat="server" ActiveViewIndex="0">
<asp:View ID="tabSearchUsers" runat="server">
<asp:Panel ID="pnlSearchUsers" runat="server" DefaultButton="btnSearchUsers">
<asp:DropDownList ID="ddlUserFields" runat="server" resourcekey="ddlUserFields" CssClass="NormalTextBox" Width="150px" style="vertical-align: middle;">
<asp:ListItem Value="Username">Username</asp:ListItem>
<asp:ListItem Value="Email">Email</asp:ListItem>
<asp:ListItem Value="FullName">FullName</asp:ListItem>
<asp:ListItem Value="CompanyName">CompanyName</asp:ListItem>
</asp:DropDownList><asp:TextBox ID="txtUsersQuery" runat="server" CssClass="NormalTextBox" Width="120px" style="vertical-align: middle;"></asp:TextBox><asp:ImageButton ID="btnSearchUsers" runat="server" SkinID="SearchButton" OnClick="btnSearchUsers_Click" CausesValidation="false" style="vertical-align: middle;" />
</asp:Panel>
</asp:View>
<asp:View ID="tabSearchSpaces" runat="server">
<asp:Panel ID="pnlSearchSpaces" runat="server" DefaultButton="btnSearchSpaces">
<asp:DropDownList ID="ddlItemType" runat="server" Width="150px" CssClass="NormalTextBox" style="vertical-align: middle;">
</asp:DropDownList><asp:TextBox ID="txtSpacesQuery" runat="server" CssClass="NormalTextBox" Width="120px" style="vertical-align: middle;"></asp:TextBox><asp:ImageButton ID="btnSearchSpaces" runat="server" SkinID="SearchButton" OnClick="btnSearchSpaces_Click" CausesValidation="false" style="vertical-align: middle;" />
</asp:Panel>
</asp:View>
</asp:MultiView>
<div class="ui-widget">
<asp:TextBox
ID="tbSearch"
runat="server"
CssClass="NormalTextBox"
Width="120px"
style="vertical-align: middle; z-index: 100;"
>
</asp:TextBox>
<asp:TextBox
ID="tbSearchColumnType"
runat="server"
type="hidden"
>
</asp:TextBox>
<asp:TextBox
ID="tbSearchFullType"
runat="server"
type="hidden"
>
</asp:TextBox>
<asp:TextBox
ID="tbSearchText"
runat="server"
type="hidden"
>
</asp:TextBox>
<asp:ImageButton
ID="ImageButton1"
runat="server"
SkinID="SearchButton"
OnClick="btnSearchObject_Click"
CausesValidation="false"
style="vertical-align: middle;"
/>
</div>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>

View file

@ -70,32 +70,20 @@ namespace WebsitePanel.Portal.SkinControls
protected void Page_Load(object sender, EventArgs e)
{
ClientScriptManager cs = Page.ClientScript;
cs.RegisterClientScriptInclude("jquery",ResolveUrl("~/JavaScript/jquery-1.4.4.min.js"));
cs.RegisterClientScriptInclude("jqueryui",ResolveUrl("~/JavaScript/jquery-ui-1.8.9.min.js"));
// cs.RegisterClientScriptBlock(this.GetType(), "jquerycss",
// "<link rel='stylesheet' type='text/css' href='" + ResolveUrl("~/App_Themes/Default/Styles/jquery-ui-1.8.9.css") + "' />");
if (!IsPostBack)
{
BindTabs();
BindItemTypes();
}
}
private void BindTabs()
{
List<Tab> tabsList = new List<Tab>();
if (PanelSecurity.EffectiveUser.Role != UserRole.User)
tabsList.Add(new Tab(0, GetLocalizedString("Users.Text")));
tabsList.Add(new Tab(1, GetLocalizedString("Spaces.Text")));
if(dlTabs.SelectedIndex == -1)
dlTabs.SelectedIndex = 0;
dlTabs.DataSource = tabsList.ToArray();
dlTabs.DataBind();
tabs.ActiveViewIndex = tabsList[dlTabs.SelectedIndex].Index;
}
private void BindItemTypes()
{
// bind item types
/* // bind item types
DataTable dtItemTypes = ES.Services.Packages.GetSearchableServiceItemTypes().Tables[0];
foreach (DataRow dr in dtItemTypes.Rows)
{
@ -108,28 +96,63 @@ namespace WebsitePanel.Portal.SkinControls
}
//
ddlItemType.Items.Add(new ListItem(localizedStr, dr["ItemTypeID"].ToString()));
}
}
protected void dlTabs_SelectedIndexChanged(object sender, EventArgs e)
{
BindTabs();
} */
}
protected void btnSearchUsers_Click(object sender, EventArgs e)
{
Response.Redirect(PortalUtils.NavigatePageURL(PortalUtils.GetUsersSearchPageId(),
/* Response.Redirect(PortalUtils.NavigatePageURL(PortalUtils.GetUsersSearchPageId(),
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(),
"Query=" + Server.UrlEncode(txtUsersQuery.Text),
"Criteria=" + ddlUserFields.SelectedValue));
"Criteria=" + ddlUserFields.SelectedValue)); */
}
protected void btnSearchSpaces_Click(object sender, EventArgs e)
{
Response.Redirect(PortalUtils.NavigatePageURL(PortalUtils.GetSpacesSearchPageId(),
/* Response.Redirect(PortalUtils.NavigatePageURL(PortalUtils.GetSpacesSearchPageId(),
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(),
"Query=" + Server.UrlEncode(txtSpacesQuery.Text),
"ItemTypeID=" + ddlItemType.SelectedValue));
"ItemTypeID=" + ddlItemType.SelectedValue)); */
}
//TODO START
protected void btnSearchObject_Click(object sender, EventArgs e)
{
String strColumnType = tbSearchColumnType.Text;
String strFullType = tbSearchFullType.Text;
String strText = tbSearchText.Text;
if (strText.Length > 0)
{
if (strFullType == "Users")
{
Response.Redirect(PortalUtils.NavigatePageURL(PortalUtils.GetUsersSearchPageId(),
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(),
"Query=" + Server.UrlEncode(strText),
"Criteria=" + Server.UrlEncode(strColumnType)
));
}
else if (strFullType == "Space")
{
Response.Redirect(PortalUtils.NavigatePageURL(PortalUtils.GetSpacesSearchPageId(),
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(),
"Query=" + Server.UrlEncode(strText),
"Criteria=" + Server.UrlEncode(strColumnType)
));
}
else
{
Response.Redirect(PortalUtils.NavigatePageURL(PortalUtils.GetObjectSearchPageId(),
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(),
"Query=" + Server.UrlEncode(strText)));
}
}
else
{
Response.Redirect(PortalUtils.NavigatePageURL(PortalUtils.GetObjectSearchPageId(),
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(),
"Query=" + Server.UrlEncode(tbSearch.Text)));
}
}
//TODO END
}
}

View file

@ -1,31 +1,3 @@
// Copyright (c) 2015, 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,111 +22,48 @@ namespace WebsitePanel.Portal.SkinControls {
protected global::System.Web.UI.UpdatePanel updatePanelUsers;
/// <summary>
/// dlTabs control.
/// tbSearch 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.DataList dlTabs;
protected global::System.Web.UI.WebControls.TextBox tbSearch;
/// <summary>
/// tabs control.
/// tbSearchColumnType 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.MultiView tabs;
protected global::System.Web.UI.WebControls.TextBox tbSearchColumnType;
/// <summary>
/// tabSearchUsers control.
/// tbSearchFullType 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.View tabSearchUsers;
protected global::System.Web.UI.WebControls.TextBox tbSearchFullType;
/// <summary>
/// pnlSearchUsers control.
/// tbSearchText 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 pnlSearchUsers;
protected global::System.Web.UI.WebControls.TextBox tbSearchText;
/// <summary>
/// ddlUserFields control.
/// ImageButton1 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 ddlUserFields;
/// <summary>
/// txtUsersQuery 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 txtUsersQuery;
/// <summary>
/// btnSearchUsers 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.ImageButton btnSearchUsers;
/// <summary>
/// tabSearchSpaces 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.View tabSearchSpaces;
/// <summary>
/// pnlSearchSpaces 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 pnlSearchSpaces;
/// <summary>
/// ddlItemType 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 ddlItemType;
/// <summary>
/// txtSpacesQuery 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 txtSpacesQuery;
/// <summary>
/// btnSearchSpaces 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.ImageButton btnSearchSpaces;
protected global::System.Web.UI.WebControls.ImageButton ImageButton1;
}
}

View file

@ -1,7 +1,95 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SearchBox.ascx.cs" Inherits="WebsitePanel.Portal.SearchBox" %>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function () {
$("#tbSearch").keypress(function () {
$("#tbSearchText").val('');
});
$("#tbSearch").autocomplete({
zIndex: 100,
source: function (request, response) {
$.ajax({
type: "post",
dataType: "json",
data: {
term: request.term,
fullType: '',
columnType: "'" + $("#ddlFilterColumn").val() + "'"
},
url: "AjaxHandler.ashx",
success: function (data) {
response($.map(data, function (item) {
return {
label: item.TextSearch,
code: item
};
}));
}
})
},
select: function (event, ui) {
var item = ui.item;
$("#ddlFilterColumn").val(item.code.ColumnType);
$("#tbSearchFullType").val(item.code.FullType);
$("#tbSearchText").val(item.code.TextSearch);
}
});
});//]]>
</script>
<asp:Panel ID="tblSearch" runat="server" DefaultButton="cmdSearch" CssClass="NormalBold">
<asp:Label ID="lblSearch" runat="server" meta:resourcekey="lblSearch" Visible="false"></asp:Label>
<asp:DropDownList ID="ddlFilterColumn" runat="server" CssClass="NormalTextBox" style="vertical-align: middle;">
</asp:DropDownList><asp:TextBox ID="txtFilterValue" runat="server" CssClass="NormalTextBox" Width="100" style="vertical-align: middle;"></asp:TextBox><asp:ImageButton ID="cmdSearch" Runat="server" meta:resourcekey="cmdSearch" SkinID="SearchButton"
CausesValidation="false" style="vertical-align: middle;"/>
<table>
<tr>
<td>
<asp:DropDownList ClientIDMode="Static" ID="ddlFilterColumn" runat="server" CssClass="NormalTextBox" resourcekey="ddlFilterColumn">
</asp:DropDownList>
</td>
<td>
<table cellpadding="0" cellspacing="0" align="right">
<tr>
<td align="left" class="SearchQuery">
<div class="ui-widget">
<asp:TextBox
ID="tbSearch"
ClientIDMode="Static"
runat="server"
CssClass="NormalTextBox"
Width="120px"
style="vertical-align: middle; z-index: 100;"
>
</asp:TextBox>
<asp:TextBox
ID="tbSearchFullType"
ClientIDMode="Static"
runat="server"
type="hidden"
>
</asp:TextBox>
<asp:TextBox
ID="tbSearchText"
ClientIDMode="Static"
runat="server"
type="hidden"
>
</asp:TextBox>
<asp:ImageButton
ID="cmdSearch"
runat="server"
SkinID="SearchButton"
CausesValidation="false"
OnClick="cmdSearch_Click"
style="vertical-align: middle;"
/>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</asp:Panel>

View file

@ -60,13 +60,23 @@ namespace WebsitePanel.Portal
{
get
{
string val = txtFilterValue.Text.Trim();
string val = tbSearchText.Text.Trim();
string valText = tbSearch.Text.Trim();
if (valText.Length == 0)
val = valText;
if (val.Length == 0)
val = tbSearch.Text.Trim();
val = val.Replace("%", "");
return "%" + val + "%";
}
set
{
txtFilterValue.Text = value;
if (value != null)
{
value = value.Replace("%", "");
tbSearch.Text = value;
tbSearchText.Text = value;
}
}
}
@ -83,7 +93,15 @@ namespace WebsitePanel.Portal
public override void Focus()
{
base.Focus();
txtFilterValue.Focus();
tbSearch.Focus();
}
protected void cmdSearch_Click(object sender, ImageClickEventArgs e)
{
Response.Redirect(NavigatePageURL(PortalUtils.GetUserCustomersPageId(),
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(),
"FilterColumn=" + ddlFilterColumn.SelectedValue,
"FilterValue=" + Server.UrlEncode(FilterValue)));
}
}
}

View file

@ -1,35 +1,6 @@
// Copyright (c) 2015, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.3053
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -69,13 +40,31 @@ namespace WebsitePanel.Portal {
protected global::System.Web.UI.WebControls.DropDownList ddlFilterColumn;
/// <summary>
/// txtFilterValue control.
/// tbSearch 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 txtFilterValue;
protected global::System.Web.UI.WebControls.TextBox tbSearch;
/// <summary>
/// tbSearchFullType 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 tbSearchFullType;
/// <summary>
/// tbSearchText 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 tbSearchText;
/// <summary>
/// cmdSearch control.

View file

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

@ -1,5 +1,7 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserCustomersSummary.ascx.cs" Inherits="WebsitePanel.Portal.UserCustomersSummary" %>
<%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="UserControls/CollapsiblePanel.ascx" %>
<%@ Register Src="UserControls/SearchBox.ascx" TagName="SearchBox" TagPrefix="uc1" %>
<%@ Import Namespace="WebsitePanel.Portal" %>
<div class="FormButtonsBar">
<div class="Left">
@ -7,14 +9,8 @@
runat="server" CssClass="Button1"></asp:Button>
</div>
<div class="Right">
<asp:Panel ID="tblSearch" runat="server" DefaultButton="cmdSearch" CssClass="NormalBold">
<asp:DropDownList ID="ddlFilterColumn" runat="server" resourcekey="ddlFilterColumn" CssClass="NormalTextBox" style="vertical-align: middle;">
<asp:ListItem Value="Username">Username</asp:ListItem>
<asp:ListItem Value="Email">E-mail</asp:ListItem>
<asp:ListItem Value="FullName">FullName</asp:ListItem>
<asp:ListItem Value="CompanyName">CompanyName</asp:ListItem>
</asp:DropDownList><asp:TextBox ID="txtFilterValue" runat="server" CssClass="NormalTextBox" Width="100" style="vertical-align: middle;"></asp:TextBox><asp:ImageButton ID="cmdSearch" Runat="server" meta:resourcekey="cmdSearch" SkinID="SearchButton"
CausesValidation="false" OnClick="cmdSearch_Click" style="vertical-align: middle;"/>
<asp:Panel ID="tblSearch" runat="server" CssClass="NormalBold">
<uc1:SearchBox ID="searchBox" runat="server" />
</asp:Panel>
</div>
</div>

View file

@ -46,7 +46,13 @@ namespace WebsitePanel.Portal
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString());
if (!IsPostBack)
txtFilterValue.Focus();
{
searchBox.AddCriteria("Username", GetLocalizedString("SearchField.Username"));
searchBox.AddCriteria("FullName", GetLocalizedString("SearchField.Name"));
searchBox.AddCriteria("Email", GetLocalizedString("SearchField.EMail"));
searchBox.AddCriteria("CompanyName", GetLocalizedString("SearchField.CompanyName"));
searchBox.Focus();
}
}
private void BindGroupings()
@ -73,14 +79,6 @@ namespace WebsitePanel.Portal
parameterName + "=" + parameterValue);
}
protected void cmdSearch_Click(object sender, ImageClickEventArgs e)
{
Response.Redirect(NavigatePageURL(PortalUtils.GetUserCustomersPageId(),
PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(),
"FilterColumn=" + ddlFilterColumn.SelectedValue,
"FilterValue=" + Server.UrlEncode(txtFilterValue.Text)));
}
protected void btnCreate_Click(object sender, EventArgs e)
{
Response.Redirect(EditUrl(PortalUtils.USER_ID_PARAM, PanelSecurity.SelectedUserId.ToString(), "create_user"));

View file

@ -1,31 +1,3 @@
// Copyright (c) 2015, 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.
@ -59,31 +31,13 @@ namespace WebsitePanel.Portal {
protected global::System.Web.UI.WebControls.Panel tblSearch;
/// <summary>
/// ddlFilterColumn control.
/// searchBox 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 ddlFilterColumn;
/// <summary>
/// txtFilterValue 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 txtFilterValue;
/// <summary>
/// cmdSearch 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.ImageButton cmdSearch;
protected global::WebsitePanel.Portal.SearchBox searchBox;
/// <summary>
/// allCustomers control.

View file

@ -5,7 +5,6 @@
<%@ Register Src="UserOrganization.ascx" TagName="UserOrganization" TagPrefix="wsp" %>
<%@ Import Namespace="WebsitePanel.Portal" %>
<script src="/JavaScript/jquery-1.4.4.min.js" type="text/javascript"></script>
<script src="/JavaScript/chosen.min.js" type="text/javascript"></script>
<script type="text/javascript">

View file

@ -53,7 +53,8 @@ namespace WebsitePanel.Portal
protected void Page_Load(object sender, EventArgs e)
{
ClientScriptManager cs = Page.ClientScript;
cs.RegisterClientScriptInclude("jquery", ResolveUrl("~/JavaScript/jquery-1.4.4.min.js"));
// check for user
bool isUser = PanelSecurity.SelectedUser.Role == UserRole.User;

View file

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

@ -153,6 +153,7 @@
<Compile Include="Code\Framework\ISchedulerTaskView.cs" />
<Compile Include="Code\Framework\WebPortalPageTitleProvider.cs" />
<Compile Include="Code\Framework\WebPortalThemeProvider.cs" />
<Compile Include="Code\Helpers\AjaxHandler.cs" />
<Compile Include="Code\Helpers\AppInstallerHelpers.cs" />
<Compile Include="Code\Framework\WebsitePanelControlBase.cs">
<SubType>ASPXCodeBehind</SubType>
@ -310,6 +311,13 @@
<Compile Include="ProviderControls\HyperV2012R2_Settings.ascx.designer.cs">
<DependentUpon>HyperV2012R2_Settings.ascx</DependentUpon>
</Compile>
<Compile Include="SearchObject.ascx.cs">
<DependentUpon>SearchObject.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="SearchObject.ascx.designer.cs">
<DependentUpon>SearchObject.ascx</DependentUpon>
</Compile>
<Compile Include="VPS2012\RemoteDesktop\Connect.aspx.cs">
<DependentUpon>Connect.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
@ -4820,6 +4828,7 @@
<Content Include="HostedSharePoint\HostedSharePointEnterpriseStorageSettings.ascx" />
<Content Include="HostedSharePoint\HostedSharePointEnterpriseStorageUsage.ascx" />
<Content Include="ProviderControls\HyperV2012R2_Settings.ascx" />
<Content Include="SearchObject.ascx" />
<Content Include="VPS2012\RemoteDesktop\Connect.aspx" />
<Content Include="VPS2012\RemoteDesktop\msrdp.cab" />
<Content Include="VPS2012\TestVirtualMachineTemplate.aspx" />
@ -5120,6 +5129,7 @@
<Content Include="UserControls\App_LocalResources\UserActions.ascx.resx" />
<Content Include="UserControls\App_LocalResources\DomainActions.ascx.resx" />
<Content Include="UserControls\App_LocalResources\MailAccountActions.ascx.resx" />
<Content Include="SkinControls\App_LocalResources\SearchObject.ascx.resx" />
<EmbeddedResource Include="UserControls\App_LocalResources\WebsiteActions.ascx.resx" />
<Content Include="VPS\UserControls\App_LocalResources\Generation.ascx.resx">
<SubType>Designer</SubType>

View file

@ -0,0 +1,29 @@
var estop = function (e) {
if (!e) e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return e;
}
var CPopupDialog = function (el, e) {
if (typeof el == 'string')
el = document.getElementById(el);
e = estop(e);
var oldclick = document.body.onclick;
el.onclick = estop;
function close() {
el.style.display = "none";
document.body.onclick = oldclick;
}
function show(x, y) {
el.style.left = x ? x : e.clientX + document.documentElement.scrollLeft + "px";
el.style.top = y ? y : e.clientY + document.documentElement.scrollTop + "px";
el.style.display = "block";
document.body.onclick = close;
}
show();
}

View file

@ -79,6 +79,10 @@
<HintPath>..\..\Lib\Microsoft.Web.Services3.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Newtonsoft.Json.6.0.6\lib\net35\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions" />
@ -317,6 +321,7 @@
<Content Include="App_Data\ESModule_ControlsHierarchy.config">
<SubType>Designer</SubType>
</Content>
<Content Include="AjaxHandler.ashx" />
<None Include="App_Data\SupportedThemes.config" />
<None Include="App_Data\Countries.config" />
<None Include="App_Data\CountryStates.config" />