Project

General

Profile

Download (25 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(7-7/7)