1
|
<?php
|
2
|
// $Id$
|
3
|
|
4
|
/**
|
5
|
* Copyright (C) 2007 EDIT
|
6
|
* European Distributed Institute of Taxonomy
|
7
|
* http://www.e-taxonomy.eu
|
8
|
*
|
9
|
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
10
|
* See http://www.mozilla.org/MPL/MPL-1.1.html for the full license terms.
|
11
|
*/
|
12
|
|
13
|
function theme_cdm_search_results($pager, $path, $parameters){
|
14
|
|
15
|
|
16
|
$showThumbnails = $_SESSION['pageoptions']['searchtaxa']['showThumbnails'];
|
17
|
if( !is_numeric($showThumbnails)){
|
18
|
$showThumbnails = 1;
|
19
|
}
|
20
|
$setSessionUri = url('cdm_api/setvalue/session').'/pageoptions|searchtaxa|showThumbnails/';
|
21
|
drupal_add_js('$(document).ready(function() {
|
22
|
|
23
|
// init
|
24
|
if('.$showThumbnails.' == 1){
|
25
|
$(\'.media_gallery\').show(20);
|
26
|
} else {
|
27
|
$(\'.media_gallery\').hide(20);
|
28
|
}
|
29
|
// add change hander
|
30
|
$(\'#showThumbnails\').change(
|
31
|
function(event){
|
32
|
var state = 0;
|
33
|
if($(this).is(\':checked\')){
|
34
|
$(\'.media_gallery\').show(20);
|
35
|
state = 1;
|
36
|
} else {
|
37
|
$(\'.media_gallery\').hide(20);
|
38
|
}
|
39
|
// store state in session variable
|
40
|
var uri = \''.$setSessionUri.'\' + state;
|
41
|
jQuery.get(uri);
|
42
|
});
|
43
|
});', "inline");
|
44
|
|
45
|
drupal_set_title(t('Search Results'));
|
46
|
|
47
|
$out = ''; //l('Advanced Search', '/cdm_dataportal/search');
|
48
|
|
49
|
$out = '<div class="page_options"><form name="pageoptions"><input id="showThumbnails" type="checkbox" name="showThumbnails" '.($showThumbnails == 1? 'checked="checked"': '').'> '.t('Show Thumbnails').'</form></div>';
|
50
|
if(count($pager->records) > 0){
|
51
|
$out .= theme('cdm_list_of_taxa', $pager->records);
|
52
|
$out .= theme('cdm_pager', $pager, $path, $parameters);
|
53
|
} else {
|
54
|
$out = '<h4 class="error">Sorry, no matching entries found.</h4>';
|
55
|
}
|
56
|
return $out;
|
57
|
}
|
58
|
|
59
|
|
60
|
/**
|
61
|
* renders misapplied names and invalid designations.
|
62
|
* Both relation types are currently treated the same!
|
63
|
*
|
64
|
* @param unknown_type $taxonRelationships
|
65
|
* @return unknown
|
66
|
*/
|
67
|
function theme_cdm_taxonRelationships($taxonRelationships){
|
68
|
|
69
|
if(!$taxonRelationships){
|
70
|
return;
|
71
|
}
|
72
|
|
73
|
RenderHints::pushToRenderStack('taxonRelationships');
|
74
|
$footnoteListKey = 'taxonRelationships';
|
75
|
RenderHints::setFootnoteListKey($footnoteListKey);
|
76
|
|
77
|
$misapplied = array();
|
78
|
$joinedAuthorTeams = array();
|
79
|
|
80
|
// aggregate misapplied names having the same fullname:
|
81
|
foreach($taxonRelationships as $taxonRelation){
|
82
|
if(true || $taxonRelation->type->uuid == UUID_MISAPPLIED_NAME_FOR || $taxonRelation->type->uuid == UUID_INVALID_DESIGNATION_FOR ){
|
83
|
|
84
|
$name = $taxonRelation->fromTaxon->name->titleCache;
|
85
|
$author_team = cdm_ws_get(CDM_WS_REFERENCE_AUTHORTEAM, $taxonRelation->fromTaxon->sec->uuid);
|
86
|
$authorteam = $author_team->titleCache;
|
87
|
|
88
|
if(!isset($misapplied[$name])){
|
89
|
$misapplied[$name]['out'] = '<span class="misapplied">'.theme('cdm_related_taxon',$taxonRelation->fromTaxon, UUID_MISAPPLIED_NAME_FOR, false).'</span>';
|
90
|
}
|
91
|
|
92
|
// collect all authors for this fullname
|
93
|
if(isset($authorteam)){
|
94
|
$misapplied[$name]['authorteam'][$authorteam] = '';
|
95
|
$joinedAuthorTeams[$authorteam] = 'sensu '.theme('cdm_reference', $taxonRelation->fromTaxon->sec);
|
96
|
}
|
97
|
|
98
|
}
|
99
|
}
|
100
|
|
101
|
// sort the joinedAuthorTeams and create footnotes and footnotekeys
|
102
|
ksort($joinedAuthorTeams);
|
103
|
foreach($joinedAuthorTeams as $authorteam=>$sensuCitation){
|
104
|
$footnoteKey = FootnoteManager::addNewFootnote($footnoteListKey, $sensuCitation);
|
105
|
$joinedAuthorTeams[$authorteam] = '<span class="sensu">sensu '.$authorteam. theme('cdm_footnote_key', $footnoteKey).'</span>';
|
106
|
}
|
107
|
|
108
|
// generate output
|
109
|
$out = '<ul class="misapplied">';
|
110
|
|
111
|
foreach($misapplied as $misapplied_name){
|
112
|
|
113
|
$out .= '<li class="synonym">'.$misapplied_name['out'] . " ";
|
114
|
// fill authors the renderedFootnoteKey and sorting 'em
|
115
|
foreach($misapplied_name['authorteam'] as $authorteam=>&$renderedFootnoteKey) {
|
116
|
$renderedFootnoteKey = $joinedAuthorTeams[$authorteam];
|
117
|
}
|
118
|
if(isset($misapplied_name['authorteam'])){
|
119
|
ksort($misapplied_name['authorteam']);
|
120
|
$out .= join('; ', $misapplied_name['authorteam']);
|
121
|
}
|
122
|
$out .= '</li>';
|
123
|
|
124
|
}
|
125
|
$out .= '</ul>';
|
126
|
|
127
|
$out .= theme('cdm_footnotes', $footnoteListKey, 'div');
|
128
|
RenderHints::popFromRenderStack();
|
129
|
return $out;
|
130
|
}
|
131
|
|
132
|
function theme_cdm_acceptedFor(){
|
133
|
RenderHints::pushToRenderStack('acceptedFor');
|
134
|
|
135
|
$out = '';
|
136
|
if(isset($_REQUEST['acceptedFor'])){
|
137
|
|
138
|
$synonym = cdm_ws_get(CDM_WS_PORTAL_TAXON, $_REQUEST['acceptedFor']);
|
139
|
|
140
|
if($synonym){
|
141
|
$out .= '<span class="acceptedFor">';
|
142
|
$out .= t('is accepted for ');
|
143
|
if(isset($synonym->name->nomenclaturalReference)){
|
144
|
$referenceUri = url(path_to_reference($synonym->name->nomenclaturalReference->uuid));
|
145
|
}
|
146
|
$out .= theme('cdm_taxonName', $synonym->name, null, $referenceUri);
|
147
|
$out .= '</span>';
|
148
|
}
|
149
|
}
|
150
|
RenderHints::popFromRenderStack();
|
151
|
return $out;
|
152
|
}
|
153
|
|
154
|
function theme_cdm_list_of_taxa($records, $showMedia = false){
|
155
|
|
156
|
RenderHints::pushToRenderStack('list_of_taxa');
|
157
|
|
158
|
$showMedia_taxa = variable_get('cdm_dataportal_findtaxa_show_taxon_thumbnails', 1);
|
159
|
$showMedia_synonyms = variable_get('cdm_dataportal_findtaxa_show_synonym_thumbnails', 0);
|
160
|
|
161
|
// .. well, for sure not as performant as before, but better than nothing.
|
162
|
$synonym_uuids = array();
|
163
|
foreach($records as $taxon){
|
164
|
if($taxon->class != "Taxon"){
|
165
|
if(!array_key_exists($taxon->uuid, $synonym_uuids)){
|
166
|
$synonym_uuids[$taxon->uuid] = $taxon->uuid;
|
167
|
}
|
168
|
}
|
169
|
}
|
170
|
// batch service not jet implemented:
|
171
|
// $table_of_accepted = cdm_ws_property(CDM_WS_PORTAL_TAXON_ACCEPTED, join(',', $synonym_uuids));
|
172
|
// thus ...
|
173
|
$table_of_accepted = array();
|
174
|
foreach($synonym_uuids as $synUuid){
|
175
|
$table_of_accepted[$synUuid] = cdm_ws_get(CDM_WS_PORTAL_TAXON_ACCEPTED, $synUuid);
|
176
|
}
|
177
|
|
178
|
$out = '<ul class="cdm_names" style="background-image: none;">';
|
179
|
|
180
|
foreach($records as $taxon){
|
181
|
// its a Taxon
|
182
|
if($taxon->class == "Taxon"){
|
183
|
$taxonUri = url(path_to_taxon($taxon->uuid));
|
184
|
if(isset($taxon->name->nomenclaturalReference)){
|
185
|
$referenceUri = url(path_to_reference($taxon->name->nomenclaturalReference->uuid));
|
186
|
}
|
187
|
$out .= '<li class="Taxon">'.theme('cdm_taxonName', $taxon->name, $taxonUri, $referenceUri);
|
188
|
if($showMedia_taxa){
|
189
|
$out .= theme('cdm_taxon_list_thumbnails', $taxon);
|
190
|
}
|
191
|
$out .= '</li>';
|
192
|
} else {
|
193
|
// its a synonym
|
194
|
$uuid = $taxon->uuid;
|
195
|
$acceptedTaxa = $table_of_accepted[$uuid];
|
196
|
if(count($acceptedTaxa) == 1){
|
197
|
$acceptedTaxon = $acceptedTaxa[0];
|
198
|
$taxonUri = uri_to_synonym($taxon->uuid, $acceptedTaxon->uuid, 'synonymy');
|
199
|
if(isset($acceptedTaxon->name->nomenclaturalReference)){
|
200
|
$referenceUri = url(path_to_reference($acceptedTaxon->name->nomenclaturalReference->uuid));
|
201
|
}
|
202
|
$out .= '<li class="Synonym">'.theme('cdm_taxonName', $taxon->name, $taxonUri, $referenceUri);
|
203
|
if($showMedia_synonyms){
|
204
|
$out .= theme('cdm_taxon_list_thumbnails', $acceptedTaxon);
|
205
|
}
|
206
|
$out .= '</li>';
|
207
|
} else {
|
208
|
//TODO avoid using Ajax in the cdm_dynabox
|
209
|
//TODO add media
|
210
|
$out .= theme('cdm_dynabox', theme('cdm_taxonName', $taxon->name, null, null), cdm_compose_url(CDM_WS_PORTAL_TAXON_ACCEPTED, array($taxon->uuid)), 'cdm_list_of_taxa');
|
211
|
}
|
212
|
}
|
213
|
}
|
214
|
$out .= '</ul>';
|
215
|
RenderHints::popFromRenderStack();
|
216
|
return $out;
|
217
|
}
|
218
|
|
219
|
|
220
|
function theme_cdm_related_taxon($taxon, $reltype_uuid = false){
|
221
|
|
222
|
$relsign = '';
|
223
|
$name_prefix = '';
|
224
|
$name_postfix = '';
|
225
|
switch ($reltype_uuid){
|
226
|
case UUID_HETEROTYPIC_SYNONYM_OF:
|
227
|
case UUID_SYNONYM_OF:
|
228
|
$relsign = '=';
|
229
|
break;
|
230
|
case UUID_HOMOTYPIC_SYNONYM_OF:
|
231
|
$relsign = '≡';
|
232
|
break;
|
233
|
case UUID_MISAPPLIED_NAME_FOR:
|
234
|
case UUID_INVALID_DESIGNATION_FOR:
|
235
|
$relsign = '–'; // – — −
|
236
|
$name_prefix = '"';
|
237
|
$name_postfix = '"';
|
238
|
break;
|
239
|
default :
|
240
|
$relsign = '–';
|
241
|
}
|
242
|
|
243
|
RenderHints::pushToRenderStack('related_taxon');
|
244
|
|
245
|
//$taxonUri = url(path_to_taxon($taxon->uuid));
|
246
|
if($taxon->name->nomenclaturalReference){
|
247
|
$referenceUri = url(path_to_reference($taxon->name->nomenclaturalReference->uuid));
|
248
|
}
|
249
|
$nameHtml = theme('cdm_taxonName', $taxon->name, $taxonUri, $referenceUri);
|
250
|
|
251
|
//later homonym or trated as later homonym
|
252
|
$taxon_name_relations = cdm_ws_get(CDM_WS_PORTAL_TAXON_NAMERELATIONS, $taxon->uuid);
|
253
|
foreach($taxon_name_relations as $element){
|
254
|
switch ($element->type->representation_L10n){
|
255
|
case 'later homonym for':
|
256
|
$later_homonym = ' [non ' . l($element->fromName->titleCache . ']',
|
257
|
'cdm_dataportal/name/' . $element->fromName->uuid);
|
258
|
break;
|
259
|
case 'treated as later homonym for':
|
260
|
$later_homonym = ' [non ' . l($element->fromName->titleCache . ']',
|
261
|
'cdm_dataportal/name/' . $element->fromName->uuid);
|
262
|
break;
|
263
|
}
|
264
|
}
|
265
|
|
266
|
|
267
|
$out = '<span class="relation_sign">'.$relsign.'</span>'.$name_prefix . $nameHtml . $name_postfix . $later_homonym;
|
268
|
|
269
|
//var_dump($taxon_name_relations[0]->type->representation_L10n);
|
270
|
|
271
|
$out = uuid_anchor($taxon->uuid, $out);
|
272
|
|
273
|
RenderHints::popFromRenderStack();
|
274
|
|
275
|
return $out;
|
276
|
}
|
277
|
|
278
|
|
279
|
/**
|
280
|
*/
|
281
|
function theme_cdm_taxon_list_thumbnails($taxon){
|
282
|
|
283
|
$gallery_name = $taxon->uuid;
|
284
|
|
285
|
$showCaption = variable_get('cdm_dataportal_findtaxa_show_thumbnail_captions', 1);
|
286
|
$prefMimeTypeRegex = 'image:.*';
|
287
|
$prefMediaQuality = '*';
|
288
|
|
289
|
$gallery_settings = getGallerySettings(CDM_DATAPORTAL_SEARCH_GALLERY_NAME);
|
290
|
|
291
|
if($showCaption){
|
292
|
//$captionElements = array('title', '#uri'=>t('open Image'));
|
293
|
$captionElements = array('title', 'rights');
|
294
|
}
|
295
|
|
296
|
$galleryLinkUri = path_to_taxon($taxon->uuid).'/images';
|
297
|
$selectShowMedia = variable_get('cdm_dataportal_show_media', 0);
|
298
|
if ($selectShowMedia == 0){
|
299
|
$mediaList = cdm_ws_get(CDM_WS_PORTAL_TAXON_MEDIA, array($taxon->uuid, $prefMimeTypeRegex, $prefMediaQuality));
|
300
|
}else{
|
301
|
$mediaList = cdm_ws_get(CDM_WS_PORTAL_TAXON_SUBTREE_MEDIA, array($taxon->uuid, $prefMimeTypeRegex, $prefMediaQuality));
|
302
|
}
|
303
|
//$mediaList = cdm_ws_get(CDM_WS_PORTAL_TAXONOMY_MEDIA, array(variable_get('cdm_taxonomictree_uuid', false), $taxon ->rank, $taxon->uuid ));
|
304
|
$out .= theme('cdm_media_gallerie', $mediaList, $gallery_name ,
|
305
|
$gallery_settings['cdm_dataportal_media_maxextend'],
|
306
|
$gallery_settings['cdm_dataportal_media_cols'],
|
307
|
$gallery_settings['cdm_dataportal_media_maxRows'],
|
308
|
$captionElements, 'LIGHTBOX', null, $galleryLinkUri);
|
309
|
|
310
|
return $out;
|
311
|
}
|
312
|
|
313
|
|