cdm-dataportal / modules / cdm_dataportal / theme / cdm_dataportal.taxon.theme @ b5e773ef
History | View | Annotate | Download (10.8 KB)
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 |
|
86 |
$author_team = cdm_ws_get(CDM_WS_REFERENCE_AUTHORTEAM, $taxonRelation->fromTaxon->sec->uuid); |
87 |
$authorteam = $author_team->titleCache; |
88 |
|
89 |
if(!isset($misapplied[$name])){ |
90 |
$misapplied[$name]['out'] = '<span class="misapplied">'.theme('cdm_related_taxon',$taxonRelation->fromTaxon, UUID_MISAPPLIED_NAME_FOR, false).'</span>'; |
91 |
} |
92 |
|
93 |
// collect all authors for this fullname |
94 |
if(isset($authorteam)){ |
95 |
$misapplied[$name]['authorteam'][$authorteam] = ''; |
96 |
$joinedAuthorTeams[$authorteam] = 'sensu '.theme('cdm_reference', $taxonRelation->fromTaxon->sec); |
97 |
} |
98 |
|
99 |
} |
100 |
} |
101 |
|
102 |
// sort the joinedAuthorTeams and create footnotes and footnotekeys |
103 |
ksort($joinedAuthorTeams); |
104 |
foreach($joinedAuthorTeams as $authorteam=>$sensuCitation){ |
105 |
$footnoteKey = FootnoteManager::addNewFootnote($footnoteListKey, $sensuCitation); |
106 |
$joinedAuthorTeams[$authorteam] = '<span class="sensu">sensu '.$authorteam. theme('cdm_footnote_key', $footnoteKey, $footnoteListKey).'</span>'; |
107 |
} |
108 |
|
109 |
// generate output |
110 |
$out = '<ul class="misapplied">'; |
111 |
|
112 |
foreach($misapplied as $misapplied_name){ |
113 |
|
114 |
$out .= '<li class="synonym">'.$misapplied_name['out'] . " "; |
115 |
// fill authors with the renderedFootnoteKey and sorting 'em |
116 |
foreach($misapplied_name['authorteam'] as $authorteam=>&$renderedFootnoteKey) { |
117 |
$renderedFootnoteKey = $joinedAuthorTeams[$authorteam]; |
118 |
} |
119 |
if(isset($misapplied_name['authorteam'])){ |
120 |
ksort($misapplied_name['authorteam']); |
121 |
$out .= join('; ', $misapplied_name['authorteam']); |
122 |
} |
123 |
$out .= '</li>'; |
124 |
|
125 |
} |
126 |
$out .= '</ul>'; |
127 |
|
128 |
$out .= theme('cdm_footnotes', $footnoteListKey, 'div'); |
129 |
RenderHints::popFromRenderStack(); |
130 |
return $out; |
131 |
} |
132 |
|
133 |
function theme_cdm_acceptedFor(){ |
134 |
RenderHints::pushToRenderStack('acceptedFor'); |
135 |
|
136 |
$out = ''; |
137 |
if(isset($_REQUEST['acceptedFor'])){ |
138 |
|
139 |
$synonym = cdm_ws_get(CDM_WS_PORTAL_TAXON, $_REQUEST['acceptedFor']); |
140 |
|
141 |
if($synonym){ |
142 |
$out .= '<span class="acceptedFor">'; |
143 |
$out .= t('is accepted for '); |
144 |
if(isset($synonym->name->nomenclaturalReference)){ |
145 |
$referenceUri = url(path_to_reference($synonym->name->nomenclaturalReference->uuid)); |
146 |
} |
147 |
$out .= theme('cdm_taxonName', $synonym->name, null, $referenceUri); |
148 |
$out .= theme('cdm_annotations_as_footnotekeys', $synonym); |
149 |
$out .= '</span>'; |
150 |
} |
151 |
} |
152 |
RenderHints::popFromRenderStack(); |
153 |
return $out; |
154 |
} |
155 |
|
156 |
function theme_cdm_list_of_taxa($records, $showMedia = false){ |
157 |
|
158 |
RenderHints::pushToRenderStack('list_of_taxa'); |
159 |
|
160 |
$showMedia_taxa = variable_get('cdm_dataportal_findtaxa_show_taxon_thumbnails', 1); |
161 |
$showMedia_synonyms = variable_get('cdm_dataportal_findtaxa_show_synonym_thumbnails', 0); |
162 |
|
163 |
// .. well, for sure not as performant as before, but better than nothing. |
164 |
$synonym_uuids = array(); |
165 |
foreach($records as $taxon){ |
166 |
if($taxon->class != "Taxon"){ |
167 |
if(!array_key_exists($taxon->uuid, $synonym_uuids)){ |
168 |
$synonym_uuids[$taxon->uuid] = $taxon->uuid; |
169 |
} |
170 |
} |
171 |
} |
172 |
// batch service not jet implemented: |
173 |
// $table_of_accepted = cdm_ws_property(CDM_WS_PORTAL_TAXON_ACCEPTED, join(',', $synonym_uuids)); |
174 |
// thus ... |
175 |
$table_of_accepted = array(); |
176 |
foreach($synonym_uuids as $synUuid){ |
177 |
$table_of_accepted[$synUuid] = cdm_ws_get(CDM_WS_PORTAL_TAXON_ACCEPTED, $synUuid); |
178 |
} |
179 |
|
180 |
$out = '<ul class="cdm_names" style="background-image: none;">'; |
181 |
|
182 |
foreach($records as $taxon){ |
183 |
// its a Taxon |
184 |
if($taxon->class == "Taxon"){ |
185 |
$taxonUri = url(path_to_taxon($taxon->uuid)); |
186 |
if(isset($taxon->name->nomenclaturalReference)){ |
187 |
$referenceUri = url(path_to_reference($taxon->name->nomenclaturalReference->uuid)); |
188 |
} |
189 |
$out .= '<li class="Taxon">'.theme('cdm_taxonName', $taxon->name, $taxonUri, $referenceUri); |
190 |
$out .= theme('cdm_annotations_as_footnotekeys', $taxon); |
191 |
|
192 |
if($showMedia_taxa){ |
193 |
$out .= theme('cdm_taxon_list_thumbnails', $taxon); |
194 |
} |
195 |
|
196 |
$out .= '</li>'; |
197 |
} else { |
198 |
// its a synonym |
199 |
$uuid = $taxon->uuid; |
200 |
$acceptedTaxa = $table_of_accepted[$uuid]; |
201 |
if(count($acceptedTaxa) == 1){ |
202 |
$acceptedTaxon = $acceptedTaxa[0]; |
203 |
$taxonUri = uri_to_synonym($taxon->uuid, $acceptedTaxon->uuid, 'synonymy'); |
204 |
if(isset($acceptedTaxon->name->nomenclaturalReference)){ |
205 |
$referenceUri = url(path_to_reference($acceptedTaxon->name->nomenclaturalReference->uuid)); |
206 |
} |
207 |
$out .= '<li class="Synonym">'.theme('cdm_taxonName', $taxon->name, $taxonUri, $referenceUri); |
208 |
$out .= theme('cdm_annotations_as_footnotekeys', $taxon); |
209 |
if($showMedia_synonyms){ |
210 |
$out .= theme('cdm_taxon_list_thumbnails', $acceptedTaxon); |
211 |
} |
212 |
$out .= '</li>'; |
213 |
} else { |
214 |
//TODO avoid using Ajax in the cdm_dynabox |
215 |
//TODO add media |
216 |
$out .= theme('cdm_dynabox', theme('cdm_taxonName', $taxon->name, null, null, false), cdm_compose_url(CDM_WS_PORTAL_TAXON_ACCEPTED, array($taxon->uuid)), 'cdm_list_of_taxa'); |
217 |
} |
218 |
} |
219 |
} |
220 |
$out .= '</ul>'; |
221 |
RenderHints::popFromRenderStack(); |
222 |
return $out; |
223 |
} |
224 |
|
225 |
|
226 |
function theme_cdm_related_taxon($taxon, $reltype_uuid = false){ |
227 |
|
228 |
$relsign = ''; |
229 |
$name_prefix = ''; |
230 |
$name_postfix = ''; |
231 |
switch ($reltype_uuid){ |
232 |
case UUID_HETEROTYPIC_SYNONYM_OF: |
233 |
case UUID_SYNONYM_OF: |
234 |
$relsign = '='; |
235 |
break; |
236 |
case UUID_HOMOTYPIC_SYNONYM_OF: |
237 |
$relsign = '≡'; |
238 |
break; |
239 |
case UUID_MISAPPLIED_NAME_FOR: |
240 |
case UUID_INVALID_DESIGNATION_FOR: |
241 |
$relsign = '–'; // – — − |
242 |
$name_prefix = '"'; |
243 |
$name_postfix = '"'; |
244 |
break; |
245 |
default : |
246 |
$relsign = '–'; |
247 |
} |
248 |
|
249 |
RenderHints::pushToRenderStack('related_taxon'); |
250 |
|
251 |
//$taxonUri = url(path_to_taxon($taxon->uuid)); |
252 |
if($taxon->name->nomenclaturalReference){ |
253 |
$referenceUri = url(path_to_reference($taxon->name->nomenclaturalReference->uuid)); |
254 |
} |
255 |
$nameHtml = theme('cdm_taxonName', $taxon->name, $taxonUri, $referenceUri); |
256 |
$nameHtml .= theme('cdm_annotations_as_footnotekeys', $taxon); |
257 |
|
258 |
//later homonym or trated as later homonym |
259 |
$taxon_name_relations = cdm_ws_get(CDM_WS_PORTAL_TAXON_NAMERELATIONS, $taxon->uuid); |
260 |
foreach($taxon_name_relations as $element){ |
261 |
switch ($element->type->representation_L10n){ |
262 |
case 'later homonym for': |
263 |
$later_homonym = ' [non ' . l($element->fromName->titleCache . ']', |
264 |
'cdm_dataportal/name/' . $element->fromName->uuid . '/' . $taxon->uuid); |
265 |
break; |
266 |
case 'treated as later homonym for': |
267 |
$later_homonym = ' [non ' . l($element->fromName->titleCache . ']', |
268 |
'cdm_dataportal/name/' . $element->fromName->uuid); |
269 |
break; |
270 |
} |
271 |
} |
272 |
|
273 |
|
274 |
$out = '<span class="relation_sign">'.$relsign.'</span>'.$name_prefix . $nameHtml . $name_postfix . $later_homonym; |
275 |
|
276 |
//var_dump($taxon_name_relations[0]->type->representation_L10n); |
277 |
|
278 |
$out = uuid_anchor($taxon->uuid, $out); |
279 |
|
280 |
RenderHints::popFromRenderStack(); |
281 |
|
282 |
return $out; |
283 |
} |
284 |
|
285 |
|
286 |
/** |
287 |
*/ |
288 |
function theme_cdm_taxon_list_thumbnails($taxon){ |
289 |
|
290 |
$gallery_name = $taxon->uuid; |
291 |
|
292 |
$showCaption = variable_get('cdm_dataportal_findtaxa_show_thumbnail_captions', 1); |
293 |
$prefMimeTypeRegex = 'image:.*'; |
294 |
$prefMediaQuality = '*'; |
295 |
|
296 |
$gallery_settings = getGallerySettings(CDM_DATAPORTAL_SEARCH_GALLERY_NAME); |
297 |
|
298 |
if($showCaption){ |
299 |
//$captionElements = array('title', '#uri'=>t('open Image')); |
300 |
$captionElements = array('title', 'rights'); |
301 |
} |
302 |
|
303 |
$galleryLinkUri = path_to_taxon($taxon->uuid).'/images'; |
304 |
$selectShowMedia = variable_get('cdm_dataportal_show_media', 0); |
305 |
if ($selectShowMedia == 0){ |
306 |
$mediaList = cdm_ws_get(CDM_WS_PORTAL_TAXON_MEDIA, array($taxon->uuid, $prefMimeTypeRegex, $prefMediaQuality)); |
307 |
}else{ |
308 |
$mediaList = cdm_ws_get(CDM_WS_PORTAL_TAXON_SUBTREE_MEDIA, array($taxon->uuid, $prefMimeTypeRegex, $prefMediaQuality)); |
309 |
} |
310 |
//$mediaList = cdm_ws_get(CDM_WS_PORTAL_TAXONOMY_MEDIA, array(variable_get('cdm_taxonomictree_uuid', false), $taxon ->rank, $taxon->uuid )); |
311 |
$out .= theme('cdm_media_gallerie', $mediaList, $gallery_name , |
312 |
$gallery_settings['cdm_dataportal_media_maxextend'], |
313 |
$gallery_settings['cdm_dataportal_media_cols'], |
314 |
$gallery_settings['cdm_dataportal_media_maxRows'], |
315 |
$captionElements, 'LIGHTBOX', null, $galleryLinkUri); |
316 |
|
317 |
return $out; |
318 |
} |
319 |
|
320 |
|