-
Notifications
You must be signed in to change notification settings - Fork 1
/
collection_sort.module
109 lines (88 loc) · 3.06 KB
/
collection_sort.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
/**
* @file
* Hook implementations for Vassar.
*/
//define('COLLECTION_SORT_FULLTEXT_PATH', 'collection_sort/bookreader_fulltext');
// Includes functions to create sort blocks.
require_once dirname(__FILE__) . '/includes/blocks.inc';
/**
* Implements hook_islandora_basic_collection_query_alter().
*/
function collection_sort_islandora_basic_collection_query_alter(array &$params) {
$sort = '?title ?date';
//$url = $_SERVER['REQUEST_URI'];
$url = request_uri();
if (stristr($url, 'sortby=date'))
$sort = '?date ?title';
//$params['vars'] = '?object ?title ?date'; // jd added ?date
$params['vars'] = '*';
$params['order_by'] = $sort; // jd added ?date
$object = $params['object'];
// testing this out
$query = <<<EOQ
SELECT DISTINCT !vars
FROM <#ri>
WHERE {
!statements .
!filters
}
EOQ;
$filters = array();
//foreach (module_invoke_all('islandora_basic_collection_get_query_filters') as $filter) {
foreach (module_invoke_all('islandora_basic_collection_get_query_filters', $type = 'view') as $filter) {
$filters[] = "FILTER($filter)";
}
//$statements = collection_sort_islandora_basic_collection_get_query_statements($type = 'view');
$statements = implode(" ", collection_sort_islandora_basic_collection_get_query_statements($type = 'view'));
$query = format_string($query, array(
'!statements' => $statements,
'!filters' => implode(' ', $filters),
'!vars' => $params['vars'],
));
$query = format_string($query, array(
'!pid' => $object->id,
'!model' => $params['model'],
));
if ($params['order_by']) {
$query .= <<<EOQO
ORDER BY {$params['order_by']}
EOQO;
}
//echo $query;
$params['query'] = $query;
return $params;
} // end FUNCTION collection_sort_islandora_basic_collection_query_alter
/**
* Implements hook_islandora_basic_collection_get_query_statements().
*/
// jd added date
function collection_sort_islandora_basic_collection_get_query_statements($type = 'view') {
//function collection_sort_islandora_basic_collection_get_query_statements() {
/*
return <<<EOQ
?object ?collection_predicate <info:fedora/!pid> ;
<fedora-model:label> ?title ;
<fedora-model:hasModel> !model ;
<fedora-model:state> <fedora-model:Active>
OPTIONAL {?object <dc:date> ?date }
EOQ;
*/
// ADDING ADDITIONAL OPTIONAL STATEMENTS TO COVER XACML POLICIES
$to_return = array();
$to_return[] = <<<EOQ
?object ?collection_predicate <info:fedora/!pid> ;
<fedora-model:label> ?title ;
<fedora-model:ownerId> ?owner ;
<fedora-view:lastModifiedDate> ?date_modified ;
<fedora-model:hasModel> !model
OPTIONAL {?object <dc:date> ?date }
OPTIONAL {?object <fedora-model:isManagableByRole> ?role }
OPTIONAL {?object <fedora-rels-ext:isConstituentOf> ?compound }
OPTIONAL {?object <fedora-model:isManageableByUser> ?user }
EOQ;
if ($type == 'view') {
$to_return[] = '?object <fedora-model:state> <fedora-model:Active>';
}
return $to_return;
} // end FUNCTION collection_sort_islandora_basic_collection_get_query_statements