1
|
<?php
|
2
|
/**
|
3
|
* @file
|
4
|
* Provides external links for sources to taxa information.
|
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
|
* - Wouter Addink <w.addink@eti.uva.nl> (migration from Drupal 5 to Drupal7)
|
18
|
*/
|
19
|
|
20
|
/**
|
21
|
* Display help and module information.
|
22
|
*
|
23
|
* @param string $path
|
24
|
* For which path of the site we're displaying help.
|
25
|
* @param array $arg
|
26
|
* Array that holds the current path as would be returned from arg() function.
|
27
|
*
|
28
|
* @return string
|
29
|
* Help text for the path.
|
30
|
*/
|
31
|
function ext_links_help($path, $arg) {
|
32
|
switch ($path) {
|
33
|
case 'admin/help#ext_links':
|
34
|
$output = '<p>' . t("Link to external sources like ## for taxa.") . '</p>';
|
35
|
return $output;
|
36
|
case 'admin/config/cdm_dataportal/ext_links':
|
37
|
$output = '<p>' . t('The external links module allows to configure URL templates for links to external data sources.');
|
38
|
return $output;
|
39
|
case 'admin/config/cdm_dataportal/ext_links/%':
|
40
|
$output = '<p>' . t('An external link template.');
|
41
|
return $output;
|
42
|
}
|
43
|
}
|
44
|
|
45
|
/**
|
46
|
* Implements hook_menu().
|
47
|
*/
|
48
|
function ext_links_menu() {
|
49
|
$items = [];
|
50
|
|
51
|
$items['admin/config/cdm_dataportal/ext_links'] = [
|
52
|
'title' => 'External links',
|
53
|
'description' => 'Configure external links templates.',
|
54
|
'page callback' => 'drupal_get_form',
|
55
|
'page arguments' => ['ext_links_admin_overview'],
|
56
|
'access arguments' => ['access administration pages'],
|
57
|
'file' => 'ext_links.admin.inc'
|
58
|
];
|
59
|
$items['admin/config/cdm_dataportal/ext_links/list'] = [
|
60
|
'title' => 'List',
|
61
|
'type' => MENU_DEFAULT_LOCAL_TASK,
|
62
|
];
|
63
|
$items['admin/config/cdm_dataportal/ext_links/add'] = [
|
64
|
'title' => 'Add external link',
|
65
|
'page callback' => 'ext_links_admin_link_template_page',
|
66
|
'access arguments' => ['access administration pages'],
|
67
|
'type' => MENU_LOCAL_ACTION,
|
68
|
'weight' => 1,
|
69
|
'file' => 'ext_links.admin.inc',
|
70
|
];
|
71
|
$items['admin/config/cdm_dataportal/ext_links/appearance'] = [
|
72
|
'title' => 'Appearance',
|
73
|
'page callback' => 'drupal_get_form',
|
74
|
'page arguments' => ['ext_links_admin_appearance_page'],
|
75
|
'access arguments' => ['access administration pages'],
|
76
|
'type' => MENU_LOCAL_TASK,
|
77
|
'weight' => 2,
|
78
|
'file' => 'ext_links.admin.inc',
|
79
|
];
|
80
|
$items['admin/config/cdm_dataportal/ext_links/%ext_links'] = [ // %ext_links refers to ext_links_load
|
81
|
'title' => 'Edit external link',
|
82
|
'page callback' => 'ext_links_admin_link_template_page',
|
83
|
'page arguments' => [4],
|
84
|
'access arguments' => ['access administration pages'],
|
85
|
'file' => 'ext_links.admin.inc',
|
86
|
];
|
87
|
$items['admin/config/cdm_dataportal/ext_links/%ext_links/status/%'] = [
|
88
|
'title' => 'Enable or disable external link',
|
89
|
'page callback' => 'ext_links_admin_link_template_set_status',
|
90
|
'page arguments' => [4, 6],
|
91
|
'access arguments' => ['access administration pages'],
|
92
|
// 'type' => MENU_CALLBACK,
|
93
|
'file' => 'ext_links.admin.inc',
|
94
|
];
|
95
|
return $items;
|
96
|
}
|
97
|
|
98
|
/**
|
99
|
* Retrieves a list of External Link templates, ordered by weight.
|
100
|
*
|
101
|
* Empty 'ext_links' tables will be initialized with the default templates.
|
102
|
*
|
103
|
* @see ext_links_template_defaults()
|
104
|
*
|
105
|
* @param $enabled_only boolean
|
106
|
* When TRUE external link templates with status != null are excluded from the list.
|
107
|
* @return array
|
108
|
* An array of external link template objects, keyed by the format ID and ordered by
|
109
|
* weight.
|
110
|
*
|
111
|
*/
|
112
|
function ext_links_templates($enabled_only = FALSE) {
|
113
|
global $language;
|
114
|
$link_templates = &drupal_static(__FUNCTION__, array());
|
115
|
|
116
|
// cache_clear_all("ext_links_templates:{$language->language}");
|
117
|
// All available link_templates are cached for performance.
|
118
|
if (!is_array($link_templates) || !count($link_templates)) {
|
119
|
if ($cache = cache_get("ext_links:{$language->language}")) {
|
120
|
$link_templates = $cache->data;
|
121
|
}
|
122
|
else {
|
123
|
$test = false;
|
124
|
if($test){
|
125
|
$link_templates = [];
|
126
|
$link_templates_arrays = ext_links_template_defaults();
|
127
|
foreach($link_templates_arrays as $a){
|
128
|
$link_templates[] = (object)$a;
|
129
|
}
|
130
|
} else {
|
131
|
$query = db_select('ext_links', 'elt')
|
132
|
->addTag('translatable')
|
133
|
->fields('elt');
|
134
|
if($enabled_only){
|
135
|
$query = $query->condition('status', '1');
|
136
|
}
|
137
|
$link_templates =
|
138
|
$query->orderBy('category')
|
139
|
->orderBy('weight')
|
140
|
->execute()
|
141
|
->fetchAllAssoc('id');
|
142
|
}
|
143
|
if(!count($link_templates)) {
|
144
|
$link_templates_arrays = ext_links_template_defaults();
|
145
|
$query = db_insert('ext_links')
|
146
|
->fields(array_keys(array_values($link_templates_arrays)[0]));
|
147
|
foreach($link_templates_arrays as $a){
|
148
|
$query->values($a);
|
149
|
}
|
150
|
try {
|
151
|
$query->execute();
|
152
|
} catch (Exception $e) {
|
153
|
drupal_set_message("Error while initializing ext_links database: " . $e->getMessage(), "error");
|
154
|
}
|
155
|
$link_templates = [];
|
156
|
foreach($link_templates_arrays as $a){
|
157
|
$link_templates[] = (object)$a;
|
158
|
}
|
159
|
}
|
160
|
// cache_set("ext_links:{$language->language}", $link_templates);
|
161
|
}
|
162
|
}
|
163
|
return $link_templates;
|
164
|
}
|
165
|
|
166
|
/**
|
167
|
* Resets the text format caches.
|
168
|
*
|
169
|
* @see filter_formats()
|
170
|
*/
|
171
|
function ext_links_templates_reset() {
|
172
|
cache_clear_all('ext_links', 'cache', TRUE);
|
173
|
drupal_static_reset('ext_links');
|
174
|
}
|
175
|
|
176
|
/**
|
177
|
* Loads a text format object from the database.
|
178
|
*
|
179
|
* @param $extlink_id
|
180
|
* The external link ID. ($link->id)
|
181
|
*
|
182
|
* @return
|
183
|
* A fully-populated text format object, if the requested format exists and
|
184
|
* is enabled. If the format does not exist, or exists in the database but
|
185
|
* has been marked as disabled, FALSE is returned.
|
186
|
*
|
187
|
* @see ext_links_exists()
|
188
|
*/
|
189
|
function ext_links_load($extlink_id) {
|
190
|
$test = false;
|
191
|
if($test) {
|
192
|
$defaults = ext_links_template_defaults();
|
193
|
return isset($defaults[$extlink_id]) ? (object)$defaults[$extlink_id] : FALSE;
|
194
|
}
|
195
|
else {
|
196
|
$link_templates = ext_links_templates();
|
197
|
return isset($link_templates[$extlink_id]) ? $link_templates[$extlink_id] : FALSE;
|
198
|
}
|
199
|
}
|
200
|
|
201
|
/**
|
202
|
* Saves a text format object to the database.
|
203
|
*
|
204
|
* @param $link_template
|
205
|
* A link template object having the properties:
|
206
|
* - id: The machine name of the external link. If this corresponds
|
207
|
* to an existing external link, this one will be updated;
|
208
|
* otherwise, a new external link will be created.
|
209
|
* - title: The link title
|
210
|
* - link: The link url template.
|
211
|
* - glue: The string to concatenate name parts in the URL query string.
|
212
|
* - status: (optional) An integer indicating whether the ext link is
|
213
|
* enabled (1) or not (0). Defaults to 1.
|
214
|
* - weight: (optional) The weight of the external link, which controls its
|
215
|
* placement in external link block. If omitted, the weight is set to 0.
|
216
|
* Defaults to NULL.
|
217
|
*
|
218
|
* @return
|
219
|
* SAVED_NEW or SAVED_UPDATED.
|
220
|
*/
|
221
|
function ext_links_save($link_template) {
|
222
|
|
223
|
$link_template->title = trim($link_template->title);
|
224
|
$link_template->cache = true;
|
225
|
if (!isset($link_template->status)) {
|
226
|
$link_template->status = 1;
|
227
|
}
|
228
|
if (!isset($link_template->weight)) {
|
229
|
$link_template->weight = 0;
|
230
|
}
|
231
|
|
232
|
// Insert or update the text format.
|
233
|
$return = db_merge('ext_links')
|
234
|
->key(array('id' => $link_template->id))
|
235
|
->fields(array(
|
236
|
'id' => $link_template->id,
|
237
|
'title' => $link_template->title,
|
238
|
'link' => $link_template->link,
|
239
|
'glue' => $link_template->glue,
|
240
|
'status' => (int) $link_template->status,
|
241
|
'weight' => (int) $link_template->weight,
|
242
|
))
|
243
|
->execute();
|
244
|
|
245
|
ext_links_templates_reset();
|
246
|
return $return;
|
247
|
}
|
248
|
|
249
|
/**
|
250
|
* Determines if a external link exists.
|
251
|
*
|
252
|
* @param $ext_link_name
|
253
|
* The ID of the external link to check.
|
254
|
*
|
255
|
* @return
|
256
|
* TRUE if the external link exists, FALSE otherwise.
|
257
|
*
|
258
|
* @see ext_links_load()
|
259
|
*/
|
260
|
function ext_links_exists($ext_link_name) {
|
261
|
return (bool) db_query_range('SELECT 1 FROM {ext_links} WHERE name = :name', 0, 1, array(':name' => $ext_link_name))->fetchField();
|
262
|
}
|
263
|
|
264
|
|
265
|
/**
|
266
|
* Returns the genus and the first epithet from the object taxon.
|
267
|
*
|
268
|
* @param $taxon
|
269
|
* A CDM Taxon instance object
|
270
|
* @return array
|
271
|
* An associate array with two elements:
|
272
|
* - genus: the uninomial
|
273
|
* - species: the species epithet
|
274
|
*/
|
275
|
function ext_link_species_name($taxon) {
|
276
|
$speciesName = array();
|
277
|
$i = 0;
|
278
|
while (isset($taxon->name->taggedName[$i]) && !isset($speciesName['species'])) {
|
279
|
if ($taxon->name->taggedName[$i]->type == "name") {
|
280
|
if (!isset($speciesName['genus'])) {
|
281
|
$speciesName['genus'] = $taxon->name->taggedName[$i]->text;
|
282
|
}
|
283
|
else {
|
284
|
$speciesName['species'] = $taxon->name->taggedName[$i]->text;
|
285
|
}
|
286
|
}
|
287
|
$i++;
|
288
|
}
|
289
|
return $speciesName;
|
290
|
}
|
291
|
|
292
|
/**
|
293
|
* Implements hook_block_info().
|
294
|
*/
|
295
|
function ext_links_block_info() {
|
296
|
if (TRUE) {
|
297
|
$block[0]["info"] = t("CDM - External Links");
|
298
|
return $block;
|
299
|
}
|
300
|
}
|
301
|
|
302
|
/**
|
303
|
* Implements hook_block_view().
|
304
|
*/
|
305
|
function ext_links_block_view($delta) {
|
306
|
// TODO Rename block deltas (e.g. '0') to readable strings.
|
307
|
switch ($delta) {
|
308
|
case '0':
|
309
|
$block['subject'] = 'External links';
|
310
|
|
311
|
$uuid = get_current_taxon_uuid();
|
312
|
if ($uuid) {
|
313
|
$taxon = cdm_ws_get(CDM_WS_PORTAL_TAXON, $uuid);
|
314
|
|
315
|
// $taxon->titleCache;
|
316
|
// var_export()
|
317
|
if (!empty($taxon)) {
|
318
|
drupal_add_js(drupal_get_path('module', 'ext_links') . '/ext_links.js');
|
319
|
$speciesName = ext_link_species_name($taxon);
|
320
|
|
321
|
$genus = $taxon->name->taggedName[0]->text;
|
322
|
$species = null;
|
323
|
if(isset($taxon->name->taggedName[1])){
|
324
|
$species = $taxon->name->taggedName[1]->text;
|
325
|
}
|
326
|
$block_content = '';
|
327
|
$grouped = variable_get('ext_links_appearance_grouped', 1);
|
328
|
if ($grouped) {
|
329
|
$block['content'] = theme('ext_links_list_grouped', array('speciesName' => $speciesName, 'genus' => $genus, 'species' => $species));
|
330
|
}
|
331
|
else {
|
332
|
$block['content'] = theme('ext_links_list_plain', array('speciesName' => $speciesName, 'genus' => $genus, 'species' => $species ));
|
333
|
}
|
334
|
|
335
|
// if(variable_get('ext_links_gbif_check', TRUE)) {
|
336
|
// $block_content .= '<a href="JavaScript:popupExternalLinks(\''.variable_get('ext_links_gbif_link', $ext_links_default[gbif][link_default_value]).str_replace('"','%22',$speciesName[genus]).variable_get('ext_links_gbif_concat', ' ').str_replace('"','%22',$speciesName[species]).'\')">'.variable_get('ext_links_gbif_text', $ext_links_default[gbif][text_default_value]).'</a><br />';
|
337
|
/*
|
338
|
$block_content .=
|
339
|
/* TODO
|
340
|
Please manually fix the parameters on the l() or url() function on the next line.
|
341
|
Typically, this was not changed because of a function call inside an array call like
|
342
|
array('title' => t('View user profile.')).
|
343
|
l(variable_get('ext_links_gbif_text', $ext_links_default[gbif][text_default_value]),
|
344
|
'JavaScript:popupExternalLinks('.variable_get('ext_links_gbif_link', $ext_links_default[gbif][link_default_value]).$speciesName[genus].variable_get('ext_links_gbif_concat', ' ').$speciesName[species],
|
345
|
array(), null, null, true);
|
346
|
*/
|
347
|
/*}
|
348
|
if(variable_get('ext_links_biocase_check', 1)) {
|
349
|
$block_content .= '<a href="JavaScript:popupExternalLinks(\''.variable_get('ext_links_biocase_link', $ext_links_default[biocase][link_default_value]).str_replace('"','%22',$speciesName[genus]).variable_get('ext_links_biocase_concat', ' ').str_replace('"','%22',$speciesName[species]).'\')">'.variable_get('ext_links_biocase_text', $ext_links_default[biocase][text_default_value]).'</a><br />';
|
350
|
}
|
351
|
if(variable_get('ext_links_nybg_check', 1)) {
|
352
|
$block_content .= '<a href="JavaScript:popupExternalLinks(\''.variable_get('ext_links_nybg_link', $ext_links_default[nybg][link_default_value]).str_replace('"','%22',$speciesName[genus]).variable_get('ext_links_nybg_concat', ' ').str_replace('"','%22',$speciesName[species]).'\')">'.variable_get('ext_links_nybg_text', $ext_links_default[nybg][text_default_value]).'</a><br />';
|
353
|
}
|
354
|
if(variable_get('ext_links_tropicos_check', 1)) {
|
355
|
$block_content .= '<a href="JavaScript:popupExternalLinks(\''.variable_get('ext_links_tropicos_link', $ext_links_default[tropicos][link_default_value]).str_replace('"','%22',$speciesName[genus]).variable_get('ext_links_tropicos_concat', ' ').str_replace('"','%22',$speciesName[species]).'\')">'.variable_get('ext_links_tropicos_text', $ext_links_default[tropicos][text_default_value]).'</a><br />';
|
356
|
}
|
357
|
if(variable_get('ext_links_ncbi_check', 1)) {
|
358
|
$block_content .= '<a href="JavaScript:popupExternalLinks(\''.variable_get('ext_links_ncbi_link', $ext_links_default[ncbi][link_default_value]).str_replace('"','%22',$speciesName[genus]).variable_get('ext_links_ncbi_concat', ' ').str_replace('"','%22',$speciesName[species]).'\')">'.variable_get('ext_links_ncbi_text', $ext_links_default[ncbi][text_default_value]).'</a><br />';
|
359
|
}
|
360
|
if(variable_get('ext_links_google_check', 1)) {
|
361
|
$block_content .= '<a href="JavaScript:popupExternalLinks(\''.variable_get('ext_links_google_link', $ext_links_default[google][link_default_value]).str_replace('"','%22',$speciesName[genus]).variable_get('ext_links_google_concat', ' ').str_replace('"','%22',$speciesName[species]).'\')">'.variable_get('ext_links_google_text', $ext_links_default[google][text_default_value]).'</a><br />';
|
362
|
}
|
363
|
if(variable_get('ext_links_flickr_check', 1)) {
|
364
|
$block_content .= '<a href="JavaScript:popupExternalLinks(\''.variable_get('ext_links_flickr_link', $ext_links_default[flickr][link_default_value]).str_replace('"','%22',$speciesName[genus]).variable_get('ext_links_flickr_concat', ' ').str_replace('"','%22',$speciesName[species]).'\')">'.variable_get('ext_links_flickr_text', $ext_links_default[flickr][text_default_value]).'</a><br />';
|
365
|
}
|
366
|
if(variable_get('ext_links_scholar_check', 1)) {
|
367
|
$block_content .= '<a href="JavaScript:popupExternalLinks(\''.variable_get('ext_links_scholar_link', $ext_links_default[scholar][link_default_value]).str_replace('"','%22',$speciesName[genus]).variable_get('ext_links_scholar_concat', ' ').str_replace('"','%22',$speciesName[species]).'\')">'.variable_get('ext_links_scholar_text', $ext_links_default[scholar][text_default_value]).'</a><br />';
|
368
|
}
|
369
|
if(variable_get('ext_links_bhl_check', 1)) {
|
370
|
$block_content .= '<a href="JavaScript:popupExternalLinks(\''.variable_get('ext_links_bhl_link', $ext_links_default[bhl][link_default_value]).str_replace('"','%22',$speciesName[genus]).variable_get('ext_links_bhl_concat', ' ').str_replace('"','%22',$speciesName[species]).'\')">'.variable_get('ext_links_bhl_text', $ext_links_default[bhl][text_default_value]).'</a><br />';
|
371
|
}
|
372
|
|
373
|
$block['content'] = $block_content;
|
374
|
$block['content'] = theme('ext_links_list_plain');
|
375
|
|
376
|
}
|
377
|
|
378
|
}*/
|
379
|
// if taxon
|
380
|
}
|
381
|
}
|
382
|
// If path.
|
383
|
return $block;
|
384
|
} /* switch */
|
385
|
|
386
|
}
|
387
|
|
388
|
/**
|
389
|
* Applies the name tokens to the external link templates.
|
390
|
*
|
391
|
* @param $ext_link
|
392
|
* @param $species_name
|
393
|
*
|
394
|
* @return array
|
395
|
* Array with the keys:
|
396
|
* - title: the title of the link
|
397
|
* - url: the url of the link
|
398
|
*/
|
399
|
function make_ext_link($ext_link, $species_name) {
|
400
|
switch ($ext_link->id) {
|
401
|
case 'nybg':
|
402
|
if ($species_name['genus'] != NULL) {
|
403
|
$query = 'DetFiledAsGenusLocal+%3D+\%27' . $species_name['genus'] . '\%27';
|
404
|
}
|
405
|
if ($species_name['species'] != NULL) {
|
406
|
$query .= $ext_link->glue . 'DetFiledAsSpeciesLocal+%3D+\%27' . $species_name['species'] . '\%27';
|
407
|
}
|
408
|
break;
|
409
|
case 'arkive':
|
410
|
$postURL = '&output=xml_no_dtd&client=arkive-images&site=arkive-images&ie=utf8&oe=utf8&num=20&proxystylesheet=tng-search&filter=0&getfields=*';
|
411
|
$query = str_replace('"', '%22', $species_name['genus']) . variable_get('ext_links_arkive_concat', '+') . str_replace('"', '%22', $species_name['species']) . $postURL;
|
412
|
break;
|
413
|
case 'herbcat':
|
414
|
$postURL = '&x=11&y=13&homePageSearchOption=scientific_name&nameOfSearchPage=home_page';
|
415
|
$query = str_replace('"', '%22', $species_name['genus']) . variable_get('ext_links_herbcat_concat', '+') . str_replace('"', '%22', $species_name['species']) . $postURL;
|
416
|
break;
|
417
|
case 'iucn':
|
418
|
case 'wcsp':
|
419
|
// apparently no search api, thus plain link without genus and species
|
420
|
$query = '';
|
421
|
break;
|
422
|
case 'ipni':
|
423
|
$query = 'find_genus=' . $species_name['genus'] . '&find_species=' . $species_name['species'];
|
424
|
break;
|
425
|
default:
|
426
|
$query = str_replace('"', '%22', $species_name['genus']) . $ext_link->glue . str_replace('"', '%22', $species_name['species']);
|
427
|
}
|
428
|
$ext_link_array = [
|
429
|
'title' => $ext_link->title,
|
430
|
'url' => $ext_link->link . $query
|
431
|
];
|
432
|
return $ext_link_array;
|
433
|
}
|
434
|
|
435
|
/**
|
436
|
* @todo Please document this function.
|
437
|
* @see http://drupal.org/node/1354
|
438
|
*/
|
439
|
function theme_ext_links_list_grouped($variables) {
|
440
|
|
441
|
$species_name = $variables['speciesName'];
|
442
|
if(!isset($species_name['genus'])) {
|
443
|
$species_name['genus'] = '';
|
444
|
}
|
445
|
if(!isset($species_name['species'])) {
|
446
|
$species_name['species'] = '';
|
447
|
}
|
448
|
|
449
|
$ext_links = ext_links_templates(true);
|
450
|
|
451
|
$ext_links_by_category = [];
|
452
|
|
453
|
foreach ($ext_links as $ext_link) {
|
454
|
if(!array_key_exists($ext_link->category, $ext_links_by_category)){
|
455
|
$ext_links_by_category[$ext_link->category] = [];
|
456
|
}
|
457
|
$ext_link_render_array = make_ext_link($ext_link, $species_name);
|
458
|
$ext_links_by_category[$ext_link->category][] = $ext_link_render_array;
|
459
|
}
|
460
|
|
461
|
$block_content = '';
|
462
|
foreach ($ext_links_by_category as $categoryTitle => $ext_links) {
|
463
|
$block_content .= "<div class=\"category\"><h5>" . $categoryTitle . "</h5>\n";
|
464
|
foreach($ext_links as $ext_link){
|
465
|
$block_content .= l($ext_link['title'], 'JavaScript:popupExternalLinks(\'' . $ext_link['url'] . '\')', ['external' => TRUE]) .'<br />';
|
466
|
}
|
467
|
$block_content .= "</div>";
|
468
|
}
|
469
|
|
470
|
return $block_content;
|
471
|
}
|
472
|
|
473
|
/**
|
474
|
* @todo Please document this function.
|
475
|
* @see http://drupal.org/node/1354
|
476
|
*/
|
477
|
function theme_ext_links_list_plain($variables) {
|
478
|
$speciesName = $variables['speciesName'];
|
479
|
if (!isset($speciesName['genus'])) {
|
480
|
$speciesName['genus'] = '';
|
481
|
}
|
482
|
if (!isset($speciesName['species'])) {
|
483
|
$speciesName['species'] = '';
|
484
|
}
|
485
|
|
486
|
$ext_links_templates = ext_links_templates(true);
|
487
|
$block_content = '';
|
488
|
foreach ($ext_links_templates as $ext_link) {
|
489
|
$ext_link = make_ext_link($ext_link, $speciesName);
|
490
|
$block_content .= l($ext_link['title'], 'JavaScript:popupExternalLinks(\'' . $ext_link['url'] . '\')', ['external' => TRUE]) .'<br />';
|
491
|
}
|
492
|
return $block_content;
|
493
|
}
|
494
|
|
495
|
/**
|
496
|
* @todo Please document this function.
|
497
|
* @see http://drupal.org/node/1354
|
498
|
*/
|
499
|
function ext_links_theme() {
|
500
|
return array(
|
501
|
'ext_links_list_grouped' => array('variables' => array(
|
502
|
'speciesName' => NULL,
|
503
|
'genus' => NULL,
|
504
|
'species' => NULL,
|
505
|
)),
|
506
|
'ext_links_list_plain' => array('variables' => array(
|
507
|
'speciesName' => NULL,
|
508
|
'genus' => NULL,
|
509
|
'species' => NULL,
|
510
|
)),
|
511
|
// theme_ext_links_admin_overview
|
512
|
'ext_links_admin_overview' => array(
|
513
|
'render element' => 'form',
|
514
|
'file' => 'ext_links.admin.inc',
|
515
|
),
|
516
|
// 'ext_links_link_template_filter_order' => array(
|
517
|
// 'render element' => 'element',
|
518
|
// 'file' => 'ext_links.admin.inc',
|
519
|
// ),
|
520
|
);
|
521
|
}
|
522
|
|
523
|
/**
|
524
|
* Get the default external links.
|
525
|
*
|
526
|
* @return array
|
527
|
* Returns an array with default external links values.
|
528
|
*/
|
529
|
function ext_links_template_defaults() {
|
530
|
$ext_links_default["gbif"] = array(
|
531
|
'id' => "gbif",
|
532
|
'link' => 'http://www.gbif.org/species/search?q=',
|
533
|
'title' => 'Search GBIF...',
|
534
|
'glue' => ' ',
|
535
|
'weight' => 0,
|
536
|
'status' => 1,
|
537
|
'category' => 'Specimens/Occurrences',
|
538
|
);
|
539
|
$ext_links_default["biocase"] = array(
|
540
|
'id' => "biocase",
|
541
|
'link' => 'http://search.biocase.org/edit/search/units/simpleSearch/query1?unitName=',
|
542
|
'title' => 'Search BioCASE...',
|
543
|
'glue' => ' ',
|
544
|
'weight' => 0,
|
545
|
'status' => 1,
|
546
|
'category' => 'Specimens/Occurrences',
|
547
|
);
|
548
|
$ext_links_default["nybg"] = array(
|
549
|
'id' => "nybg",
|
550
|
'link' => 'http://sweetgum.nybg.org/science/vh/specimen_list.php?SummaryData=',
|
551
|
'title' => 'Search NYBG...',
|
552
|
'glue' => '+AND+',
|
553
|
'weight' => 0,
|
554
|
'status' => 1,
|
555
|
'category' => 'Specimens/Occurrences',
|
556
|
);
|
557
|
$ext_links_default["tropicos"] = array(
|
558
|
'id' => "tropicos",
|
559
|
'link' => 'http://www.tropicos.org/NameSearch.aspx?name=',
|
560
|
'title' => 'Search Tropicos...',
|
561
|
'glue' => '+',
|
562
|
'weight' => 0,
|
563
|
'status' => 1,
|
564
|
'category' => 'Specimens/Occurrences',
|
565
|
);
|
566
|
$ext_links_default["ncbi"] = array(
|
567
|
'id' => "ncbi",
|
568
|
'link' => 'http://www.ncbi.nlm.nih.gov/gquery/gquery.fcgi?term=',
|
569
|
'title' => 'Search NCBI...',
|
570
|
'glue' => '+AND+',
|
571
|
'weight' => 0,
|
572
|
'status' => 1,
|
573
|
'category' => 'Molecular Resources',
|
574
|
);
|
575
|
$ext_links_default["google"] = array(
|
576
|
'id' => "google",
|
577
|
'link' => 'http://images.google.com/images?q=',
|
578
|
'title' => 'Search Google Images...',
|
579
|
'glue' => '+',
|
580
|
'weight' => 0,
|
581
|
'status' => 1,
|
582
|
'category' => 'Images',
|
583
|
);
|
584
|
$ext_links_default["flickr"] = array(
|
585
|
'id' => "flickr",
|
586
|
'link' => 'http://www.flickr.com/search/?w=all&q=',
|
587
|
'title' => 'Search flickr...',
|
588
|
'glue' => '+',
|
589
|
'weight' => 0,
|
590
|
'status' => 1,
|
591
|
'category' => 'Images',
|
592
|
);
|
593
|
$ext_links_default["scholar"] = array(
|
594
|
'id' => "scholar",
|
595
|
'link' => 'http://scholar.google.de/scholar?hl=de&btnG=Suche&lr=&as_ylo=&as_vis=0&q=',
|
596
|
'title' => 'Search Google scholar...',
|
597
|
'glue' => '+',
|
598
|
'weight' => 0,
|
599
|
'status' => 1,
|
600
|
'category' => 'Literature',
|
601
|
);
|
602
|
$ext_links_default["bhl"] = array(
|
603
|
'id' => "bhl",
|
604
|
'link' => 'http://www.biodiversitylibrary.org/Search.aspx?searchCat=&searchTerm=',
|
605
|
'title' => 'Search BHL...',
|
606
|
'glue' => ' ',
|
607
|
'weight' => 0,
|
608
|
'status' => 1,
|
609
|
'category' => 'Literature',
|
610
|
);
|
611
|
$ext_links_default["arkive"] = array(
|
612
|
'id' => "arkive",
|
613
|
'link' => 'http://www.arkive.org/search.html?q=',
|
614
|
'title' => 'Search ARKive...',
|
615
|
'glue' => '+',
|
616
|
'weight' => 0,
|
617
|
'status' => 0,
|
618
|
'category' => 'Images',
|
619
|
);
|
620
|
$ext_links_default["herbcat"] = array(
|
621
|
'id' => "herbcat",
|
622
|
'link' => 'http://apps.kew.org/herbcat/getHomePageResults.do?homePageSearchText=',
|
623
|
'title' => 'Search Kew Herbarium Catalogue...',
|
624
|
'glue' => '+',
|
625
|
'weight' => 0,
|
626
|
'status' => 1,
|
627
|
'category' => 'Specimens/Occurrences',
|
628
|
);
|
629
|
$ext_links_default["iucn"] = array(
|
630
|
'id' => "iucn",
|
631
|
'link' => 'http://www.iucnredlist.org/',
|
632
|
'title' => 'Go to IUCN Red List...',
|
633
|
'glue' => ' ',
|
634
|
'weight' => 0,
|
635
|
'status' => 1,
|
636
|
'category' => 'Conservation',
|
637
|
);
|
638
|
$ext_links_default["ipni"] = array(
|
639
|
'id' => "ipni",
|
640
|
'link' => 'http://www.ipni.org/ipni/advPlantNameSearch.do?',
|
641
|
'title' => 'Search IPNI...',
|
642
|
'glue' => '&',
|
643
|
'weight' => 0,
|
644
|
'status' => 1,
|
645
|
'category' => 'Classification',
|
646
|
);
|
647
|
$ext_links_default["wcsp"] = array(
|
648
|
'id' => "wcsp",
|
649
|
'link' => 'http://wcsp.science.kew.org/qsearch.do?plantName=',
|
650
|
'title' => 'Search World Checklist Monocots...',
|
651
|
'glue' => ' ',
|
652
|
'weight' => 0,
|
653
|
'status' => 1,
|
654
|
'category' => 'Classification',
|
655
|
);
|
656
|
$ext_links_default["tpl"] = array(
|
657
|
'id' => "tpl",
|
658
|
'link' => 'http://www.theplantlist.org/tpl/search?q=',
|
659
|
'title' => 'Search The Plant List...',
|
660
|
'glue' => '+',
|
661
|
'weight' => 0,
|
662
|
'status' => 1,
|
663
|
'category' => 'Classification',
|
664
|
);
|
665
|
$ext_links_default["eol"] = array(
|
666
|
'id' => "eol",
|
667
|
'link' => 'http://eol.org/search/?q=',
|
668
|
'title' => 'Search Encyclopaedia of Life...',
|
669
|
'glue' => '+',
|
670
|
'weight' => 0,
|
671
|
'status' => 1,
|
672
|
'category' => 'General',
|
673
|
);
|
674
|
$ext_links_default["jstor"] = array(
|
675
|
'id' => "jstor",
|
676
|
'link' => 'https://plants.jstor.org/search?filter=name&so=ps_group_by_genus_species+asc&Query=',
|
677
|
'title' => 'Search JSTOR Plant Science...',
|
678
|
'glue' => ' ',
|
679
|
'weight' => 0,
|
680
|
'status' => 1,
|
681
|
'category' => 'General',
|
682
|
);
|
683
|
$ext_links_default["epic"] = array(
|
684
|
'id' => "epic",
|
685
|
'link' => 'http://epic.kew.org/searchepic/summaryquery.do?scientificName=',
|
686
|
'title' => 'Search ePIC...',
|
687
|
'glue' => '+',
|
688
|
'weight' => 0,
|
689
|
'status' => 1,
|
690
|
'category' => 'General',
|
691
|
);
|
692
|
$ext_links_default["fairchild"] = array(
|
693
|
'id' => "fairchild",
|
694
|
'link' => 'http://palmguide.org/palmsearch.php?query=',
|
695
|
'title' => 'Search Fairchild Guide To Palms...',
|
696
|
'glue' => '+',
|
697
|
'weight' => 0,
|
698
|
'status' => 0, //disabled since Fairchild Guide To Palms seems to be down
|
699
|
'category' => 'Specimens/Occurrences',
|
700
|
);
|
701
|
$ext_links_default["ggbn"] = array(
|
702
|
'id' => "ggbn",
|
703
|
'link' => 'http://www.ggbn.org/ggbn_portal/search/result?fullScientificName=',
|
704
|
'title' => 'Search GGBN...',
|
705
|
'glue' => '+',
|
706
|
'weight' => 0,
|
707
|
'status' => 1,
|
708
|
'category' => 'Molecular Resources',
|
709
|
);
|
710
|
return $ext_links_default;
|
711
|
}
|