diff --git a/application/asset/js/global.js b/application/asset/js/global.js index d40dc4272..28515e1ec 100644 --- a/application/asset/js/global.js +++ b/application/asset/js/global.js @@ -322,7 +322,7 @@ var Omeka = { disableQueryTextInput: function() { var queryType = $(this); var queryText = queryType.siblings('.query-text'); - if (queryType.val() === 'ex' || queryType.val() === 'nex') { + if (['ex', 'nex', 're', 'nre'].includes(queryType.val())) { queryText.prop('disabled', true); } else { queryText.prop('disabled', false); diff --git a/application/src/Api/Adapter/AbstractResourceEntityAdapter.php b/application/src/Api/Adapter/AbstractResourceEntityAdapter.php index 3fab50c0f..2b460f64a 100644 --- a/application/src/Api/Adapter/AbstractResourceEntityAdapter.php +++ b/application/src/Api/Adapter/AbstractResourceEntityAdapter.php @@ -277,11 +277,11 @@ protected function buildPropertyQuery(QueryBuilder $qb, array $query) } $positive = true; - if (in_array($queryType, ['neq', 'nin', 'nsw', 'new', 'nres', 'nex'])) { + if (in_array($queryType, ['neq', 'nin', 'nsw', 'new', 'nre', 'nres', 'nex'])) { $positive = false; $queryType = substr($queryType, 1); } - if (!in_array($queryType, ['eq', 'in', 'sw', 'ew', 'res', 'ex'])) { + if (!in_array($queryType, ['eq', 'in', 'sw', 'ew', 're', 'res', 'ex'])) { continue; } @@ -378,6 +378,10 @@ protected function buildPropertyQuery(QueryBuilder $qb, array $query) ); break; + case 're': + $predicateExpr = $qb->expr()->isNotNull("$valuesAlias.valueResource"); + break; + case 'ex': $predicateExpr = $qb->expr()->isNotNull("$valuesAlias.id"); break; diff --git a/application/view/common/advanced-search/properties.phtml b/application/view/common/advanced-search/properties.phtml index 55cea9165..d646dcb4c 100644 --- a/application/view/common/advanced-search/properties.phtml +++ b/application/view/common/advanced-search/properties.phtml @@ -81,6 +81,8 @@ if ($this->status()->isSiteRequest()) { + +