Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

cdm-dataportal / modules / cdm_dataportal / theme / cdm_dataportal.page.theme @ 806baeb2

History | View | Annotate | Download (19.2 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
/**
14
 * default title for a taxon page
15
 *
16
 * @param NameTO $nameTO
17
 * @return the formatted taxon name
18
 */
19
function theme_cdm_taxon_page_title($taxon){
20

    
21
	$renderPath = 'taxon_page_title';
22
	if(isset($taxon->name->nomenclaturalReference)){
23
		$referenceUri = url(path_to_reference($taxon->name->nomenclaturalReference->uuid));
24
	}
25
	return '<span class="'.$taxon->class.'">'.theme('cdm_taxonName', $taxon->name, null, $referenceUri, $renderPath).'</span>';
26
}
27

    
28

    
29
/**
30
 * A wrapper function that groups available information to show by default, when
31
 * a taxon page is requested by the browser.
32
 * Individual themeing has to decide what this page should include (see methods beneath)
33
 * and what information should go into tabs or should not be shown at all.
34
 *
35
 * It is headed by the name of the accepted taxon without author and reference.
36
 * @param $taxonTO the taxon object
37
 * @param $page_part name of the part to display,
38
 *         valid values are: 'description', 'images', 'synonymy', 'all'
39
 */
40
function theme_cdm_taxon_page_general($taxon, $page_part = 'description') {
41

    
42
	global $theme;
43

    
44
	$page_part = variable_get('cdm_dataportal_taxonpage_tabs', 1) ? $page_part : 'all';
45
	$hideTabs = array();
46

    
47

    
48
	// get images
49
	$prefMimeTypeRegex = 'image:.*';
50
	$prefMediaQuality = '*';
51
	//$media =  cdm_ws_get(CDM_WS_TAXONOMY_MEDIA, array(variable_get('cdm_taxonomictree_uuid', false),$taxon->uuid));
52

    
53

    
54
	$selectShowMedia = variable_get('cdm_dataportal_show_media', 0);
55
	if ($selectShowMedia == 0){
56
		$media = cdm_ws_get(CDM_WS_TAXON_MEDIA, array($taxon->uuid, $prefMimeTypeRegex, $prefMediaQuality));
57
	}else{
58
		$media = cdm_ws_get(CDM_WS_TAXON_SUBTREE_MEDIA, array($taxon->uuid, $prefMimeTypeRegex, $prefMediaQuality));
59
	}
60
/*
61
 if(!isset($mediaList[0])) {
62
    $hideTabs[] = theme('cdm_taxonpage_tab', 'Images');
63
  }
64
*/
65

    
66
	if(!isset($media[0])) {
67
		$hideTabs[] = theme('cdm_taxonpage_tab', 'Images');
68
	}
69

    
70
	// hideImage flag depending on administative preset
71
	$hideImages = false;
72
	if(variable_get('image_hide_rank', '0') != '0'){
73
		$rankCompare = rank_compare($taxon->name->rank->uuid, variable_get('image_hide_rank', '-99'));
74
		$hideImages =  ($rankCompare > -1);
75
	}
76
	// $hideTabs[] = theme('cdm_taxonpage_tab', 'General');
77
	// $hideTabs[] = theme('cdm_taxonpage_tab', 'Synonymy')
78

    
79
	// hide tabs
80
	$tabhide_js = '';
81
	foreach($hideTabs as $tabText) {
82
		$tabhide_js .= "$('.tabs.primary').children('li').children('a:contains(\"$tabText\")').hide();\n";
83
	}
84
	drupal_add_js("
85
  $(document).ready(function(){
86
  $tabhide_js
87
    });", 'inline');
88

    
89
  $out = '';
90
  $out .= theme('cdm_back_to_search_result_button');
91
  if(variable_get('cdm_dataportal_display_is_accepted_for', CDM_DATAPORTAL_DISPLAY_IS_ACCEPTED_FOR)){
92
  $out .= theme('cdm_acceptedFor', 'page_general');
93
  }
94
  // --- DESCRIPTION --- //
95
  if($page_part == 'description' || $page_part == 'all'){
96

    
97
  	$featureTree = cdm_ws_get(CDM_WS_FEATURETREE, variable_get('cdm_dataportal_featuretree_uuid', false));
98
  	$taxonDescriptions = cdm_ws_get(CDM_WS_TAXON_DESCRIPTIONS, $taxon->uuid);
99
  	$mergedTrees = cdm_ws_descriptions_by_featuretree($featureTree, $taxonDescriptions, variable_get('cdm_dataportal_descriptions_separated', FALSE));
100

    
101
  	$out .= '<div id="general">';
102
  	$out .= theme('cdm_taxon_page_description', $taxon, $mergedTrees, $media, $hideImages);
103
  	$out .= '</div>';
104
  }
105
  // --- IMAGES --- //
106
  if(!$hideImages && $page_part == 'images' || $page_part == 'all'){
107
  	$out .= '<div id="images">';
108
  	if($page_part == 'all'){
109
  		$out .= '<h2>'.t('Images').'</h2>';
110
  	}
111
  	$out .= theme('cdm_taxon_page_images', $taxon, $media);
112
  	$out .= '</div>';
113

    
114
  	if($theme == 'garland_cichorieae'){
115
  		$out .= theme('cdm_taxon_page_images_cichorieae_copyright');
116
  	}
117
  	 
118
  }
119
  // --- SYNONYMY --- //
120
  if($page_part == 'synonymy' || $page_part == 'all'){
121
  	$out .= '<div id="synonymy">';
122
  	if($page_part == 'all'){
123
  		$out .= '<h2>'.t('Synonymy').'</h2>';
124
  	}
125
  	$addAcceptedTaxon = !variable_get('cdm_dataportal_nomref_in_title', CDM_DATAPORTAL_NOMREF_IN_TITLE);
126
  	$out .= theme('cdm_taxon_page_synonymy', $taxon, $addAcceptedTaxon);
127

    
128
  	if(variable_get('cdm_dataportal_display_name_relations', 1)){
129

    
130
  		$nameRelationships = cdm_ws_get(CDM_WS_TAXON_NAMERELATIONS, $taxon->uuid);
131
  		// TODO is it correct to skip relationsFromThisName since all relationships are to be understood as 'is .... of'
132
  		if(variable_get('cdm_dataportal_name_relations_skiptype_basionym', 1)){
133
  			$skip = array(UUID_BASIONYM);
134
  		}
135
  		$out .= theme('cdm_nameRelations', $nameRelationships, $skip);
136
  	}
137
  	$out .= '</div>';
138
  }
139

    
140
  return $out;
141
}
142

    
143

    
144
/**
145
 * Outputs all descriptive data and shows the preferred picture of the
146
 * accepted taxon.
147
 *
148
 */
149
function theme_cdm_taxon_page_description($taxon, $mergedTrees, $media = null, $hideImages = false){
150

    
151
	//  if(!$hideImages){
152
	//    // preferred image
153
	//    // hardcoded for testing;
154
	//    $defaultRepresentationPart = false;
155
	//    $defaultRepresentationPart->width = 184;
156
	//    $defaultRepresentationPart->height = 144;
157
	//    $defaultRepresentationPart->uri = drupal_get_path('theme', 'palmweb_2').'/images/no_picture.png';
158
	//
159
	//    // preferred image size 184px × 144
160
	//    $imageMaxExtend = 184;
161
	//    $out .= '<div class="preferredImage">'.$defaultRepresentationPart->uri.theme('cdm_preferredImage', $media, $defaultRepresentationPart, $imageMaxExtend).'</div>';
162
	//  }
163

    
164
	// description TOC
165
	$out .= theme('cdm_featureTreeTOCs', $mergedTrees);
166
	// description
167
	$out .= theme('cdm_featureTrees', $mergedTrees, $taxon);
168
	return $out;
169
}
170

    
171
/**
172
 * Show whole synonymy for the accepted taxon. Synonymy list is headed by the complete scientific name
173
 * of the accepted taxon with nomenclatural reference.
174
 *
175
 */
176
function theme_cdm_taxon_page_synonymy($taxon, $addAcceptedTaxon){
177

    
178
	$renderPath = 'taxon_page_synonymy';
179
	$synomymie = cdm_ws_get(CDM_WS_TAXON_SYNONYMY, $taxon->uuid);
180
	$taxonRelationships = cdm_ws_get(CDM_WS_TAXON_RELATIONS, $taxon->uuid);
181
	$skip = array(UUID_BASIONYM);
182

    
183
	if($addAcceptedTaxon){
184
		if(isset($taxon->name->nomenclaturalReference)){
185
			$referenceUri = url(path_to_reference($taxon->name->nomenclaturalReference->uuid));
186
		}
187
		$out .= theme('cdm_taxonName', $taxon->name, null, $referenceUri, $renderPath);
188
	}
189

    
190
	if($addAcceptedTaxon && !isset($synomymie->homotypicSynonymsByHomotypicGroup[0])){
191
		// display the type information for the added taxon
192
		$typeDesignations = cdm_ws_get(CDM_WS_TAXON_NAMETYPEDESIGNATIONS, $taxon->uuid);
193
		if($typeDesignations){
194
			$out .= theme('cdm_typedesignations', $typeDesignations);
195
		}
196
	} else {
197
		// reder the homotypicSynonymyGroup including the type information
198
		$out .= theme('cdm_homotypicSynonymyGroup', $synomymie->homotypicSynonymsByHomotypicGroup);
199
	}
200
	if($synomymie->heterotypicSynonymyGroups) {
201
		foreach($synomymie->heterotypicSynonymyGroups as $homotypicalGroup){
202
			$out .= theme('cdm_heterotypicSynonymyGroup', $homotypicalGroup);
203
		}
204
	}
205

    
206
	$out .= theme('cdm_taxonRelations', $taxonRelationships, $skip);
207

    
208
	return $out;
209
}
210

    
211
/**
212
 * Show the collection of images stored with the accepted taxon
213
 *
214
 */
215
function theme_cdm_taxon_page_images($taxon, $media){
216

    
217
	$hasImages = isset($media[0]);
218

    
219
	if($hasImages){
220
		//
221
		$maxExtend = 150;
222
		$cols = 3;
223
		$maxRows = false;
224
		$alternativeMediaUri = null;
225
		$captionElements = array('title', 'rights', '#uri'=>t('open Image'));
226
		$gallery_name = $taxon->uuid;
227
		$mediaLinkType = 'LIGHTBOX';
228
		
229
		$gallery_settings = getGallerySettings(CDM_DATAPORTAL_MEDIA_GALLERY_NAME);
230
	
231
		$out = '<div class="image-gallerie">';
232
		$out .= theme('cdm_media_gallerie', $media, 
233
					$gallery_name, 
234
					$gallery_settings['cdm_dataportal_media_maxextend'], 
235
	             	$gallery_settings['cdm_dataportal_media_cols'], 
236
	             	$gallery_settings['cdm_dataportal_media_maxRows'],
237
	             	$captionElements, 
238
	             	$mediaLinkType, 
239
	             	null);
240
		$out .= '</div>';
241
	}else{
242
		$out = 'No images available.';
243

    
244
	}
245
	return $out;
246
}
247

    
248
/**
249
 * Show a reference in it's atomized form
250
 */
251
function theme_cdm_reference_page($referenceTO){
252

    
253
	/*
254
	 if($referenceTO->titleCache) {
255
		drupal_set_title($referenceTO->titleCache);
256
		} else {
257
		drupal_set_title($referenceTO->fullCitation);
258
		}
259
		*/
260

    
261
	$field_order = array(
262
    "title",
263
	//"titleCache",
264
	//"citation",
265
    "authorTeam",
266
    "editor",
267
    "publisher",
268
    "placePublished",
269
    "datePublished",
270
    "year",
271
    "edition",      // class Book
272
    "volume",       // class Article
273
    "seriesPart",
274
    "inReference",
275
	//"inJournal",     // class Article
276
	//"inBook",        // class BookSection
277
    "nomRefBase",    // class BookSection, Book, Article
278
	//"inProceedings", // class InProceedings
279
    "pages",         // class Article
280
    "series",        // class Article, PrintSeries
281
    "school",        // class Thesis
282
    "institution",   // class Report
283
    "organization",  // class Proceedings
284
    "nextVersion",
285
    "previousVersion",
286
    "isbn",         // class Book
287
    "issn",         // class Journal
288
    "uri",
289
	);
290
	/*
291
	 $table_rows = array();
292
	 foreach($field_order as $fieldname){
293

    
294
		if(isset($referenceTO->$fieldname)){
295

    
296
		if($fieldname == "datePublished") {
297
		$partial = $referenceTO->$fieldname;
298
		$datePublished = '';
299
		if($partial->start){
300
		//var_dump ($partial->start);
301
		$datePublishedYear = substr($partial->start, 0, 4);
302
		$datePublishedMonth = substr($partial->start, 5, 2);
303

    
304
		if (!(preg_match('#[0-9]#',$datePublishedMonth))){
305
		$datePublishedMonth = '00';
306
		}
307

    
308
		$datePublishedDay = substr($partial->start, 7, 2);
309
		if (!(preg_match('#[0-9]#',$datePublishedDay))){
310
		$datePublishedDay = '00';
311
		}
312
		$datePublished = $datePublishedYear.'-'.$datePublishedMonth.'-'.$datePublishedDay;
313
		}
314
		if($partial->end){
315
		$datePublished = (strlen($datePublished) > 0 ? ' '.t('to').' ' : '').substr($partial->end, 0, 4).'-'.substr($partial->end, 4, 2).'-'.substr($partial->end, 6, 2);
316
		}
317
		$table_rows[] = array(t(ucfirst(strtolower($fieldname))), $datePublished);
318
		//$datePublished = array(t(ucfirst(strtolower($fieldname))), $datePublished);
319
		} else if(is_object($referenceTO->$fieldname)){
320
		if ($fieldname == "authorTeam"){
321
		$dump = $referenceTO->$fieldname;
322
		$teammembers = "teamMembers";
323
		$team = $dump->$teammembers;
324
		$nameArray = array();
325

    
326
		foreach($team as $member){
327
		if (strlen($member->lastname)> 0){
328
		$nname = $member->lastname;
329
		$name = $nname;
330
		if (strlen($member->firstname)> 0){
331
		$vname = $member->firstname;
332
		$name =$vname." ". $nname;
333
		}
334
		$nameArray[] =$name;
335
		}else{
336
		if (strlen($member->titleCache)> 0){
337
		$nameArray[] = $member->titleCache;
338
		}
339
		}
340
		}
341
		$names = join($nameArray, ", ");
342
		}else if ($fieldname == "inReference"){
343
		$type = $referenceTO ->$fieldname-> type;
344
		$names = $referenceTO-> $fieldname-> titleCache;
345
		switch ($type) {
346
		case "Book":
347
		$fieldname = "in book";
348
		break;
349
		case "Journal":
350
		$fieldname = "in journal";
351
		break;
352
		case "Proceedings":
353
		$fieldname = "in proceedings";
354
		break;
355
		}
356

    
357
		}else{
358
		$names = $referenceTO->$fieldname-> titleCache;
359
		}
360
		$table_rows[] = array(t(ucfirst(strtolower($fieldname))), $names);
361
		//$name = array(t(ucfirst(strtolower($fieldname))), $names);
362

    
363
		} else {
364
		$table_rows[] = array(t(ucfirst(strtolower($fieldname))), $referenceTO->$fieldname);
365
		//$name = array(t(ucfirst(strtolower($fieldname))), $referenceTO->$fieldname);
366
		}
367
		}
368
		}
369
		*/
370

    
371
	//select the type of the reference and find the in Reference attribute
372

    
373
	$referenceData = array(
374
    "title" => NULL,
375
	//"titleCache",
376
	//"citation",
377
    "authorTeam" => NULL,
378
    "editor" => NULL,
379
    "publisher" => NULL,
380
    "placePublished" => NULL,
381
    "datePublished" => NULL,
382
    "year" => NULL,
383
    "edition" => NULL,      // class Book
384
    "volume" => NULL,       // class Article
385
    "seriesPart" => NULL,
386
    "inReference" => NULL,
387
	//"inJournal",     // class Article
388
	//"inBook",        // class BookSection
389
    "nomRefBase" => NULL,    // class BookSection, Book, Article
390
	//"inProceedings", // class InProceedings
391
    "pages" => NULL,         // class Article
392
    "series" => NULL,        // class Article, PrintSeries
393
    "school" => NULL,        // class Thesis
394
    "institution" => NULL,   // class Report
395
    "organization" => NULL,  // class Proceedings
396
    "nextVersion" => NULL,
397
    "previousVersion" => NULL,
398
    "isbn" => NULL,         // class Book
399
    "issn" => NULL,         // class Journal
400
    "uri" => NULL,
401
	);
402

    
403
	foreach($field_order as $fieldname){
404

    
405
		if(isset($referenceTO->$fieldname)){
406
			switch($fieldname){
407
				case "datePublished":
408
					$partial = $referenceTO->$fieldname;
409
					$datePublished = '';
410
					if($partial->start){
411
						$datePublishedYear = substr($partial->start, 0, 4);
412
						$datePublishedMonth = substr($partial->start, 5, 2);
413
						if (!(preg_match('#[0-9]#',$datePublishedMonth))){
414
							$datePublishedMonth = '00';
415
						}
416
						$datePublishedDay = substr($partial->start, 7, 2);
417
						if (!(preg_match('#[0-9]#',$datePublishedDay))){
418
							$datePublishedDay = '00';
419
						}
420
						$datePublished = $datePublishedYear.'-'.$datePublishedMonth.'-'.$datePublishedDay;
421
					}
422
					if($partial->end){
423
						$datePublished = (strlen($datePublished) > 0 ? ' '.t('to').' ' : '').substr($partial->end, 0, 4).'-'.substr($partial->end, 4, 2).'-'.substr($partial->end, 6, 2);
424
					}
425

    
426
					$referenceData[$fieldname] = $datePublishedYear;
427
					break;
428

    
429
				default:
430
					if(is_object($referenceTO->$fieldname)){
431
						if ($fieldname == "authorTeam"){
432
							$dump = $referenceTO->$fieldname;
433
							$teammembers = "teamMembers";
434
							$team = $dump->$teammembers;
435
							$nameArray = array();
436

    
437
							foreach($team as $member){
438
								if (strlen($member->lastname)> 0){
439
									$nname = $member->lastname;
440
									$name = $nname;
441
									if (strlen($member->firstname)> 0){
442
										$vname = $member->firstname;
443
										$name =$vname." ". $nname;
444
									}
445
									$nameArray[] =$name;
446
								}else{
447
									if (strlen($member->titleCache)> 0){
448
										$nameArray[] = $member->titleCache;
449
									}
450
								}
451
							}
452
							$names = join($nameArray, ", ");
453
							$referenceData[$fieldname] = $names;
454
						}else if ($fieldname == "inReference"){
455
							$names = $referenceTO->$fieldname->titleCache;
456
							$referenceData[$fieldname] = $names;
457
						}else{
458
							$names = $referenceTO->$fieldname->titleCache;
459
							$referenceData[$fieldname] = $names;
460
						}
461
					}else{
462
						$referenceData[$fieldname] = $referenceTO->$fieldname;
463
					}
464

    
465
			}
466
		}
467
	}
468

    
469
	return "" . ((strlen($referenceData["authorTeam"])>0) ? ($referenceData["authorTeam"] . '. ') : '')
470
	. ((strlen($referenceData["datePublished"])>0) ? ($referenceData["datePublished"] . '. ') : '')
471
	. ((strlen($referenceData["title"])>0) ? ($referenceData["title"] . '. ') : "")
472
	. ((strlen($referenceData["placePublished"])>0) ? ($referenceData["placePublished"] . '. ') : '')
473
	. ((strlen($referenceData["editor"])>0) ? ($referenceData["editor"] . '. ') : '')
474
	. ((strlen($referenceData["publisher"])>0) ? ($referenceData["publisher"] . '. ') : '')
475
	. ((strlen($referenceData["inReference"])>0) ? ($referenceData["inReference"] . '. ') : '')
476
	. ((strlen($referenceData["series"])>0) ? ($referenceData["series"] . '. ') : '')
477
	. ((strlen($referenceData["volume"])>0) ? ($referenceData["volume"] . '. ') : '')
478
	. ((strlen($referenceData["pages"])>0) ? ($referenceData["pages"] . '. ') : '')
479
	. ((strlen($referenceData["isbn"])>0) ? ($referenceData["isbn"] . '. ') : '')
480
	. ((strlen($referenceData["issn"])>0) ? ($referenceData["issn"] . '. ') : '')
481
	. ((strlen($referenceData["uri"])>0) ? ($referenceData["uri"] . '. ') : '');
482

    
483
}
484

    
485

    
486
function theme_cdm_media_page($media, $mediarepresentation_uuid = false, $partId = false){
487
	$out = '';
488
	// determine which reprresentation and which part to show
489
	$representationIdx = 0;
490
	if($mediarepresentation_uuid){
491
		$i = 0;
492
		foreach($media->representations as $representation) {
493
			if($representation->uuid == $mediarepresentation_uuid){
494
				$representationIdx = $i;
495
			}
496
			$i++;
497
		}
498
	} else {
499
		$mediarepresentation_uuid = $media->representations[0]->uuid;
500
	}
501

    
502
	$partIdx  = 0;
503
	if(!is_numeric($partId)){
504
		// assuming it is an uuid
505
		$i = 0;
506
		foreach($media->representations[$representationIdx]->parts as $part) {
507
			if($part->uuid == $partId){
508
				$partIdx = $i;
509
			}
510
			$i++;
511
		}
512
	} else {
513
		// assuming it is an index
514
		$partIdx = $partId;
515
	}
516

    
517
	$media_metadata = cdm_read_media_metadata($media);
518
	//$title = $media->titleCache;
519
	$title = $media_metadata['title'];
520

    
521
	$imageMaxExtend = variable_get('image-page-maxextend', 400);
522

    
523
	if(!$title){
524
		$title = 'Media### '.$media->uuid.'';
525
	}
526

    
527
	drupal_set_title($title);
528

    
529

    
530
	$out .= '<div class="media">';
531

    
532
	//$out .= '<div class="viewer">';
533
	$out .= theme(cdm_back_to_image_gallery_button);
534
	$out .= '<div class="viewer">';
535
	//$out .= theme('cdm_media_gallerie_image', $representation->parts[$partIdx], $imageMaxExtend);
536
	$out .= theme('cdm_openlayers_image', $media->representations[$representationIdx]->parts[$partIdx], $imageMaxExtend);
537
	$out .= '</div>';
538

    
539
	// general media metadata
540
	//$media_metadata = cdm_ws_get(CDM_WS_MEDIA_METADATA, array($media->uuid));
541
	//vardump("PRINTING MEDIA METADATA");
542
	//vardump($media_metadata);
543
	//vardump("PRINTING MEDIA");
544
	//vardump($media);
545
	$metadataToPrint = theme('cdm_media_caption', $media);
546
	$out .= $metadataToPrint;
547

    
548

    
549
	//tabs for the different representations
550
	//ul.secondary
551
	$out .= '<ul class="primary">';
552
	foreach($media->representations as $representation){
553
		$out .= '<li>'.l($media->representations[$representationIdx]->mimeType, path_to_media($media->uuid, $mediarepresentation_uuid, $partIdx)).'</li>';
554
	}
555
	$out .= '</ul>';
556

    
557
	// representation(-part) specific metadata
558
	$thumbnailMaxExtend = 100;
559
	$out .= '<table>';
560
	//$out .= '<tr><th colspan="3">'.t('MimeType').': '.$media->representations[$representationIdx]->mimeType.'</th></tr>';
561
	$i = 0;
562
	foreach($media->representations[$representationIdx]->parts as $part){
563
		$out .= '<tr><th>'.t('Part').' '.($i + 1).'</th><td>';
564
		switch($part->class){
565
			case 'ImageFile': $out .= $part->width.' x '.$part->height.' - '.$part->size.'k'; break;
566
			case 'AudioFile':
567
			case 'MovieFile': $out .= t('Duration').': '.$part->duration.'s - '.$part->size.'k'; break;
568
			default: $out .= $part->size.'k';
569
		}
570
		$out .= '</td><td><a href="'.url(path_to_media($media->uuid, $mediarepresentation_uuid, $i)).'">'.theme('cdm_media_gallerie_image', $part, $thumbnailMaxExtend, true);'</a></td><tr>';
571
		$i++;
572
	}
573
	$out .= '</table>';
574
	$out .= '</div>';
575

    
576
	return $out;
577
}
578

    
579
/**
580
 * Allows theming of the taxon page tabs
581
 *
582
 * @param $tabname
583
 * @return unknown_type
584
 */
585
function theme_cdm_taxonpage_tab($tabname){
586
	//TODO replace by using translations or theme the menue tabs itself instead?
587
	switch($tabname){
588
		default: return t($tabname);
589
	}
590
}
591

    
Add picture from clipboard (Maximum size: 40 MB)