1
|
<?php
|
2
|
/**
|
3
|
* @file
|
4
|
* Functions for dealing with CDM entities from the package model.common
|
5
|
*
|
6
|
* @copyright
|
7
|
* (C) 2007-2012 EDIT
|
8
|
* European Distributed Institute of Taxonomy
|
9
|
* http://www.e-taxonomy.eu
|
10
|
*
|
11
|
* The contents of this module are subject to the Mozilla
|
12
|
* Public License Version 1.1.
|
13
|
* @see http://www.mozilla.org/MPL/MPL-1.1.html
|
14
|
*
|
15
|
* @author
|
16
|
* - Andreas Kohlbecker <a.kohlbecker@BGBM.org>
|
17
|
*/
|
18
|
|
19
|
/**
|
20
|
* @defgroup compose Compose functions
|
21
|
* @{
|
22
|
* Functions which are composing Drupal render arays
|
23
|
*
|
24
|
* The cdm_dataporal module needs to compose rather complex render arrays from
|
25
|
* the data returned by the CDM REST service. The compose functions are responsible
|
26
|
* for creating the render arrays.
|
27
|
*
|
28
|
* All these functions are also implementations of the compose_hook() which is used
|
29
|
* in the proxy_content() function.
|
30
|
* @}
|
31
|
*/
|
32
|
|
33
|
/**
|
34
|
* Compose an render array from a CDM Marker object.
|
35
|
*
|
36
|
* compose_hook() implementation
|
37
|
*
|
38
|
* @param object $marker
|
39
|
* CDM instance of type Marker
|
40
|
* @return array
|
41
|
* A drupal render array
|
42
|
*
|
43
|
* @ingroup compose
|
44
|
*/
|
45
|
function compose_cdm_marker($marker) {
|
46
|
|
47
|
$render_array = array(
|
48
|
// ---- generic
|
49
|
// these entries should be common to all cdm enitiy render arrays
|
50
|
'#theme' => 'cdm_marker', // TODO add alternative theme funcitons: 'cdm_marker_' . marker.type.label
|
51
|
'#attributes' => array('class' => html_class_attribute_ref($marker)),
|
52
|
|
53
|
// ---- individual
|
54
|
'#label' => $marker->markerType->representation_L10n . ': ' . (($marker->flag !== TRUE ? t('yes') : t('no'))),
|
55
|
);
|
56
|
|
57
|
return $render_array;
|
58
|
}
|
59
|
|
60
|
/**
|
61
|
* Checks if the given $cdm_entitiy has a marker the type references by the
|
62
|
* $marker_type_uuid and returns TRUE if a matching marker has been found.
|
63
|
*
|
64
|
* @param CdmEntity $cdm_entitiy
|
65
|
* @param string $marker_type_uuid
|
66
|
*/
|
67
|
function cdm_entity_has_marker($cdm_entitiy, $marker_type_uuid) {
|
68
|
if(isset($cdm_entitiy->markers[0]) && !is_uuid($marker_type_uuid)){
|
69
|
foreach ($cdm_entitiy->markers as $marker) {
|
70
|
if(isset($marker->markerType) && $marker->markerType->uuid == $marker_type_uuid){
|
71
|
return TRUE;
|
72
|
}
|
73
|
}
|
74
|
}
|
75
|
return FALSE;
|
76
|
}
|
77
|
|
78
|
/**
|
79
|
* Sorts an array of CDM IdentifiableSource instances by 1. by the
|
80
|
* author teams familiy names and 2. by the publication date.
|
81
|
*
|
82
|
* @param unknown $sources
|
83
|
* The array of CDM IdentifiableSource instances
|
84
|
* @param bool $do_theme if set TRUE the sources will be themed by theme_cdm_OriginalSource
|
85
|
* @return multitype:
|
86
|
*/
|
87
|
function oder_sources($sources, $do_theme = false){
|
88
|
$sort_array = array();
|
89
|
foreach ($sources as $source) {
|
90
|
|
91
|
$order_key = '';
|
92
|
|
93
|
// find the familynames
|
94
|
if(isset($source->citation->uuid) && !isset($source->citation->authorTeam)){
|
95
|
$authorteam = cdm_ws_get(CDM_WS_REFERENCE_AUTHORTEAM, $source->citation->uuid);
|
96
|
|
97
|
$persons = array();
|
98
|
if($authorteam->class == 'Team'){
|
99
|
if(isset($authorteam->teamMembers)){
|
100
|
$persons = $authorteam->teamMembers;
|
101
|
}
|
102
|
} else {
|
103
|
$persons[] = $authorteam;
|
104
|
}
|
105
|
|
106
|
foreach($persons as $person){
|
107
|
if(!empty($person->lastname)){
|
108
|
$order_key .= $person->lastname;
|
109
|
} else {
|
110
|
$order_key .= $person->titleCache;
|
111
|
}
|
112
|
}
|
113
|
if(empty($order_key)){
|
114
|
$order_key = $authorteam->titleCache;
|
115
|
}
|
116
|
|
117
|
}
|
118
|
$order_key = str_pad($order_key, 50);
|
119
|
|
120
|
// add publication date to the key
|
121
|
if(isset($source->citation->datePublished)){
|
122
|
$order_key .= '_' . timePeriodAsOrderKey($source->citation->datePublished);
|
123
|
} else {
|
124
|
$order_key .= '_' . "0000";
|
125
|
}
|
126
|
|
127
|
// padd key until unique
|
128
|
while(array_key_exists($order_key, $sort_array)){
|
129
|
$order_key .= "_";
|
130
|
}
|
131
|
|
132
|
|
133
|
if($do_theme) {
|
134
|
$sort_array[$order_key] = theme('cdm_OriginalSource', array('source' => $source));
|
135
|
} else {
|
136
|
$sort_array[$order_key] = $source;
|
137
|
}
|
138
|
}
|
139
|
ksort($sort_array);
|
140
|
return array_values ($sort_array);
|
141
|
}
|