Project

General

Profile

Download (19.2 KB) Statistics
| Branch: | Tag: | Revision:
1 6657531f Andreas Kohlbecker
<?php
2
/**
3
 * @file
4
 * Bibliography Theming functions.
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
16
/**
17
 * Returns html for a bibliography.
18
 *
19
 * Used in the Palmae portal.
20
 *
21
 * @param array $variables
22
 *   An associative array containing:
23
 *   - descriptionElementsBibliography: the elements to theme for bibliography.
24
 *
25
 * @ingroup themeable
26
 */
27
function theme_cdm_descriptionElementBibliography($variables) {
28
  $descriptionElementsBibliography = $variables['descriptionElementsBibliography'];
29
30
  $listOfReferences = array ();
31
  // $useDescriptions = cdm_ws_get()
32
  $markerTypes['markerTypes'] = UUID_MARKERTYPE_USE;
33
  $useDescriptions = cdm_ws_get(CDM_WS_PORTAL_TAXON_DESCRIPTIONS, substr(strrchr($_GET["q"], '/'), 1), queryString($markerTypes));
34
  // = substr(strrchr($_GET["q"], '/'), 1);
35
  // $descout = print_r($useDescriptions);
36
  foreach ($descriptionElementsBibliography as $descriptionElementsBiblio) {
37
    foreach ($descriptionElementsBiblio as $descriptionElementBiblio) {
38
      if (isset($descriptionElementBiblio->sources) && is_array($descriptionElementBiblio->sources)) {
39
        foreach ($descriptionElementBiblio->sources as $source) {
40
          $isAlreadySelected = FALSE;
41
          if (empty($listOfReferences)) {
42
            $listOfReferences[] = $source;
43
          }
44
          else {
45
            foreach ($listOfReferences as $selectedReference) {
46
              if (isset($selectedReference->citation->uuid) && isset($source->citation->uuid) && $selectedReference->citation->uuid == $source->citation->uuid) {
47
                $isAlreadySelected = TRUE;
48
              }
49
            }
50
            // Add the source in the list of reference/ This is to remove
51
            // duplicates from the Bibliography section.
52
            if (!$isAlreadySelected) {
53
              $listOfReferences[] = $source;
54
            }
55
          }
56
        }
57
      }
58
    }
59
  }
60
61
  if (!empty($useDescriptions) && is_array($useDescriptions)) {
62
    foreach ($useDescriptions as $useDescription) {
63
      if (is_array($useDescription->sources)) {
64
        foreach ($useDescription->sources as $source) {
65
          $isAlreadySelected = FALSE;
66
          if (empty($listOfReferences)) {
67
            $listOfReferences[] = $source;
68
          }
69
          else {
70
            foreach ($listOfReferences as $selectedReference) {
71
              if ($selectedReference->citation->uuid == $source->citation->uuid) {
72
                $isAlreadySelected = TRUE;
73
              }
74
            }
75
            if (!$isAlreadySelected) {
76
              $listOfReferences[] = $source;
77
            }
78
          }
79
        }
80
      }
81
    }
82
  }
83
84
  // Call the reference formatting function, it will do the heavy lifting.
85
  $out = formatReference_for_Bibliography($listOfReferences);
86
  return $out;
87
}
88
89
/**
90
 * Formats a reference.
91
 * Comment @WA @todo use ' instead of " where possible.
92
 *
93
 * Used by theme_cdm_descriptionElementBibliography.
94
 */
95
function formatReference_for_Bibliography($references) {
96
  $out = '<div id="block-cdm_dataportal-feature-discussion"><a name="bibliography"> </a><H2>Bibliography</H2><div class="content"> <ul class="description">';
97
  $outTemp = array ();
98
  foreach ($references as $reference) {
99
    $referenceString = '';
100
    $reference_type = isset($reference->citation->type) ? $reference->citation->type : '';
101
    switch ($reference_type) {
102
      case "Journal":
103
        $referenceString .= "<li class=\"descriptionText DescriptionElement\">";
104
        $numberOfTeamMembers = count($reference->citation->authorTeam->teamMembers);
105
        $currentRecord = 1;
106
        if (!empty($reference->citation->authorTeam->teamMembers)) {
107
          foreach ($reference->citation->authorTeam->teamMembers as $teamMember) {
108
            if (!empty($teamMember->lastname) && !empty($teamMember->firstname)) {
109
              if ($currentRecord == 1) {
110
                $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname;
111
              }
112
              elseif ($numberOfTeamMembers != $currentRecord) {
113
                $referenceString .= " , " . $teamMember->lastname . ", " . $teamMember->firstname;
114
              }
115
              else {
116
                $referenceString .= " & " . $teamMember->lastname . ", " . $teamMember->firstname;
117
                $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? ' ' : ". ");
118
              }
119
              $currentRecord += 1;
120
            }
121
            else {
122
              if ($numberOfTeamMembers != $currentRecord) {
123
                $referenceString .= $teamMember->titleCache . " & ";
124
              }
125
              else {
126
                $referenceString .= $teamMember->titleCache;
127
                $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? ' ' : ". ");
128
              }
129
              $currentRecord += 1;
130
            }
131
          }
132
        }
133 ce374c81 Andreas Kohlbecker
        else {
134 6657531f Andreas Kohlbecker
          $referenceString .= $reference->citation->authorTeam->titleCache;
135
          $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? " " : ". ");
136
        }
137
        /*
138
        else {
139
          $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname . " ";
140
        }
141
        */
142
        if (!empty($reference->citation->datePublished->start)) {
143
          $referenceString .= substr($reference->citation->datePublished->start, 0, 4);
144
          $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
145
        }
146 ce374c81 Andreas Kohlbecker
        $referenceString .= $reference->citation->title . ". " . $reference->citation->publisher;
147
        $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
148 6657531f Andreas Kohlbecker
        $referenceString .= "</li>";
149
        break;
150
151
      case "Article":
152
        $referenceString .= "<li class=\"descriptionText DescriptionElement\">";
153
        $numberOfTeamMembers = 0;
154
        if(!empty($reference->citation->authorTeam->teamMembers)) {
155
          $numberOfTeamMembers = count($reference->citation->authorTeam->teamMembers);
156
        }
157
        $currentRecord = 1;
158
        if (!empty($reference->citation->authorTeam->teamMembers)) {
159
          foreach ($reference->citation->authorTeam->teamMembers as $teamMember) {
160
            if (!empty($teamMember->lastname) && !empty($teamMember->firstname)) {
161
              if ($currentRecord == 1) {
162 ce374c81 Andreas Kohlbecker
                $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname;
163 6657531f Andreas Kohlbecker
              }
164
              elseif ($numberOfTeamMembers != $currentRecord) {
165 ce374c81 Andreas Kohlbecker
                $referenceString .= " , " . $teamMember->lastname . ", " . $teamMember->firstname;
166 6657531f Andreas Kohlbecker
              }
167
              else {
168 ce374c81 Andreas Kohlbecker
                $referenceString .= " & " . $teamMember->lastname . ", " . $teamMember->firstname;
169
                $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? ' ' : ". ");
170 6657531f Andreas Kohlbecker
              }
171
              $currentRecord += 1;
172
            }
173
            else {
174
              if ($numberOfTeamMembers != $currentRecord) {
175 ce374c81 Andreas Kohlbecker
                $referenceString .= $teamMember->titleCache . " & ";
176 6657531f Andreas Kohlbecker
              }
177
              else {
178 ce374c81 Andreas Kohlbecker
                $referenceString .= $teamMember->titleCache;
179
                $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? ' ' : ". ");
180 6657531f Andreas Kohlbecker
              }
181
              $currentRecord += 1;
182
            }
183
          }
184
        }
185
        else {
186 ce374c81 Andreas Kohlbecker
          $referenceString .= $reference->citation->authorTeam->titleCache;
187
          $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? " " : ". ");
188 6657531f Andreas Kohlbecker
        }
189
        /*
190
        else {
191 ce374c81 Andreas Kohlbecker
          $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname . " ";
192 6657531f Andreas Kohlbecker
        }
193
        */
194
        if (!empty($reference->citation->datePublished->start)) {
195 ce374c81 Andreas Kohlbecker
          $referenceString .= substr($reference->citation->datePublished->start, 0, 4);
196
          $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
197 6657531f Andreas Kohlbecker
        }
198
        if (!empty($reference->citation->title)) {
199 ce374c81 Andreas Kohlbecker
          $referenceString .= $reference->citation->title . ". ";
200 6657531f Andreas Kohlbecker
        }
201
        if (!empty($reference->citation->publisher)) {
202 ce374c81 Andreas Kohlbecker
          $referenceString .= $reference->citation->publisher;
203 6657531f Andreas Kohlbecker
        }
204 ce374c81 Andreas Kohlbecker
        $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
205 6657531f Andreas Kohlbecker
        $referenceString .= "</li>";
206
        break;
207
208
      case "Book":
209
        $referenceString .= "<li class=\"descriptionText DescriptionElement\">";
210
        if (!empty($reference->citation->authorTeam->teamMembers)) {
211 ce374c81 Andreas Kohlbecker
          $numberOfTeamMembers = count($reference->citation->authorTeam->teamMembers);
212
        }
213 6657531f Andreas Kohlbecker
        $currentRecord = 1;
214
        $isCitationTitleCache = FALSE;
215
        if (!empty($reference->citation->authorTeam->teamMembers) && $reference->citation->authorTeam->titleCache != "-empty team-") {
216
          foreach ($reference->citation->authorTeam->teamMembers as $teamMember) {
217 ce374c81 Andreas Kohlbecker
            if (!empty($teamMember->lastname) && !empty($teamMember->firstname)) {
218 6657531f Andreas Kohlbecker
              if ($numberOfTeamMembers != $currentRecord) {
219 ce374c81 Andreas Kohlbecker
                $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname . " & ";
220 6657531f Andreas Kohlbecker
              }
221
              else {
222 ce374c81 Andreas Kohlbecker
                $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname;
223
                $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
224 6657531f Andreas Kohlbecker
              }
225
              $currentRecord += 1;
226
            }
227
            else {
228
              if ($numberOfTeamMembers != $currentRecord) {
229 ce374c81 Andreas Kohlbecker
                $referenceString .= $teamMember->titleCache . " & ";
230 6657531f Andreas Kohlbecker
              }
231
              else {
232 ce374c81 Andreas Kohlbecker
                $referenceString .= $teamMember->titleCache;
233
                $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
234 6657531f Andreas Kohlbecker
              }
235
              $currentRecord += 1;
236
            }
237
          }
238
        }
239 ce374c81 Andreas Kohlbecker
        elseif ($reference->citation->authorTeam->titleCache != "-empty team-") {
240
          $referenceString .= $reference->citation->authorTeam->titleCache;
241
          $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
242 6657531f Andreas Kohlbecker
        }
243
        else {
244 ce374c81 Andreas Kohlbecker
          $isCitationTitleCache = TRUE;
245
          $referenceString .= $reference->citation->titleCache;
246 6657531f Andreas Kohlbecker
        }
247 ce374c81 Andreas Kohlbecker
        if (!empty($reference->citation->datePublished->start)) {
248
          $referenceString .= substr($reference->citation->datePublished->start, 0, 4);
249
          $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
250 6657531f Andreas Kohlbecker
        }
251 ce374c81 Andreas Kohlbecker
        if ($isCitationTitleCache == FALSE && !empty($reference->citation->title)) {
252
          $referenceString .= $reference->citation->title;
253
          $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
254 6657531f Andreas Kohlbecker
        }
255
        if (!empty($reference->citation->publisher)) {
256 ce374c81 Andreas Kohlbecker
          $referenceString .= $reference->citation->publisher;
257
          $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
258 6657531f Andreas Kohlbecker
        }
259 ce374c81 Andreas Kohlbecker
        $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
260 6657531f Andreas Kohlbecker
        $referenceString .= "</li>";
261
        break;
262 ce374c81 Andreas Kohlbecker
263 6657531f Andreas Kohlbecker
      case "BookSection":
264
        $referenceString .= "<li class=\"descriptionText DescriptionElement\">";
265 6bbf4d45 Andreas Kohlbecker
        if(isset($reference->citation->authorTeam)){
266
          $currentRecord = 1;
267
          if (!empty($reference->citation->authorTeam->teamMembers)) {
268 d52fe39b Andreas Kohlbecker
            $numberOfTeamMembers = count($reference->citation->authorTeam->teamMembers);
269 6bbf4d45 Andreas Kohlbecker
            foreach ($reference->citation->authorTeam->teamMembers as $teamMember) {
270
              if (!empty($teamMember->lastname) && !empty($teamMember->firstname)) {
271
                if ($numberOfTeamMembers != $currentRecord) {
272
                  $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname . " & ";
273
                }
274
                else {
275
                  $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname;
276
                  $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
277
                }
278
                $currentRecord += 1;
279 6657531f Andreas Kohlbecker
              }
280
              else {
281 6bbf4d45 Andreas Kohlbecker
                if ($numberOfTeamMembers != $currentRecord) {
282
                  $referenceString .= $teamMember->titleCache . " & ";
283
                }
284
                else {
285
                  $referenceString .= $teamMember->titleCache;
286
                  $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
287
                }
288
                $currentRecord += 1;
289 6657531f Andreas Kohlbecker
              }
290
            }
291
          }
292
        }
293 6bbf4d45 Andreas Kohlbecker
294
        if(isset($reference->citation->inReference)){
295
296
          $referenceString .= substr($reference->citation->inReference->datePublished->start, 0, 4) . ". " . $reference->citation->title . ". " . "Pages " . $reference->citation->pages . ". In ";
297
          if (isset($reference->citation->inReference->authorTeam)) {
298
            $numberOfTeamMembersInReference = count($reference->citation->inReference->authorTeam->teamMembers);
299
            $currentRecordinReference = 1;
300
            if (!empty($reference->citation->inReference->authorTeam->teamMembers)) {
301
              foreach ($reference->citation->inReference->authorTeam->teamMembers as $teamMember) {
302
                if (!empty($teamMember->lastname) && !empty($teamMember->firstname)) {
303
                  if ($numberOfTeamMembers != $currentRecord) {
304
                    $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname . " & ";
305
                  }
306
                  else {
307
                    $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname;
308
                    $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
309
                  }
310
                  $currentRecord += 1;
311
                }
312
                else {
313
                  if ($numberOfTeamMembers != $currentRecord) {
314
                    $referenceString .= $teamMember->titleCache . " & ";
315
                  }
316
                  else {
317
                    $referenceString .= $teamMember->titleCache;
318
                    $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
319
                  }
320
                  $currentRecord += 1;
321
                }
322 6657531f Andreas Kohlbecker
              }
323
            }
324
          }
325 6bbf4d45 Andreas Kohlbecker
          $referenceString .= $reference->citation->inReference->title . ". " . $reference->citation->inReference->publisher . ". " . $reference->citation->inReference->placePublished;
326 6657531f Andreas Kohlbecker
        }
327 ce374c81 Andreas Kohlbecker
        $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? "" : ". ");
328
        $referenceString .= "</li>";
329 6657531f Andreas Kohlbecker
        break;
330
331 ce374c81 Andreas Kohlbecker
      case "WebPage":
332 6657531f Andreas Kohlbecker
        $referenceString .= "<li class=\"descriptionText DescriptionElement\">" . $reference->citation->titleCache . "</li>";
333
        break;
334 ce374c81 Andreas Kohlbecker
335
      case "Generic":
336 6657531f Andreas Kohlbecker
        $referenceString .= "<li class=\"descriptionText DescriptionElement\">";
337
        $currentRecord = 1;
338
        if (!empty($reference->citation->authorTeam->teamMembers)) {
339 ce374c81 Andreas Kohlbecker
          $numberOfTeamMembers = count($reference->citation->authorTeam->teamMembers);
340 6657531f Andreas Kohlbecker
          foreach ($reference->citation->authorTeam->teamMembers as $teamMember) {
341 ce374c81 Andreas Kohlbecker
            if (!empty($teamMember->lastname) && !empty($teamMember->firstname)) {
342 6657531f Andreas Kohlbecker
              if ($currentRecord == 1) {
343 ce374c81 Andreas Kohlbecker
                $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname;
344 6657531f Andreas Kohlbecker
              }
345 ce374c81 Andreas Kohlbecker
              elseif ($numberOfTeamMembers != $currentRecord) {
346
                $referenceString .= " , " . $teamMember->lastname . ", " . $teamMember->firstname;
347 6657531f Andreas Kohlbecker
              }
348
              else {
349 ce374c81 Andreas Kohlbecker
                $referenceString .= " & " . $teamMember->lastname . ", " . $teamMember->firstname;
350
                $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? ' ' : ". ");
351 6657531f Andreas Kohlbecker
              }
352
              $currentRecord += 1;
353
            }
354
            else {
355
              if ($numberOfTeamMembers != $currentRecord) {
356 ce374c81 Andreas Kohlbecker
                $referenceString .= $teamMember->titleCache . " & ";
357 6657531f Andreas Kohlbecker
              }
358
              else {
359 ce374c81 Andreas Kohlbecker
                $referenceString .= $teamMember->titleCache;
360
                $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? ' ' : ". ");
361 6657531f Andreas Kohlbecker
              }
362
              $currentRecord += 1;
363
            }
364
          }
365
        }
366 ce374c81 Andreas Kohlbecker
        elseif (!empty($reference->citation->authorTeam->titleCache)) {
367
          $referenceString .= $reference->citation->authorTeam->titleCache;
368
          $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? " " : ". ");
369 6657531f Andreas Kohlbecker
        }
370
        else {
371 ce374c81 Andreas Kohlbecker
          $referenceString .= $reference->citation->titleCache;
372
          $referenceString .= ((str_endsWith($out, ".") || str_endsWith($out, ". ")) ? " " : ". ");
373 6657531f Andreas Kohlbecker
        }
374 ce374c81 Andreas Kohlbecker
        /*
375 6657531f Andreas Kohlbecker
        else {
376 ce374c81 Andreas Kohlbecker
          $referenceString .= $teamMember->lastname . ", " . $teamMember->firstname . " ";
377 6657531f Andreas Kohlbecker
        }
378 ce374c81 Andreas Kohlbecker
        */
379
        if (!empty($reference->citation->datePublished->start)) {
380
          $referenceString .= substr($reference->citation->datePublished->start, 0, 4);
381
          $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? " " : ". ");
382 6657531f Andreas Kohlbecker
        }
383 ce374c81 Andreas Kohlbecker
        $referenceString .= $reference->citation->title . ". " . (isset($reference->citation->publisher) ? $reference->citation->publisher : '');
384
        $referenceString .= ((str_endsWith($referenceString, ".") || str_endsWith($referenceString, ". ")) ? " " : ". ");
385
        $referenceString .= ((str_endsWith($referenceString, ".")) ? " " : "");
386 6657531f Andreas Kohlbecker
        $referenceString .= "</li>";
387
        break;
388
389 ce374c81 Andreas Kohlbecker
      default:
390
        /*
391 f0bf24e7 Andreas Kohlbecker
        $author_team = cdm_ws_get(CDM_WS_REFERENCE  _AUTHORTEAM, $reference->citation->uuid);
392 6657531f Andreas Kohlbecker
393 ce374c81 Andreas Kohlbecker
        if(!empty($author_team->titleCache)) {
394 6657531f Andreas Kohlbecker
          $referenceString.= print_r($reference->citation);
395
          $referenceString .= '<li class="descriptionText DescriptionElement">' . "<b>" . $reference->citation->title . ":" . "</b>" . $author_team->titleCache .   '</li>';
396
        }
397
        else {
398
          $referenceString .= '<li class="descriptionText DescriptionElement">' ."<b>" . $reference->citation->titleCache . "</b>" . '</li>';
399
        }
400
        if ($referenceCitation){
401
          $sourceRefs = $referenceCitation;
402 ce374c81 Andreas Kohlbecker
          // $referenceString .= "[titleccache] " . $descriptionElementBiblio->feature->titleCache . "[/titlecache]";
403
          // $referenceString .= "[Class] " . $descriptionElementBiblio->class . "[/class]";
404
          // $referenceString .= "[sourceref]" . $sourceRefs . "[/sourceRef]";
405
        }
406
        */
407 6657531f Andreas Kohlbecker
        break;
408
    }
409
    $outTemp[] = $referenceString;
410
  }
411
  sort($outTemp);
412 ce374c81 Andreas Kohlbecker
   foreach ($outTemp as $refString) {
413 6657531f Andreas Kohlbecker
    $out .= $refString;
414
  }
415
416
  $out .= "</ul></div></div>";
417
  return $out;
418 ce374c81 Andreas Kohlbecker
}