Project

General

Profile

Download (15.5 KB) Statistics
| Branch: | Tag: | Revision:
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', "var=[pageoption][searchtaxa][showThumbnails]&val=");
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 .= '<div id="search_results">';
52
		$out .= theme('cdm_list_of_taxa', $pager->records);
53
		$out .= '</div>';
54
		$out .= theme('cdm_pager', $pager, $path, $parameters);
55
	} else {
56
		$out = '<h4 class="error">Sorry, no matching entries found.</h4>';
57
	}
58
	return $out;
59
}
60

    
61

    
62
/**
63
 * renders misapplied names and invalid designations.
64
 * Both relation types are currently treated the same!
65
 *
66
 * @param unknown_type $taxonRelationships
67
 * @return unknown
68
 */
69
function theme_cdm_taxonRelationships($taxonRelationships){
70

    
71
	if(!$taxonRelationships){
72
		return;
73
	}
74

    
75
	RenderHints::pushToRenderStack('taxonRelationships');
76
	$footnoteListKey = 'taxonRelationships';
77
	RenderHints::setFootnoteListKey($footnoteListKey);
78

    
79
	$misapplied = array();
80
	$joinedAuthorTeams = array();
81

    
82
	$taxon_relationship_types = variable_get(CDM_TAXON_RELATIONSHIP_TYPES, unserialize(CDM_TAXON_RELATIONSHIP_TYPES_DEFAULT));
83

    
84
	// aggregate misapplied names having the same fullname:
85
	foreach($taxonRelationships as $taxonRelation){
86

    
87
	    if( in_array($taxonRelation->type->uuid, $taxon_relationship_types)) {
88

    
89
    		if( $taxonRelation->type->uuid == UUID_MISAPPLIED_NAME_FOR || $taxonRelation->type->uuid == UUID_INVALID_DESIGNATION_FOR ){
90

    
91
    			$name = $taxonRelation->fromTaxon->name->titleCache;
92

    
93
    			$author_team = cdm_ws_get(CDM_WS_REFERENCE_AUTHORTEAM, $taxonRelation->fromTaxon->sec->uuid);
94
    			$authorteam = $author_team->titleCache;
95

    
96
    			if(!isset($misapplied[$name])){
97
    				$misapplied[$name]['out'] =
98
    				  '<span class="misapplied">'
99
    				  .theme('cdm_related_taxon',$taxonRelation->fromTaxon, UUID_MISAPPLIED_NAME_FOR).
100
    				  '</span>';
101
    			}
102

    
103
    			// collect all authors for this fullname
104
    			if(isset($authorteam)){
105
    				$misapplied[$name]['authorteam'][$authorteam] = '';
106
    				$joinedAuthorTeams[$authorteam] = 'sensu '.theme('cdm_reference', $taxonRelation->fromTaxon->sec);
107
    			}
108

    
109
    	    } else {
110
    	      // all relationsship types but misapplied_name_for invalid_designation_for
111
    	       $taxonRelationshipsLines[] = theme('cdm_related_taxon',$taxonRelation->fromTaxon, $taxonRelation->type->uuid, $taxonRelation->type->representation_L10n_abbreviatedLabel, true);
112
    	    }
113
   		}
114
	}
115

    
116
	// sort the joinedAuthorTeams and create footnotes and footnotekeys
117
	ksort($joinedAuthorTeams);
118
	foreach($joinedAuthorTeams as $authorteam=>$sensuCitation){
119
		$footnoteKey = FootnoteManager::addNewFootnote($footnoteListKey, $sensuCitation);
120
		$joinedAuthorTeams[$authorteam] = '<span class="sensu">sensu '.$authorteam. theme('cdm_footnote_key', $footnoteKey).'</span>';
121
	}
122

    
123
	// generate output
124
	if(is_array($misapplied) && count($misapplied) >0 ){
125
    	$out .= '<ul class="misapplied">';
126
    	foreach($misapplied as $misapplied_name){
127

    
128
    		$out .= '<li class="synonym">'.$misapplied_name['out'] . " ";
129
    		if(isset($misapplied_name['authorteam'])){
130
    			// fill authors with the renderedFootnoteKey and sorting 'em
131
    			foreach($misapplied_name['authorteam'] as $authorteam=>&$renderedFootnoteKey) {
132
    				$renderedFootnoteKey = $joinedAuthorTeams[$authorteam];
133
    			}
134
    				ksort($misapplied_name['authorteam']);
135
    				$out .= join('; ', $misapplied_name['authorteam']);
136
    		}
137
    		$out .= '</li>';
138

    
139
    	}
140
    	$out .= '</ul>';
141
	}
142

    
143
	if(is_array($taxonRelationshipsLines) && count($taxonRelationshipsLines) >0 ){
144
    	$out .= '<ul class="taxonRelationships">';
145
    	foreach($taxonRelationshipsLines as $taxonRelationshipLine){
146
    		$out .= '<li class="synonym">'. $taxonRelationshipLine . '</li>';
147
    	}
148
    	$out .= '</ul>';
149
	}
150

    
151

    
152
	$tr_footnotes = theme('cdm_footnotes', $footnoteListKey, 'li');
153
	$tr_footnotes_exploded = explode('sensu', $tr_footnotes);
154
	$tr_footnotes_aux = '';
155
	foreach ($tr_footnotes_exploded as $element){
156
		$tr_footnotes_aux .= $element;
157
	}
158
	$out .= '<ul>' . $tr_footnotes_aux . '</ul>';
159
	//$out .= '</ul>';
160
	RenderHints::popFromRenderStack();
161
	return $out;
162
}
163

    
164

    
165

    
166
function theme_cdm_acceptedFor(){
167
	RenderHints::pushToRenderStack('acceptedFor');
168

    
169
	$out = '';
170
	if(isset($_REQUEST['acceptedFor'])){
171

    
172
		$synonym = cdm_ws_get(CDM_WS_PORTAL_TAXON, $_REQUEST['acceptedFor']);
173

    
174
		if($synonym){
175
			$out .= '<span class="acceptedFor">';
176
			$out .= t('is accepted for ');
177
			if(isset($synonym->name->nomenclaturalReference)){
178
				$referenceUri = url(path_to_reference($synonym->name->nomenclaturalReference->uuid));
179
			}
180
			$out .= theme('cdm_taxonName', $synonym->name, null, $referenceUri);
181
			$out .= theme('cdm_annotations_as_footnotekeys', $synonym);
182
			$out .= '</span>';
183
		}
184
	}
185
	RenderHints::popFromRenderStack();
186
	return $out;
187
}
188

    
189

    
190

    
191
function theme_cdm_list_of_taxa($records, $showMedia = false){
192

    
193
	RenderHints::pushToRenderStack('list_of_taxa');
194

    
195
	$form_name = 'search_gallery';
196
	//$default_values = unserialize(CDM_DATAPORTAL_GALLERY_SETTINGS);
197
    //$gallery_settings = variable_get($form_name, $default_values);
198

    
199
    $gallery_settings = getGallerySettings(CDM_DATAPORTAL_SEARCH_GALLERY_NAME);
200

    
201
	$showMedia_taxa = $gallery_settings['cdm_dataportal_show_taxon_thumbnails'];
202
	$showMedia_synonyms = $gallery_settings['cdm_dataportal_show_synonym_thumbnails'];
203
	//$showMedia_taxa = variable_get('cdm_dataportal_findtaxa_show_taxon_thumbnails', 1);
204
	//$showMedia_synonyms = variable_get('cdm_dataportal_findtaxa_show_synonym_thumbnails', 0);
205

    
206
	$classification_uuid = get_taxonomictree_uuid_selected();
207

    
208
	// .. well, for sure not as performant as before, but better than nothing.
209
	$synonym_uuids = array();
210
	foreach($records as $taxon){
211
		if($taxon->class != "Taxon"){
212
			if(!array_key_exists($taxon->uuid, $synonym_uuids)){
213
				$synonym_uuids[$taxon->uuid] = $taxon->uuid;
214
			}
215
		}
216
	}
217
	// batch service not jet implemented:
218
	// $table_of_accepted = cdm_ws_property(CDM_WS_PORTAL_TAXON_ACCEPTED, join(',', $synonym_uuids));
219
	// thus ...
220
	$table_of_accepted = array();
221

    
222
	foreach($synonym_uuids as $synUuid){
223
		$table_of_accepted[$synUuid] = cdm_ws_get(CDM_WS_PORTAL_TAXON_ACCEPTED, array($synUuid, $classification_uuid));
224
	}
225

    
226
	$out = '<ul class="cdm_names" style="background-image: none;">';
227

    
228
	foreach($records as $taxon){
229
		// its a Taxon
230
		if($taxon->class == "Taxon"){
231
			$taxonUri = url(path_to_taxon($taxon->uuid));
232
			if(isset($taxon->name->nomenclaturalReference)){
233
				$referenceUri = url(path_to_reference($taxon->name->nomenclaturalReference->uuid));
234
			}
235
			$out .= '<li class="Taxon">'.theme('cdm_taxonName', $taxon->name, $taxonUri, $referenceUri);
236
			$out .= theme('cdm_annotations_as_footnotekeys', $taxon);
237

    
238
			if($showMedia_taxa){
239
				$out .= theme('cdm_taxon_list_thumbnails', $taxon);
240
			}
241
			$out .= '</li>';
242
		} else {
243
			// its a synonym
244
			$uuid = $taxon->uuid;
245
			$acceptedTaxa = $table_of_accepted[$uuid];
246
			if(count($acceptedTaxa) == 1){
247
				$acceptedTaxon = $acceptedTaxa[0];
248
				$taxonUri = theme('cdm_uri_to_synonym', $taxon->uuid, $acceptedTaxon->uuid, 'synonymy');
249
				if(isset($acceptedTaxon->name->nomenclaturalReference)){
250
					$referenceUri = url(path_to_reference($acceptedTaxon->name->nomenclaturalReference->uuid));
251
				}
252
				$out .= '<li class="Synonym">'.theme('cdm_taxonName', $taxon->name, $taxonUri, $referenceUri);
253
				$out .= theme('cdm_annotations_as_footnotekeys', $taxon);
254
				if($showMedia_synonyms){
255
					$out .= theme('cdm_taxon_list_thumbnails', $acceptedTaxon);
256
				}
257
				$out .= '</li>';
258
			} else {
259
				//TODO avoid using Ajax in the cdm_dynabox .... why?
260
				//TODO add media
261
				$out .= cdm_dynabox(
262
				  theme('cdm_taxonName', $taxon->name, null, null, false),
263
				  cdm_compose_url(CDM_WS_PORTAL_TAXON_ACCEPTED, array($taxon->uuid, $classification_uuid)),
264
				  'cdm_list_of_taxa',
265
				  'Click for accepted taxon');
266
			}
267
		}
268
	}
269

    
270
	$out .= '</ul>';
271
	RenderHints::popFromRenderStack();
272
	return $out;
273
}
274

    
275

    
276
function theme_cdm_related_taxon($taxon, $reltype_uuid = false, $relsign = null, $doLinkTaxon = false){
277

    
278
	static $relsign_homo = '≡';
279
	static $relsign_hetero = '=';
280
	static $relsign_invalid = '&ndash;';
281

    
282
  $relsign = '';
283
	$name_prefix = '';
284
	$name_postfix = '';
285

    
286
	$skiptags = array();
287

    
288
	if(!$relsign) {
289

    
290
       	switch ($reltype_uuid){
291
    		case UUID_HETEROTYPIC_SYNONYM_OF:
292
    		case UUID_SYNONYM_OF:
293
    			$relsign = $relsign_hetero;
294
    			break;
295
    		case UUID_HOMOTYPIC_SYNONYM_OF:
296
    			$relsign = $relsign_homo;
297
    			break;
298
    		case UUID_MISAPPLIED_NAME_FOR:
299
    		case UUID_INVALID_DESIGNATION_FOR:
300
    			$skiptags[] = 'authors';
301
    			$relsign = $relsign_invalid;
302
    			$name_prefix = '"';
303
    			$name_postfix = '"';
304
    			break;
305
    		default :
306
    			$relsign = $relsign_invalid;
307
	    }
308
	}
309
	/*
310
	 * names with status invalid or nudum are to be displayed with the $relsign_invalid,
311
	 * these names appear at the end of all names in their homotypic group
312
	 * (ordered correctly by the java cdm_lib)
313
	 */
314
	if ( is_array($taxon->name->status)) {
315
		foreach($taxon->name->status as $status){
316
			if ($status->type->uuid == UUID_NOMENCLATURALSTATUS_TYPE_INVALID || $status->type->uuid == UUID_NOMENCLATURALSTATUS_TYPE_NUDUM){
317
				$relsign = $relsign_invalid;
318
			}
319
		}
320
	}
321

    
322
	// now rendering starts ..
323

    
324
	RenderHints::pushToRenderStack('related_taxon');
325

    
326
	if($taxon->name->nomenclaturalReference){
327
		$referenceUri = url(path_to_reference($taxon->name->nomenclaturalReference->uuid));
328
	}
329
	if($doLinkTaxon){
330
	  $taxonUri = url(path_to_taxon($taxon->uuid));
331
	}
332
	//printing the taxonName and the handling the special case of annotations
333
	$nameHtml = theme('cdm_taxonName', $taxon->name, $taxonUri, $referenceUri, true, false, $skiptags);
334
	$special_annotations_array = array();
335
	$special_annotations_array[] = $taxon->name;
336
	$special_annotations_array[] = $taxon;
337
	$nameHtml .= theme('cdm_annotations_as_footnotekeys', $special_annotations_array);
338

    
339
	//later homonym or trated as later homonym AND bloking names
340
	$from_name_relations = cdm_ws_get(CDM_WS_PORTAL_TAXON_FROM_NAMERELATIONS, $taxon->uuid);
341
	$to_name_relations = cdm_ws_get(CDM_WS_PORTAL_TAXON_TO_NAMERELATIONS, $taxon->uuid);
342
	//first the FROM RELS
343
	if ($from_name_relations){
344
		foreach($from_name_relations as $element){
345
			switch ($element->type->representation_L10n){
346
				case 'later homonym for':
347
					if(isset($name_relations_html)){
348
						$name_relations_html .= ' nec ' . l($element->toName->titleCache . ' ' .  substr($element->toName->nomenclaturalReference->datePublished->start, 0, 4),
349
						    'cdm_dataportal/name/' . $element->toName->uuid . '/' . $taxon->uuid . '/' . $element->toName->taxonBases[0]->uuid);
350
					}else{
351
						$name_relations_html = ' non ' . l($element->toName->titleCache . ' ' .  substr($element->toName->nomenclaturalReference->datePublished->start, 0, 4),
352
                        'cdm_dataportal/name/' . $element->toName->uuid . '/' . $taxon->uuid . '/' . $element->toName->taxonBases[0]->uuid)
353
						. ' ' . $element->toName->datePublished->start;
354
					}
355
					break;
356
				case 'treated as later homonym for':
357
					if(isset($name_relations_html)){
358
						$name_relations_html = ' nec ' . l($element->toName->titleCache . ' ' .  substr($element->toName->nomenclaturalReference->datePublished->start, 0, 4),
359
                              'cdm_dataportal/name/' . $element->toName->uuid);
360
					}else{
361
						$name_relations_html = ' non ' . l($element->toName->titleCache . ' ' .  substr($element->toName->nomenclaturalReference->datePublished->start, 0, 4),
362
					                   'cdm_dataportal/name/' . $element->toName->uuid);
363
					}
364
					break;
365
			}
366
		}
367
		//second the TO RELS
368
		if ($to_name_relations){
369
			foreach($to_name_relations as $element){
370
				switch ($element->type->representation_L10n){
371
					case 'blocking name for':
372
						if(isset($name_relations_html) ){
373
							$name_relations_html .= ' nec ' . l($element->fromName->titleCache . ' ' .  substr($element->fromName->nomenclaturalReference->datePublished->start, 0, 4),
374
                'cdm_dataportal/name/' . $element->fromName->uuid . '/' . $taxon->uuid . '/' . $element->fromName->taxonBases[0]->uuid);
375
						}else{
376
							$name_relations_html = ' non ' . l($element->fromName->titleCache . ' ' .  substr($element->fromName->nomenclaturalReference->datePublished->start, 0, 4),
377
                        'cdm_dataportal/name/' . $element->fromName->uuid . '/' . $taxon->uuid . '/' . $element->fromName->taxonBases[0]->uuid)
378
							. ' ' . $element->fromName->datePublished->start;
379
						}
380
						break;
381
				}
382
			}
383
		}
384
    //rels output
385
		if(isset($name_relations_html)){
386
			$name_relations_html = '['. $name_relations_html .']';
387
		}
388
	}
389
  //geneal output
390
	$out = '<span class="relation_sign">'.$relsign.'</span>'.$name_prefix . $nameHtml . $name_postfix . $name_relations_html;
391
	$out = uuid_anchor($taxon->uuid, $out);
392

    
393
	RenderHints::popFromRenderStack();
394

    
395
	return $out;
396
}
397

    
398
/**
399
 */
400
function theme_cdm_taxon_list_thumbnails($taxon){
401

    
402

    
403
	$gallery_settings = getGallerySettings(CDM_DATAPORTAL_SEARCH_GALLERY_NAME);
404
	$showCaption = $gallery_settings['cdm_dataportal_show_thumbnail_captions'];
405

    
406
	if($showCaption){
407
		$captionElements = array('title', 'rights');
408
	}
409

    
410
	$gallery_name = $taxon->uuid;
411

    
412
 	$mediaQueryParameters = array("type"=>"ImageFile");
413
	$galleryLinkUri = path_to_taxon($taxon->uuid).'/images';
414

    
415
	// cdm_dataportal_show_media = ???? TODO
416
	$selectShowMedia = variable_get('cdm_dataportal_show_media', 0);
417
	if ($selectShowMedia == 0){
418
		$mediaList = cdm_ws_get(CDM_WS_PORTAL_TAXON_MEDIA, array($taxon->uuid), queryString( $mediaQueryParameters ));
419
	}else{
420
		$mediaList = cdm_ws_get(CDM_WS_PORTAL_TAXON_SUBTREE_MEDIA, array($taxon->uuid), queryString( $mediaQueryParameters ));
421
	}
422

    
423
	$out .= theme('cdm_media_gallerie', $mediaList, $gallery_name ,
424
    	$gallery_settings['cdm_dataportal_media_maxextend'],
425
    	$gallery_settings['cdm_dataportal_media_cols'],
426
    	$gallery_settings['cdm_dataportal_media_maxRows'],
427
    	$captionElements, 'LIGHTBOX', null, $galleryLinkUri);
428

    
429
	return $out;
430
}
431

    
432

    
(8-8/8)