From a8e67e2dcfb56ea449890ce2d2e37c78cdefe29a Mon Sep 17 00:00:00 2001 From: DiegoPino Date: Tue, 30 Dec 2014 01:18:52 -0300 Subject: [PATCH 1/4] breadcrumbs now xacml compliant Changed itql to sparql and added xacml filters to query to check if current user has access to parent collection --- includes/breadcrumb.inc | 61 +++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/includes/breadcrumb.inc b/includes/breadcrumb.inc index 6f975ae3..b0e7beed 100644 --- a/includes/breadcrumb.inc +++ b/includes/breadcrumb.inc @@ -77,35 +77,56 @@ function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, ); } else { - $query_string = 'select $parentObject $title $content from <#ri> - where ( - $title - and $parentObject $content - and ( - $parentObject - or $parentObject - or $parentObject - ) - and $parentObject - ) - minus $content - minus $parentObject - order by $title desc'; - $results = $repository->ri->itqlQuery($query_string); + + + $query= << + PREFIX fedora-rels-ext: + SELECT DISTINCT ?object ?label + FROM <#ri> + WHERE { + ?collection_predicate ?object; + ?label . + ?object + . + !optionals + !filters + } +EOQ; + + $query_optionals = (array) module_invoke('islandora_xacml_api', 'islandora_basic_collection_get_query_optionals', 'view'); + $query_filters = (array) module_invoke('islandora_xacml_api', 'islandora_basic_collection_get_query_filters'); + $filter_map = function ($filter) { + return "FILTER($filter)"; + }; + $query_filters[] = "sameTerm(?collection_predicate, ) || sameTerm(?collection_predicate, )"; + + + + $query = format_string($query, array( + '!optionals' => !empty($query_optionals) ? ('OPTIONAL {{' . implode('} UNION {', $query_optionals) . '}}') : '', + '!filters' => implode(' ', array_map($filter_map, $query_filters)), + )); + + $query = format_string($query, array( + '!pid' => $pid, + )); + + $results = $repository->ri->sparqlQuery($query,'unlimited'); if (count($results) > 0 && $context['level'] > 0) { - $parent = $results[0]['parentObject']['value']; - $this_title = $results[0]['title']['value']; + $parent = $results[0]['object']['value']; + $this_label = $results[0]['label']['value']; - if (empty($this_title)) { - $this_title = t('-'); + if (empty($this_label)) { + $this_label = t('-'); } $context['level']--; return array_merge( islandora_get_breadcrumbs_recursive($parent, $repository, $context), array( - l($this_title, "islandora/object/$pid"), + l($this_label, "islandora/object/$pid"), ) ); } From f34e1eae720db4d59ac812f5b40346afedec8774 Mon Sep 17 00:00:00 2001 From: DiegoPino Date: Tue, 30 Dec 2014 10:42:43 -0300 Subject: [PATCH 2/4] Coding standards corrections Minor coding standards fixes to pass Travis tests --- includes/breadcrumb.inc | 66 ++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/includes/breadcrumb.inc b/includes/breadcrumb.inc index b0e7beed..38be8322 100644 --- a/includes/breadcrumb.inc +++ b/includes/breadcrumb.inc @@ -77,58 +77,50 @@ function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, ); } else { - - - $query= << - PREFIX fedora-rels-ext: - SELECT DISTINCT ?object ?label - FROM <#ri> - WHERE { + + $query = << + PREFIX fedora-rels-ext: + SELECT DISTINCT ?object ?label + FROM <#ri> + WHERE { ?collection_predicate ?object; - ?label . - ?object - . - !optionals - !filters - } + ?label . + ?object + . + !optionals + !filters + } EOQ; - - $query_optionals = (array) module_invoke('islandora_xacml_api', 'islandora_basic_collection_get_query_optionals', 'view'); - $query_filters = (array) module_invoke('islandora_xacml_api', 'islandora_basic_collection_get_query_filters'); - $filter_map = function ($filter) { - return "FILTER($filter)"; - }; - $query_filters[] = "sameTerm(?collection_predicate, ) || sameTerm(?collection_predicate, )"; - - - - $query = format_string($query, array( - '!optionals' => !empty($query_optionals) ? ('OPTIONAL {{' . implode('} UNION {', $query_optionals) . '}}') : '', - '!filters' => implode(' ', array_map($filter_map, $query_filters)), - )); + $query_optionals = (array) module_invoke('islandora_xacml_api', 'islandora_basic_collection_get_query_optionals', 'view'); + $query_filters = (array) module_invoke('islandora_xacml_api', 'islandora_basic_collection_get_query_filters'); + $filter_map = function ($filter) { + return "FILTER($filter)"; + }; + $query_filters[] = "sameTerm(?collection_predicate, ) || sameTerm(?collection_predicate, )"; + $query = format_string($query, array( + '!optionals' => !empty($query_optionals) ? ('OPTIONAL {{' . implode('} UNION {', $query_optionals) . '}}') : '', + '!filters' => implode(' ', array_map($filter_map, $query_filters)), + )); $query = format_string($query, array( '!pid' => $pid, )); - $results = $repository->ri->sparqlQuery($query,'unlimited'); + $results = $repository->ri->sparqlQuery($query, 'unlimited'); - if (count($results) > 0 && $context['level'] > 0) { + if (count($results) > 0 && $context['level'] > 0) { $parent = $results[0]['object']['value']; $this_label = $results[0]['label']['value']; if (empty($this_label)) { - $this_label = t('-'); + $this_label = t('-'); } $context['level']--; - return array_merge( - islandora_get_breadcrumbs_recursive($parent, $repository, $context), - array( - l($this_label, "islandora/object/$pid"), - ) - ); + return array_merge(islandora_get_breadcrumbs_recursive($parent, $repository, $context), array( + l($this_label, "islandora/object/$pid"), + )); } else { // Add an non-link, as we don't know how to get back to the root, and From 1019487d337f4cf7ddda4276c723359314d830c8 Mon Sep 17 00:00:00 2001 From: DiegoPino Date: Tue, 30 Dec 2014 11:22:10 -0300 Subject: [PATCH 3/4] More coding standards Fixes --- includes/breadcrumb.inc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/includes/breadcrumb.inc b/includes/breadcrumb.inc index 38be8322..a66177ab 100644 --- a/includes/breadcrumb.inc +++ b/includes/breadcrumb.inc @@ -77,7 +77,7 @@ function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, ); } else { - + $query = << PREFIX fedora-rels-ext: @@ -85,19 +85,19 @@ function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, FROM <#ri> WHERE { ?collection_predicate ?object; - ?label . + ?label . ?object - . - !optionals - !filters - } + . + !optionals + !filters + } EOQ; $query_optionals = (array) module_invoke('islandora_xacml_api', 'islandora_basic_collection_get_query_optionals', 'view'); $query_filters = (array) module_invoke('islandora_xacml_api', 'islandora_basic_collection_get_query_filters'); $filter_map = function ($filter) { return "FILTER($filter)"; - }; + }; $query_filters[] = "sameTerm(?collection_predicate, ) || sameTerm(?collection_predicate, )"; $query = format_string($query, array( '!optionals' => !empty($query_optionals) ? ('OPTIONAL {{' . implode('} UNION {', $query_optionals) . '}}') : '', @@ -106,7 +106,7 @@ EOQ; $query = format_string($query, array( '!pid' => $pid, )); - + $results = $repository->ri->sparqlQuery($query, 'unlimited'); if (count($results) > 0 && $context['level'] > 0) { From fa14e839ce4533bc69c1f6aa2be65ad6d15d981c Mon Sep 17 00:00:00 2001 From: DiegoPino Date: Tue, 30 Dec 2014 11:40:06 -0300 Subject: [PATCH 4/4] Oh whitespaces 2015 and beyond: Always enable "view invisible characters" --- includes/breadcrumb.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/breadcrumb.inc b/includes/breadcrumb.inc index a66177ab..e75a0fdd 100644 --- a/includes/breadcrumb.inc +++ b/includes/breadcrumb.inc @@ -77,7 +77,7 @@ function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, ); } else { - + $query = << PREFIX fedora-rels-ext: @@ -106,7 +106,7 @@ EOQ; $query = format_string($query, array( '!pid' => $pid, )); - + $results = $repository->ri->sparqlQuery($query, 'unlimited'); if (count($results) > 0 && $context['level'] > 0) {