Project

General

Profile

« Previous | Next » 

Revision 991ae630

Added by Andreas Kohlbecker over 2 years ago

ref #8850 annotations for FieldUnits and nameTypeDesignations in registration and name page

View differences:

modules/cdm_dataportal/cdm_api/cdm_api.module
902 902
    // TODO we may want to implement a derivedUnitFacade/{uuid}/annotations service and use that instead
903 903
    $cdm_entity_type = $cdm_entity->fieldUnitEntityReference->type;
904 904
    $cdm_entity_uuid = $cdm_entity->fieldUnitEntityReference->uuid;
905
  } elseif ($cdm_entity_type == 'TypedEntityReference'){
906
    $cdm_entity_type = $cdm_entity->type;
907
    $cdm_entity_uuid = $cdm_entity->uuid;
905 908
  } else {
906 909
    if (isset($cdm_entity->uuid)) {
907 910
      $cdm_entity_uuid = $cdm_entity->uuid;
modules/cdm_dataportal/cdm_dataportal.module
2131 2131
      }
2132 2132
    }
2133 2133

  
2134
    $content['footnotes'] = markup_to_render_array(theme('cdm_footnotes', array('footnoteListKey' => RenderHints::getFootnoteListKey())));
2134
    $content['footnotes'] = markup_to_render_array(render_cdm_footnotes());
2135 2135

  
2136 2136
    $taxon_name_page->content = $content;
2137 2137
    RenderHints::popFromRenderStack();
modules/cdm_dataportal/includes/name.inc
626 626
  );
627 627

  
628 628
  // name
629
  $name_relations = null;
629 630
  if($registration_dto->nameRef){
630 631
    $name = cdm_ws_get(CDM_WS_PORTAL_NAME, $registration_dto->nameRef->uuid);
631 632
    cdm_load_tagged_full_title($name);
632 633
    $render_array['nomenclatural_act']['published_name'] = markup_to_render_array('<div class="published-name">' . render_taxon_or_name($name, url(path_to_name($name->uuid))) . '</div>', 0);
633 634
    $name_relations = cdm_ws_fetch_all(str_replace("$0", $registration_dto->nameRef->uuid, CDM_WS_PORTAL_NAME_NAME_RELATIONS));
634
    $render_array['nomenclatural_act']['name_relations'] = compose_name_relationships_list($name_relations, $registration_dto->nameRef->uuid, null);
635
    $render_array['nomenclatural_act']['name_relations']['#weight'] = 10;
635
    // need to create the name relationships later, so that the foot notes are in correct order, see section // name relations
636 636
  } else {
637 637
    // in this case the registration must have a
638 638
    $name = cdm_ws_get(CDM_WS_PORTAL_NAME, $registration_dto->typifiedNameRef->uuid);
639 639
    $render_array['typified_name'] = markup_to_render_array('<p class="typified-name">for ' . render_taxon_or_name($name, url(path_to_name($name->uuid))) . '</p>', 40);
640 640
  }
641

  
641 642
  // typedesignation in detail
642 643
  if(is_object($registration_dto->orderdTypeDesignationWorkingSets)) {
643 644
    $field_unit_uuids = array();
......
668 669
        drupal_set_message("Unimplemented type: " . $tokens[0], 'error');
669 670
      }
670 671
    }
671
    // type designations wich are in this nomenclatural act.
672
    // type designations which are in this nomenclatural act.
672 673
    if (count($name_type_designation_refs) > 0) {
673 674
      $render_array['nomenclatural_act']['name_type_designations'] = compose_name_type_designations($name_type_designation_refs);
674 675
      $render_array['nomenclatural_act']['name_type_designations']['#prefix'] = '<p class="name_type_designations">';
......
683 684
    }
684 685
  }
685 686

  
687
  // name relations
688
  if($name_relations){
689
    $render_array['nomenclatural_act']['name_relations'] = compose_name_relationships_list($name_relations, $registration_dto->nameRef->uuid, null);
690
    $render_array['nomenclatural_act']['name_relations']['#weight'] = 10;
691
  }
692

  
686 693
  // citation
687 694
  if ($with_citation) {
688 695
    $render_array['citation'] = markup_to_render_array(
......
694 701
      $render_array['nomenclatural_act']['#weight'] + 10 );
695 702
  }
696 703

  
697
  $render_array['footnotes'] = markup_to_render_array(
698
    theme('cdm_annotation_footnotes', ['footnoteListKey' => RenderHints::getFootnoteListKey() ]),
699
    12
704
  $render_array['nomenclatural_act']['footnotes'] = markup_to_render_array(render_cdm_footnotes(),
705
    100
700 706
  );
701 707

  
702 708
  // registration date and office
......
936 942
        }
937 943
        $out .= ': ' . render_taxon_or_name($name_type_designation->typeName, $link_to_name_page, $referenceUri, TRUE, TRUE);
938 944
      }
945
      $annotations_and_sources = handle_annotations_and_sources(
946
        $name_type_designation,
947
        typedesignations_annotations_and_sources_config(),
948
        '',
949
        RenderHints::getFootnoteListKey());
950
      $out .= $annotations_and_sources['foot_note_keys'];
939 951
    }
940 952
  } // END NameTypeDesignation
941 953

  
......
989 1001

  
990 1002
      }
991 1003

  
1004

  
992 1005
      $out .= '<'. $element_tag .' class="' . html_class_attribute_ref($specimen_type_designation) . '">';
993 1006
      $out .= type_designation_status_label_markup($specimen_type_designation) . $type_citation_markup;
994 1007

  
......
1003 1016
        if($link_to_specimen_page && isset($derivedUnitFacadeInstance->specimenLabel) && $derivedUnitFacadeInstance->specimenLabel){
1004 1017
          $specimen_markup = str_replace($derivedUnitFacadeInstance->specimenLabel, l($derivedUnitFacadeInstance->specimenLabel, path_to_specimen($specimen_type_designation->typeSpecimen->uuid)), $specimen_markup);
1005 1018
        }
1019
        $annotations_and_sources = handle_annotations_and_sources(
1020
          $derivedUnitFacadeInstance,
1021
          typedesignations_annotations_and_sources_config(),
1022
          '',
1023
          RenderHints::getFootnoteListKey()
1024
        );
1006 1025
        $out .= ': <span class="' . html_class_attribute_ref($specimen_type_designation->typeSpecimen) . '">'
1007 1026
          . $specimen_markup
1008 1027
          . '</span>'; // . ': ' . theme('cdm_specimen', array('specimenTypeDesignation' => $derivedUnitFacadeInstance));
1009 1028
        if(!empty($derivedUnitFacadeInstance->preferredStableUri)){
1010 1029
          $out .= ' ' . l($derivedUnitFacadeInstance->preferredStableUri, $derivedUnitFacadeInstance->preferredStableUri, array('absolute' => true));
1011 1030
        }
1031
        $out .= $annotations_and_sources['foot_note_keys'];
1012 1032
      }
1013 1033

  
1014 1034

  
......
1031 1051
          'bibliography_aware' => false
1032 1052
        ),
1033 1053
        '',
1034
        RenderHints::getFootnoteListKey() // passing a defined key to avoid separate annotation footnote key see https://dev.e-taxonomy.eu/redmine/issues/8543
1054
        RenderHints::getFootnoteListKey() // passing a defined key to avoid a separate annotation footnote key see https://dev.e-taxonomy.eu/redmine/issues/8543
1035 1055
      );
1036 1056
      $encasement =  $textual_type_designation->verbatim ? '"' : '';
1037 1057
      $out .= '<' . $element_tag . ' class="' . html_class_attribute_ref($textual_type_designation) . '">' . type_designation_status_label_markup(null)
......
1043 1063
    }
1044 1064
  }
1045 1065

  
1046
  // Footnotes for citations, collection acronym?s.
1066
  // Footnotes for citations, collection acronyms.
1047 1067
  // footnotes should be rendered in the parent element so we
1048 1068
  // are relying on the FootnoteListKey set there
1049 1069
  $_fkey = FootnoteManager::addNewFootnote(
......
1094 1114
/**
1095 1115
 * Composes the TypedEntityReference to name type designations passed as associatve array.
1096 1116
 *
1097
 * @param $type_entity_refs array
1117
 * @param $type_entity_refs_by_status array
1098 1118
 *   an associative array of name type type => TypedEntityReference for name type designations as
1099 1119
 *   produced by the eu.etaxonomy.cdm.api.service.name.TypeDesignationSetManager
1100 1120
 *
1101 1121
 * @ingroup compose
1102 1122
 */
1103
function compose_name_type_designations($type_entity_refs){
1123
function compose_name_type_designations($type_entity_refs_by_status){
1104 1124
  $render_array = array();
1105 1125
  $preferredStableUri = '';
1106
  foreach($type_entity_refs as $type_status => $name_types){
1107
    foreach ($name_types as $name_type){
1108
      $type_designation = cdm_ws_get(CDM_WS_TYPEDESIGNATION, array($name_type->uuid, 'preferredUri'));
1126
  foreach($type_entity_refs_by_status as $type_status => $name_type_entityRefs){
1127
    foreach ($name_type_entityRefs as $name_type_entity_ref){
1128
      $type_designation = cdm_ws_get(CDM_WS_TYPEDESIGNATION, array($name_type_entity_ref->uuid, 'preferredUri'));
1129
      $footnote_keys = '';
1130

  
1109 1131
      if(isset($type_designation->typeSpecimen->preferredStableUri) && $type_designation->typeSpecimen->preferredStableUri){
1110 1132
        $preferredStableUri = $type_designation->typeSpecimen->preferredStableUri;
1111 1133
      }
1112
      $render_array[] = markup_to_render_array('<div class="name_type_designation ' . html_class_attribute_ref($name_type)  . '"><span class="type-status">'. ucfirst($type_status) . "</span>: "
1113
        . $name_type->label
1134
      // annotations and sources for the $derived_unit_facade_dto
1135
      $annotations_and_sources = handle_annotations_and_sources(
1136
        $name_type_entity_ref,
1137
        typedesignations_annotations_and_sources_config(),
1138
        '',
1139
        RenderHints::getFootnoteListKey()
1140
      );
1141

  
1142
      $render_array[] = markup_to_render_array('<div class="name_type_designation ' . html_class_attribute_ref($name_type_entity_ref)  . '"><span class="type-status">'. ucfirst($type_status) . "</span>: "
1143
        . $name_type_entity_ref->label
1114 1144
        . ($preferredStableUri ? " ". l($preferredStableUri,  $preferredStableUri) : '')
1145
        . $annotations_and_sources['foot_note_keys']
1115 1146
        . '</div>');
1116 1147
      }
1117 1148
  }
......
1138 1169

  
1139 1170
  $render_array = array();
1140 1171

  
1141
  static $annotations_and_sources_config = [
1142
    'sources_as_content' => TRUE,
1143
    'link_to_name_used_in_source' => FALSE,
1144
    'link_to_reference' => TRUE,
1145
    'add_footnote_keys' => FALSE,
1146
    'bibliography_aware' => FALSE
1147
  ];
1148

  
1149 1172
  $type_designation_list = array();
1150 1173
  uksort($type_entity_refs, "compare_type_designation_status_labels");
1151 1174
  foreach($type_entity_refs as $type_status => $type_designation_entity_refs){
......
1166 1189
      // annotations and sources for the $derived_unit_facade_dto
1167 1190
      $annotations_and_sources = handle_annotations_and_sources(
1168 1191
        $derived_unit_facade_dto,
1169
        $annotations_and_sources_config,
1192
        typedesignations_annotations_and_sources_config(),
1170 1193
        '',
1171
        null
1194
        RenderHints::getFootnoteListKey()
1172 1195
      );
1173 1196
      $source_citations = $annotations_and_sources['source_references'];
1174 1197
      $foot_note_keys = $annotations_and_sources['foot_note_keys'];
......
1240 1263
  return $render_array;
1241 1264
}
1242 1265

  
1266
/**
1267
 * Provides the default configuration for typedesignations which
1268
 * are passed to the handle_annotations_and_sources()
1269
 * function:
1270
 * - 'sources_as_content' => TRUE,
1271
 * - 'link_to_name_used_in_source' => FALSE,
1272
 * - 'link_to_reference' => TRUE,
1273
 * - 'add_footnote_keys' => FALSE,
1274
 * - 'bibliography_aware' => FALSE
1275
 *
1276
 * @return array
1277
 */
1278
function typedesignations_annotations_and_sources_config() {
1279
  static $annotations_and_sources_config = [
1280
    'sources_as_content' => TRUE,
1281
    'link_to_name_used_in_source' => FALSE,
1282
    'link_to_reference' => TRUE,
1283
    'add_footnote_keys' => FALSE,
1284
    'bibliography_aware' => FALSE
1285
  ];
1286
  return $annotations_and_sources_config;
1287
}
1288

  
1243 1289
/**
1244 1290
 * @param $name_rel
1245 1291
 * @param $current_name_uuid
......
1393 1439
  $render_array = compose_name_relationships($name_relations, $name_rel_type_filter, $current_name_uuid, $current_taxon_uuid, $list_prefix, $list_suffix, $item_prefix, $item_suffix);
1394 1440

  
1395 1441
  RenderHints::popFromRenderStack();
1396
  $render_array['footnotes'] = markup_to_render_array(theme('cdm_footnotes', array('footnoteListKey' => RenderHints::getFootnoteListKey())));
1397 1442
  if(RenderHints::getFootnoteListKey() == $key) {
1443
    $render_array['footnotes'] = markup_to_render_array(theme('cdm_footnotes', array('footnoteListKey' => RenderHints::getFootnoteListKey())));
1398 1444
    RenderHints::clearFootnoteListKey();
1399 1445
  }
1400 1446
  return $render_array;
modules/cdm_dataportal/theme/cdm_dataportal.common.theme
303 303
  return $out;
304 304
}
305 305

  
306
/**
307
 * Renders the footnotes for annotations and sources, etc.
308
 *
309
 * @param string $footnote_list_key
310
 *    RenderHints::getFootnoteListKey() will be used if this parameter is undefined.
311
 * @param string $enclosingTag
312
 *    Default tag is 'span'
313
 *
314
 * @return string
315
 *    The markup string
316
 *
317
 */
318
function render_cdm_footnotes(string $footnote_list_key = NULL, string $enclosingTag = 'span'){
319

  
320
  if (variable_get('cdm_dataportal_all_footnotes', CDM_DATAPORTAL_ALL_FOOTNOTES)) {
321
    return '';
322
  }
323
  if(!$footnote_list_key){
324
    $footnote_list_key = RenderHints::getFootnoteListKey();
325
  }
326

  
327
  $out = '<' . $enclosingTag . ' class="footnotes footnotes-' . $footnote_list_key . ' ">'
328
    . FootnoteManager::renderFootnoteList($footnote_list_key . '-annotations') . ' ' . FootnoteManager::renderFootnoteList($footnote_list_key)
329
    . '</' . $enclosingTag . '>';
330
  FootnoteManager::removeFootnoteList($footnote_list_key . '-annotations');
331
  FootnoteManager::removeFootnoteList($footnote_list_key);
332
  return $out;
333
}
334

  
306 335
/**
307 336
 * @todo Please document this function.
308 337
 * @see http://drupal.org/node/1354

Also available in: Unified diff