Try this:
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:And>
<ogc:Or>
<ogc:PropertyIsEqualTo matchCase="true">
<ogc:PropertyName>code</ogc:PropertyName>
<ogc:Literal>secret</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Or>
<ogc:Or>
<ogc:Intersects>
<ogc:PropertyName>geom</ogc:PropertyName>
<gml:Box xmlns:gml="http://www.opengis.net/gml">
<gml:coordinates decimal="." cs="," ts=" ">1298543.0367787,7107400.531374 1299312.4070614,7203464.9016567</gml:coordinates>
</gml:Box>
</ogc:Intersects>
</ogc:Or>
</ogc:And>
</ogc:Filter>
EDIT #1: Here's my code in case it helps any :
MyApp.Search.GetWFSSpatialFilters = function () {
function getOtherAttributesFilter() {
var _filters = [];
//If txtMyAppID has a value, add them.
var MyAppIDs = $.trim($("#txtMyAppID").val()).split(",");
if (MyAppIDs != "") {
for (r in MyAppIDs) {
_filters.push(
new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.EQUAL_TO,
property: "id",
value: MyAppIDs[r]
})
);
}
}
return _filters;
}
function getDateFilter() {
var _filters = [];
//If startTime OR endTime fall between search times, it's a match.
_filters.push(
new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.BETWEEN,
property: "startDate",
lowerBoundary: MyApp.Util.ISODateString(MyApp.UI.ControlPanel.DateRange.getDateFrom()),
upperBoundary: MyApp.Util.ISODateString(MyApp.UI.ControlPanel.DateRange.getDateTo())
})
);
_filters.push(
new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.BETWEEN,
property: "endDate",
lowerBoundary: MyApp.Util.ISODateString(MyApp.UI.ControlPanel.DateRange.getDateFrom()),
upperBoundary: MyApp.Util.ISODateString(MyApp.UI.ControlPanel.DateRange.getDateTo())
})
);
return _filters;
}
function getSatFilter() {
var _filters = [];
//gather all satellites
$.each(MyApp.Satellites.Items, function (index, satellite) {
if (satellite.checked) {
//console.log("(" + satellite.name.toString() + ")");
_filters.push(
new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.EQUAL_TO,
property: "platformName",
value: satellite.name.toString()
})
);
}
});
return _filters;
}
function getSpatialFilter() {
var _filters = [];
//console.log(MyApp.Region.Items);
//if there aren't any regions defined, use viewport.
if (MyApp.Region.Items.length > 0) {
//gather all regions
$.each(MyApp.Region.Items, function (index, region) {
_filters.push(
new OpenLayers.Filter.Spatial({
//property: "boundsText",
type: OpenLayers.Filter.Spatial.INTERSECTS,
value: region.feature[0].geometry.clone().transform(MyApp.UI.Map.Projections.Mercator, MyApp.UI.Map.Projections.Geographic),
projection: "EPSG:4326"
})
);
});
} else {
// use viewport not to go over maxExtent.
var boundsViewport = MyApp.UI.Map.getMap().getExtent().toGeometry().clone().transform(MyApp.UI.Map.Projections.Mercator, MyApp.UI.Map.Projections.Geographic).getBounds();
var maxExtent = MyApp.UI.Map.getMap().maxExtent.toGeometry().clone().transform(MyApp.UI.Map.Projections.Mercator, MyApp.UI.Map.Projections.Geographic).getBounds();
var geometryToUse;
if (maxExtent.containsBounds(boundsViewport, false, true)) {
geometryToUse = MyApp.UI.Map.getMap().getExtent().toGeometry().clone().transform(MyApp.UI.Map.Projections.Mercator, MyApp.UI.Map.Projections.Geographic);
} else {
geometryToUse = MyApp.UI.Map.getMap().maxExtent.toGeometry().clone().transform(MyApp.UI.Map.Projections.Mercator, MyApp.UI.Map.Projections.Geographic);
}
_filters.push(
new OpenLayers.Filter.Spatial({
//property: "boundsText",
type: OpenLayers.Filter.Spatial.INTERSECTS,
value: geometryToUse,
projection: "EPSG:4326"
})
);
}
return _filters;
}
var _filters = [];
//create sat filter.
_filters.push(
new OpenLayers.Filter.Logical({
type: OpenLayers.Filter.Logical.OR,
filters: getSatFilter()
})
);
//create date filter.
_filters.push(
new OpenLayers.Filter.Logical({
type: OpenLayers.Filter.Logical.OR,
filters: getDateFilter()
})
);
//create spatial filter.
_filters.push(
new OpenLayers.Filter.Logical({
type: OpenLayers.Filter.Logical.OR,
filters: getSpatialFilter()
})
);
//create Other attributes filter.
var attributefilter = getOtherAttributesFilter();
if (attributefilter.length > 0) {
_filters.push(
new OpenLayers.Filter.Logical({
type: OpenLayers.Filter.Logical.OR,
filters: attributefilter
})
);
}
return _filters;
};
var searchFilter = new OpenLayers.Filter.Logical({
type: OpenLayers.Filter.Logical.AND,
filters: MyApp.Search.GetWFSSpatialFilters()
})
//console.log(myFilters);
var protocol = new OpenLayers.Protocol.WFS({
version: "1.1.0",
url: MyApp.MapBase.Configuration.GeoServer.WFS_Service.EndPointURL,
featurePrefix: MyApp.MapBase.Configuration.GeoServer.WFS_Service.featurePrefix,
featureType: MyApp.MapBase.Configuration.GeoServer.WFS_Service.featureType,
featureNS: MyApp.MapBase.Configuration.GeoServer.WFS_Service.featureNS,
geometryName: MyApp.MapBase.Configuration.GeoServer.WFS_Service.geometryName,
defaultFilter: searchFilter,
srsName: MyApp.UI.Map.Projections.Mercator
});
var response = protocol.read({
maxFeatures: MyApp.Search.Properties.maxResults,
callback: MyApp.Search.SearchComplete_CallBack
});