Project

General

Profile

Download (70.8 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/**
3
 * @file
4
 * CDM Dataportal settings.
5
 */
6

    
7
// TODO Genus UUID.
8
define('DEFAULT_TAXONTREE_RANKLIMIT', '1b11c34c-48a8-4efa-98d5-84f7f66ef43a');
9
define('CDM_TAXONOMICTREE_UUID', 'cdm_taxonomictree_uuid');
10

    
11
define('CDM_DATAPORTAL_SEARCH_ITEMS_ON_PAGE', 25);
12
define('CDM_DATAPORTAL_NOMREF_IN_TITLE', 1);
13
define('CDM_DATAPORTAL_DISPLAY_IS_ACCEPTED_FOR', 0);
14
define('CDM_DATAPORTAL_ALL_FOOTNOTES', 0);
15
define('CDM_DATAPORTAL_ANNOTATIONS_FOOTNOTES', 0);
16
define('CDM_DATAPORTAL_LAST_VISITED_TAB_ARRAY_INDEX', 999);
17

    
18
/* annotationTypeKeys */
19
$annotationTypeKeys = array_keys(cdm_Vocabulary_as_option(UUID_ANNOTATION_TYPE));
20
if (in_array(UUID_ANNOTATION_TYPE_TECHNICAL, $annotationTypeKeys)) {
21
  $annotationTypeKeys = array_flip($annotationTypeKeys);
22

    
23
  // Technical annotation are off by default.
24
  unset($annotationTypeKeys[UUID_ANNOTATION_TYPE_TECHNICAL]);
25
  $annotationTypeKeys = array_flip($annotationTypeKeys);
26
  // Additional value for the NULL case.
27
  $annotationTypeKeys[] = 'NULL_VALUE';
28
}
29
define('ANNOTATIONS_TYPES_AS_FOOTNOTES_DEFAULT', serialize($annotationTypeKeys));
30

    
31
/* taxonRelationshipTypes */
32
define('CDM_TAXON_RELATIONSHIP_TYPES_DEFAULT', serialize(array(UUID_MISAPPLIED_NAME_FOR, UUID_INVALID_DESIGNATION_FOR)));
33

    
34
/* Gallery variables. */
35
$gallery_settings = array(
36
  "cdm_dataportal_show_taxon_thumbnails" => 1,
37
  "cdm_dataportal_show_synonym_thumbnails" => 0,
38
  "cdm_dataportal_show_thumbnail_captions" => 1,
39
  "cdm_dataportal_media_maxextend" => 120,
40
  "cdm_dataportal_media_cols" => 3,
41
  "cdm_dataportal_media_maxRows" => 1,
42
);
43

    
44
define('EDIT_MAPSERVER_V1_URI', 'http://edit.br.fgov.be/edit_wp5/v1');
45
define('EDIT_MAPSERVER_V11_URI', 'http://edit.br.fgov.be/edit_wp5/v1.1');
46
define('DISTRIBUTION_TEXTDATA_DISPLAY_ON_TOP', 'distribution_textdata_on_top');
47

    
48
// --- Taxon profile settings --- /
49
define('LAYOUT_SETTING_PREFIX', 'layout_');
50
define('FEATURE_TREE_LAYOUT_DEFAULTS', serialize(
51
  array(
52
    'enabled' => FALSE,
53
    'enclosingTag' => 'ul',
54
    'entryEnclosingTag' => 'li',
55
    'glue' => ' ',
56
  )));
57

    
58
/**
59
 * @todo document this function
60
 */
61
function get_taxon_tabs_list() {
62
  return array(
63
    0 => 'General',
64
    1 => 'Synonymy',
65
    2 => 'Images',
66
    3 => 'Specimens',
67
    4 => 'Keys',
68
  );
69
}
70

    
71
$taxon_tab_options = get_taxon_tabs_list();
72
$taxon_tab_options[CDM_DATAPORTAL_LAST_VISITED_TAB_ARRAY_INDEX] = 'Last visited tab';
73

    
74
define('CDM_DATAPORTAL_DEFAULT_TAXON_TAB', serialize($taxon_tab_options));
75

    
76
/**
77
 * @todo document this function.
78
 */
79
function get_taxon_options_list() {
80
  $taxon_tab_options = array_flip(get_taxon_tabs_list());
81
  foreach ($taxon_tab_options as $key => $value) {
82
    $taxon_tab_options[$key] = t($key);
83
  }
84
  return $taxon_tab_options;
85

    
86
}
87

    
88
define('TAXONPAGE_VISIBILITY_OPTIONS_DEFAULT', serialize(get_taxon_options_list()));
89
define('CDM_DATAPORTAL_GALLERY_SETTINGS', serialize($gallery_settings));
90
define('CDM_DATAPORTAL_SPECIMEN_GALLERY_NAME', 'specimen_gallery');
91
define('CDM_DATAPORTAL_DESCRIPTION_GALLERY_NAME', "description_gallery");
92
define('CDM_DATAPORTAL_MEDIA_GALLERY_NAME', "media_gallery");
93
define('CDM_DATAPORTAL_TAXON_MEDIA_GALLERY_NAME_TAB', "taxon_tab_media_gallery");
94
define('CDM_DATAPORTAL_SEARCH_GALLERY_NAME', "search_gallery");
95
define('CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS', 'cdm_dataportal_display_taxon_relationships');
96
define('CDM_DATAPORTAL_DISPLAY_NAME_RELATIONSHIPS', 'cdm_dataportal_display_name_relations');
97
// define('CDM_DATAPORTAL_DISPLAY_NAME_RELATIONSHIPS_2', array("default" => t('Display all')));
98
define('CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS_DEFAULT', 1);
99
define('CDM_DATAPORTAL_DISPLAY_NAME_RELATIONSHIPS_DEFAULT', 1);
100
define('CDM_TAXON_RELATIONSHIP_TYPES', 'cdm_taxon_relationship_types');
101
define('CDM_PROFILE_FEATURETREE_UUID', 'cdm_dataportal_featuretree_uuid');
102
define('CDM_DATAPORTAL_STRUCTURED_DESCRIPTION_FEATURETREE_UUID', 'cdm_dataportal_structdesc_featuretree_uuid');
103

    
104
/**
105
 * @todo document this function.
106
 */
107
function getGallerySettings($gallery_config_form_name) {
108
  $default_values = unserialize(CDM_DATAPORTAL_GALLERY_SETTINGS);
109
  return variable_get($gallery_config_form_name, $default_values);
110
}
111

    
112
/**
113
 * Returns the string representation of the default tab.
114
 *
115
 * @param bool $returnTabIndex
116
 *   Defaults to FALSE, if set true this function will return the index number
117
 *   of the default tab. (used to supply default values to form elements).
118
 */
119
function get_default_taxon_tab($returnTabIndex = FALSE) {
120

    
121
  global $user;
122
  $values = unserialize(CDM_DATAPORTAL_DEFAULT_TAXON_TAB);
123
  $user_tab_active = 'cdm_dataportal_' . $user->uid . '_default_tab_active';
124
  $user_tab = 'cdm_dataportal_' . $user->uid . '_default_tab';
125
  // Get the user value if the used has chosen to overwrite the system settings.
126
  $user_tab_on = variable_get($user_tab_active, FALSE);
127
  if ($user_tab_on) {
128
    $user_value = variable_get($user_tab, 0);
129
    $index_value = $user_value;
130
    // Get the system value.
131
  }
132
  else {
133
    $system_value = variable_get('cdm_dataportal_default_tab', 0);
134
    $index_value = $system_value;
135
  }
136

    
137
  // Return the index value or the string representation.
138
  if ($returnTabIndex) {
139
    return $index_value;
140
  }
141
  else {
142
    return ($values[$index_value]);
143
  }
144

    
145
}
146

    
147
/**
148
 * @todo Please document this function.
149
 * @see http://drupal.org/node/1354
150
 */
151
function cdm_dataportal_menu_admin(&$items) {
152
  // Display section on admin/config page.
153
  $items['admin/config/cdm_dataportal'] = array(
154
    'title' => 'CDM Dataportal',
155
    'description' => 'Settings for the CDM DataPortal.',
156
    'position' => 'right',
157
    'weight' => 10,
158
    'page callback' => 'system_admin_menu_block_page',
159
    'access arguments' => array('cdm_settings_general'),
160
    'file' => 'system.admin.inc',
161
    'file path' => drupal_get_path('module', 'system'),
162
  );
163
  $items['admin/config/cdm_dataportal/settings'] = array(
164
    'title' => 'Settings',
165
    'description' => 'Settings for the CDM DataPortal.',
166
    'weight' => 0,
167
    'page callback' => 'drupal_get_form',
168
    'page arguments' => array('cdm_settings_general'),
169
    'access arguments' => array('administer cdm_dataportal'),
170
    'type' => MENU_NORMAL_ITEM,
171
  );
172
  $items['admin/config/cdm_dataportal/settings/general'] = array(
173
    'title' => 'General',
174
    'description' => 'General',
175
    'weight' => 0,
176
    'page callback' => 'drupal_get_form',
177
    'page arguments' => array('cdm_settings_general'),
178
    'access arguments' => array('administer cdm_dataportal'),
179
    'type' => MENU_DEFAULT_LOCAL_TASK,
180
  );
181

    
182
  $items['admin/config/cdm_dataportal/settings/cachesite'] = array(
183
    'title' => 'Cache',
184
    'description' => 'Cache',
185
    'access arguments' => array('administer cdm_dataportal'),
186
    'page callback' => 'drupal_get_form',
187
    'page arguments' => array('cdm_settings_cache'),
188
    'weight' => 10,
189
    'type' => MENU_LOCAL_TASK,
190
  );
191

    
192
  $items['admin/config/cdm_dataportal/settings/geo'] = array(
193
    'title' => 'Geo & Map',
194
    'description' => 'Geo & Map',
195
    'access arguments' => array('administer cdm_dataportal'),
196
    'page callback' => 'drupal_get_form',
197
    'page arguments' => array('cdm_settings_geo'),
198
    'weight' => 1,
199
    'type' => MENU_LOCAL_TASK,
200
  );
201

    
202
  $items['admin/config/cdm_dataportal/settings/layout'] = array(
203
    'title' => 'Layout',
204
    'description' => 'Configure and adjust the layout of your DataPortal ',
205
    'access arguments' => array('administer cdm_dataportal'),
206
    'page callback' => 'drupal_get_form',
207
    'page arguments' => array('cdm_settings_layout'),
208
    'weight' => 2,
209
    'type' => MENU_LOCAL_TASK,
210
  );
211

    
212
  $items['admin/config/cdm_dataportal/settings/layout/taxon'] = array(
213
    'title' => 'Taxon',
214
    'description' => 'Configure and adjust the layout of your DataPortal ',
215
    'access arguments' => array('administer cdm_dataportal'),
216
    'page callback' => 'drupal_get_form',
217
    'page arguments' => array('cdm_settings_layout_taxon'),
218
    'weight' => 1,
219
    'type' => MENU_LOCAL_TASK,
220
  );
221
  /*
222
  $items[] = array(
223
  'path' => 'admin/config/cdm_dataportal/layout/synonymy',
224
  'title' => t('Synonymy'),
225
  'description' => t('Configure and adjust the layout of your DataPortal '),
226
  'access' => user_access('administer cdm_dataportal'),
227
  'callback' => 'drupal_get_form',
228
  'callback arguments' => array('cdm_settings_layout_synonymy'),
229
  'weight' => 1,
230
  'type' => MENU_LOCAL_TASK,
231
  );
232

    
233
  $items[] = array(
234
  'path' => 'admin/config/cdm_dataportal/layout/specimens',
235
  'title' => t('Specimens'),
236
  'description' => t('Configure and adjust the layout of your DataPortal '),
237
  'access' => user_access('administer cdm_dataportal'),
238
  'callback' => 'drupal_get_form',
239
  'callback arguments' => array('cdm_settings_layout_specimens'),
240
  'weight' => 1,
241
  'type' => MENU_LOCAL_TASK,
242
  );
243
  */
244
  $items['admin/config/cdm_dataportal/settings/layout/search'] = array(
245
    'title' => 'Search',
246
    'description' => 'Configure and adjust the layout of your DataPortal ',
247
    'access arguments' => array('administer cdm_dataportal'),
248
    'page callback' => 'drupal_get_form',
249
    'page arguments' => array('cdm_settings_layout_search'),
250
    'weight' => 2,
251
    'type' => MENU_LOCAL_TASK,
252
  );
253

    
254
  $items['admin/config/cdm_dataportal/settings/layout/media'] = array(
255
    'title' => 'Media',
256
    'description' => 'Configure and adjust the layout of your DataPortal ',
257
    'access arguments' => array('administer cdm_dataportal'),
258
    'page callback' => 'drupal_get_form',
259
    'page arguments' => array('cdm_settings_layout_media'),
260
    'weight' => 3,
261
    'type' => MENU_LOCAL_TASK,
262
  );
263
  /*
264
  // Path to banners configuration (DEFAULT THEME).
265
  $items[] = array(
266
  'path' => 'admin/config/cdm_dataportal/layout/theme',
267
  'title' => t('Theme'),
268
  'description' => t('Configure the drupal theme of your DataPortal '),
269
  'access' => user_access('administer cdm_dataportal'),
270
  'callback' => 'drupal_get_form',
271
  'callback arguments' => array('cdm_dataportal_theming_form'),
272
  'weight' => 4,
273
  'type' => MENU_LOCAL_TASK,
274
  );
275
  */
276
}
277

    
278
/**
279
 * @todo document this function.
280
 */
281
function cdm_help_general_cache() {
282
  $form = array();
283
  $form['cache_help'] = array(
284
    '#type' => 'fieldset',
285
    '#title' => t('Help'),
286
    '#collapsible' => TRUE,
287
    '#collapsed' => TRUE,
288
  );
289
  $form['cache_help']['test'] = array('#value' => t('probando'));
290
  return drupal_render($form);
291
  $res = array();
292
  $res['default'] = drupal_render($help);
293
  return $res;
294
}
295

    
296
/**
297
 * Configures the settings form for the CDM-API module.
298
 *
299
 * @return array
300
 *   Drupal settings form.
301
 */
302
function cdm_settings_general() {
303

    
304
  $form['cdm_webservice'] = array(
305
    '#type' => 'fieldset',
306
    '#title' => t('CDM Server'),
307
    '#collapsible' => FALSE,
308
    '#collapsed' => FALSE,
309
    '#description' => t('<em>CDM Server</em> makes the dialogue possible with
310
      <em>CDM Data Portal</em> thanks to its web services.'),
311
  );
312

    
313
  $form['cdm_webservice']['cdm_webservice_url'] = array(
314
    '#type' => 'textfield',
315
    '#title' => t('CDM web service URL') . ':',
316
    '#description' => t('This is the URL to the CDM-Server exposing your data
317
      e.g. <em>"http://localhost:8080/cichorieae/"</em> The URL <strong>must end
318
      with a slash</strong> character!'),
319
    '#default_value' => variable_get('cdm_webservice_url', NULL),
320
  );
321

    
322
  /*
323
  MOVED TO DATAPORTAL
324
  $form['cdm_webservice']['taxontree_ranklimit'] =  array(
325
  '#type'          => 'select',
326
  '#title'         => t('Rank of highest displayed taxon'),
327
  '#default_value' => variable_get('taxontree_ranklimit', DEFAULT_TAXONTREE_RANKLIMIT), //before DEFAULT_TAXONTREE_RANKLIMIT_UUID
328
  '#options'       => cdm_rankVocabulary_as_option(),
329
  '#description'   => t('The rank of the highest displayed taxon in the <em>taxontree</em>. When you explore
330
  your collection, you can navigate it through a tree structure (<em>taxontree</em>). You can
331
  select here which rank should be at the top level of the tree structure.'),
332
  );
333
  */
334

    
335
  $form['cdm_webservice']['cdm_webservice_debug'] = array(
336
    '#type' => 'checkbox',
337
    '#title' => t('<b>Debug CDM Web Service</b>'),
338
    '#default_value' => variable_get('cdm_webservice_debug', 1),
339
    '#description' => t('The black web service debug box will appear at the top
340
      of each page. When clicked it toggles open and provides a list of all HTTP
341
      requests which have been made while building of this page.<br />
342
      <strong>Note:</strong> this is a feature dedicated to developers. It will
343
      only be visible when logged in and if the user has suffucicient rights to
344
      see this debug box.'),
345
  );
346

    
347
  $form['cdm_webservice']['freetext_index'] = array(
348
    '#type' => 'fieldset',
349
    '#title' => t('Freetext index'),
350
    '#collapsible' => FALSE,
351
    '#collapsed' => FALSE,
352
  );
353

    
354
  // Check the cdmserver port number and display a waring if it is not port 80
355
  preg_match("#http[s]?://[0-9\p{L}\.]*:([0-9]*)/.*#u", variable_get('cdm_webservice_url', ''), $portNumberMatch, PREG_OFFSET_CAPTURE);
356
  if (isset($portNumberMatch[1]) && $portNumberMatch[1] != '80') {
357
    $form['cdm_webservice']['freetext_index']['message'] = array(
358
      '#markup' => "<div class=\"description\">"
359
      . t("The CDM web service URL contains a portnumber other than standart HTTP port 80: '!port'."
360
      . " Due to this the reindex and purge fuctions may not be working if there is a firewall in between you and the CDM Server."
361
      . " You may want to contact the maintainer of the according CDM Server in order to solve this problem.", array('!port' => $portNumberMatch[1][0]))
362
      . "</div>",
363
    );
364
  };
365

    
366
  $frontentURL = urlencode(variable_get('cdm_webservice_url', ''));
367
  $trigger_link_options = array(
368
    'attributes' => array(
369
      'class' => 'index-trigger',
370
    ),
371
  );
372
  $form['cdm_webservice']['freetext_index']['operations'] = array(
373
    '#markup' => "<div>" . t('Operations: !url1 !url2', array(
374
        '!url1' => l(t("Purge"), cdm_compose_url(CDM_WS_MANAGE_PURGE, NULL, 'frontendBaseUrl=' . $frontentURL), $trigger_link_options),
375
        '!url2' => l(t("Reindex"), cdm_compose_url(CDM_WS_MANAGE_REINDEX, NULL, 'frontendBaseUrl=' . $frontentURL), $trigger_link_options),
376
      ))
377
    . '<div id="index-progress"></div></div>',
378
  );
379
  _add_js_cdm_ws_progressbar(".index-trigger", "#index-progress");
380

    
381
  $form['cdm_webservice']['proxy'] = array(
382
    '#type' => 'fieldset',
383
    '#title' => t('Proxy'),
384
    '#collapsible' => TRUE,
385
    '#collapsed' => TRUE,
386
  );
387

    
388
  $form['cdm_webservice']['proxy']['cdm_webservice_proxy_url'] = array(
389
    '#type' => 'textfield',
390
    '#title' => t('Proxy URL') . ':',
391
    '#description' => t('If this proxy url is set the cdm api tries
392
    to connect the web service over the given proxy server.
393
    Otherwise proxy usage is deactivated.'),
394
    '#default_value' => variable_get('cdm_webservice_proxy_url', FALSE),
395
  );
396

    
397
  $form['cdm_webservice']['proxy']['cdm_webservice_proxy_port'] = array(
398
    '#type' => 'textfield',
399
    '#title' => t('Proxy port') . ':',
400
    '#default_value' => variable_get('cdm_webservice_proxy_port', '80'),
401
  );
402

    
403
  $form['cdm_webservice']['proxy']['cdm_webservice_proxy_usr'] = array(
404
    '#type' => 'textfield',
405
    '#title' => t('Login') . ':',
406
    '#default_value' => variable_get('cdm_webservice_proxy_usr', FALSE),
407
  );
408

    
409
  $form['cdm_webservice']['proxy']['cdm_webservice_proxy_pwd'] = array(
410
    '#type' => 'textfield',
411
    '#title' => t('Password') . ':',
412
    '#default_value' => variable_get('cdm_webservice_proxy_pwd', FALSE),
413
  );
414

    
415
  // TODO: settings are still incomplete, compare with
416
  // trunk/dataportal/inc/config_default.php.inc.
417
  $form['cdm_dataportal'] = array(
418
    '#type' => 'fieldset',
419
    '#title' => t('Taxon Tree'),
420
    '#collapsible' => FALSE,
421
    '#collapsed' => TRUE,
422
    '#description' => t('<p>When you explore your collection, you can navigate
423
      it through a tree structure also called <em>Taxon Tree</em>.</p><p>To be
424
      able to navigate through your collection the
425
      <a href="http://drupal.org/handbook/blocks">drupal block</a>
426
      <em>CDM Taxon Tree</em> should be visible for users. Enable the block at
427
      <a href="./?q=admin/build/block">Administer&#45&#62Site building&#45&#62Blocks
428
      </a></p>'),
429
  );
430

    
431
  $form['cdm_dataportal'][CDM_TAXONOMICTREE_UUID] = array(
432
    '#type' => 'select',
433
    '#title' => t('Available classifications') . ':',
434
    '#default_value' => variable_get(CDM_TAXONOMICTREE_UUID, FALSE),
435
    '#options' => cdm_get_taxontrees_as_options(),
436
    '#description' => t('Select the default taxa classification for your
437
      <em>taxon tree</em>, the other classifications will be also available but
438
      with a manual user change.'),
439
  );
440

    
441
  $form['cdm_dataportal']['taxontree_ranklimit'] = array(
442
    '#type' => 'select',
443
    '#title' => t('Rank of highest displayed taxon') . ':',
444
     // Before DEFAULT_TAXONTREE_RANKLIMIT_UUID.
445
    '#default_value' => variable_get('taxontree_ranklimit', DEFAULT_TAXONTREE_RANKLIMIT),
446
    '#options' => cdm_rankVocabulary_as_option(),
447
    '#description' => t('This is the rank of the highest displayed taxon in the
448
      <em>taxon tree</em>. You can select here which rank should be at the top
449
      level of the tree structure.'),
450
  );
451

    
452
  // Comment @WA: D7 form api does not support reset buttons,
453
  // so to mimic the D5 reset button we add one like this.
454
  $form['actions']['reset'] = array(
455
    '#markup' => '<input id="reset" type="reset" class="form-submit" value="' . t('Reset to defaults') . '" />',
456
    '#weight' => 1000,
457
  );
458

    
459
  return system_settings_form($form);
460
}
461

    
462

    
463
/**
464
 * LAYOUT settings
465
 * @return unknown_type
466
 *   todo
467
 */
468
function cdm_settings_layout() {
469

    
470
  // drupal_goto('admin/config/cdm_dataportal/layout/taxon');
471
  $form = array();
472
  /*
473
   // -- tabbed pages -- //
474
   $form['cdm_dataportal_taxonpage_tabs'] = array(
475
   '#type' => 'checkbox',
476
   '#title' => t('Tabbed taxon page'),
477
   '#default_value' => variable_get('cdm_dataportal_taxonpage_tabs', 1),
478
   '#description' => t('If selected split the taxon page into individual tabs for description, images, synonymy. If not the taxon data is rendered as a long single page without tabs.')
479
   );
480
   */
481
  $form['gen_layout'] = array(
482
    '#type' => 'fieldset',
483
    '#title' => t('Portal Layout'),
484
    '#collapsible' => FALSE,
485
    '#collapsed' => FALSE,
486
    '#description' => t('This settings contains the general configurations
487
      layout. If you want to configure the specific sites layout visit the
488
      respective configuration site for taxon, search or media.'),
489
  );
490

    
491
  // ---- footnotes --- //
492
  $form['gen_layout']['footnotes'] = array(
493
    '#type' => 'fieldset',
494
    '#title' => t('Footnotes'),
495
    '#collapsible' => FALSE,
496
    '#collapsed' => FALSE,
497
    '#description' => t('Taxa data such authors, synonyms names, descriptions,
498
      media or distribution areas may have annotations or footnotes. When the
499
      footnotes are enabled they will be visible (if they exist).'),
500
  );
501

    
502
  $form['gen_layout']['footnotes']['cdm_dataportal_all_footnotes'] = array(
503
    '#type' => 'checkbox',
504
    '#title' => t('Do not show footnotes'),
505
    '#default_value' => variable_get('cdm_dataportal_all_footnotes', CDM_DATAPORTAL_ALL_FOOTNOTES),
506
    '#description' => t('Check this if you do not want to show any footnotes'),
507
  );
508

    
509
  $form['gen_layout']['footnotes']['cdm_dataportal_annotations_footnotes'] = array(
510
    '#type' => 'checkbox',
511
    '#title' => t('Do not show annotations footnotes'),
512
    '#default_value' => variable_get('cdm_dataportal_annotations_footnotes', CDM_DATAPORTAL_ANNOTATIONS_FOOTNOTES),
513
    '#description' => t('Check this if you do not want to show annotation footnotes'),
514
  );
515

    
516
  $annotationTypeOptions = cdm_Vocabulary_as_option(UUID_ANNOTATION_TYPE);
517
  // Additional option for the NULL case.
518
  $annotationTypeOptions['NULL_VALUE'] = t('untyped');
519
  $form['gen_layout']['footnotes']['annotations_types_as_footnotes'] = array(
520
    '#type' => 'checkboxes',
521
    '#title' => t('Annotation types as footnotes'),
522
    '#description' => t("Only annotations of the selected type will be displayed
523
       as footnotes. You may want to turn 'technical annotations' off."),
524
    '#options' => $annotationTypeOptions,
525
  );
526
  $annotationsTypesAsFootnotes = variable_get('annotations_types_as_footnotes', unserialize(ANNOTATIONS_TYPES_AS_FOOTNOTES_DEFAULT));
527
  if (!empty($annotationsTypesAsFootnotes)) {
528
    $form['gen_layout']['footnotes']['annotations_types_as_footnotes']['#default_value'] = $annotationsTypesAsFootnotes;
529
  }
530

    
531
  // --- Advanced Search --- //
532
  $form['gen_layout']['asearch'] = array(
533
    '#type' => 'fieldset',
534
    '#title' => t('Advanced search'),
535
    '#collapsible' => FALSE,
536
    '#collapsed' => FALSE,
537
  );
538
  $form['gen_layout']['asearch']['cdm_dataportal_show_advanced_search'] = array(
539
    '#type' => 'checkbox',
540
    '#title' => t('Show advanced search link'),
541
    '#default_value' => variable_get('cdm_dataportal_show_advanced_search', 1),
542
    '#description' => t('Check this box if the link to advanced search should be show below the search box.'),
543
  );
544

    
545
  // @WA: D7 form api does not support reset buttons,
546
  // so to mimic the D5 reset button we add one like this.
547
  $form['actions']['reset'] = array(
548
    '#markup' => '<input id="reset" type="reset" class="form-submit" value="' . t('Reset to defaults') . '" />',
549
    '#weight' => 1000,
550
  );
551
  return system_settings_form($form);
552
}
553

    
554
/**
555
 * @todo Please document this function.
556
 * @see http://drupal.org/node/1354
557
 */
558
function cdm_dataportal_theming_form() {
559
  // --- Theme --- //
560
  /*
561
   $form['cdm_dataportal_theming'] = array(
562
   '#type' => 'fieldset',
563
   '#title' => t('Theme Images'),
564
   '#collapsible' => FALSE,
565
   '#collapsed' => FALSE,
566
   );
567
   */
568
  $form = array('#attributes' => array('enctype' => 'multipart/form-data'));
569

    
570
  $form['cdm_dataportal_theming_right_image'] = array(
571
    '#type' => 'file',
572
    '#title' => t('Select top right image'),
573
    '#description' => t('Maximum dimensions are %dimensions and the maximum size is %size kB.',
574
                            array('%dimensions' => '250x250', '%size' => '30')),
575
  );
576
  $form['cdm_dataportal_theming_middle_image'] = array(
577
    '#type' => 'file',
578
    '#title' => t('Select top middle image'),
579
  );
580
  $form['test'] = array(
581
    '#type' => 'textfield',
582
    '#title' => t('test'),
583
  );
584

    
585
  // $form['gen_layout']['theme']['#submit'][] = 'settings_validate_theme_pictures';
586
  $form['cdm_dataportal_theming']['submit'] = array(
587
    '#type' => 'submit',
588
    '#value' => t('Submit'),
589
  );
590

    
591
  return $form;
592
}
593

    
594
/**
595
 * @todo Please document this function.
596
 * @see http://drupal.org/node/1354
597
 */
598
function cdm_dataportal_theming_form_submit($form, &$form_state) {
599
  $validators = array();
600
  // Destination path where the files/banners will be saved.
601
  $dest = absolute_path_to_drupal() . '/' . path_to_theme() . '/images/banners';
602
  $dest = str_replace('/', DIRECTORY_SEPARATOR, $dest);
603
  // drupal_set_message($dest);
604
  // Check if directory exists.
605
  if (!file_exists($dest)) {
606

    
607
    // TODO: add rights, which rights should I add?
608
    if (!mkdir($dest, 0777, TRUE)) {
609
      drupal_set_message(t('Failed uploading the files; the directory !dest
610
        could not be created.', array('!dest' => $dest)), 'warning');
611
    }
612
  }
613
  // Check if files already exist.
614
  /*
615
  if (file_exists($dest)) {
616
  }
617
  */
618
  // Save the files.
619
  // TODO Modify the validators array to suit your needs.
620
  // This array is used in the revised file_save_upload.
621
  $validators = array(
622
    'file_validate_is_image' => array(),
623
    'file_validate_image_resolution' => array('85x85'),
624
    'file_validate_size' => array(30 * 1024),
625
  );
626

    
627
  $file = file_save_upload($dest, $validators);
628
  if ($file) {
629
    drupal_set_message($file->filepath);
630
    file_move($file->filepath, $dest);
631
  }
632
  else {
633
    drupal_set_message(t('Fail uploading the file, the file is not accepted.'), 'warning');
634
  }
635
  // Use banners in the selected theme.
636
  /*
637
  if (!copy($file, $file.'.bak')) {
638
    print ("failed to copy $file...<br>\n");
639
  }
640
  */
641
  // Use the banners as default theme.
642
}
643
/*
644
 function cdm_settings_layout_synonymy(){
645
 / * ====== SYNONYMY ====== * /
646
 $form['synonymy'] = array(
647
 '#type' => 'fieldset',
648
 '#title' => t('Synonymy'),
649
 '#collapsible' => TRUE,
650
 '#collapsed' => TRUE,
651
 '#description' => t('This section covers the settings related to the taxon <b>synonymy</b> tab.'),
652
 );
653

    
654
 $form['synonymy']['cdm_dataportal_nomref_in_title'] = array(
655
 '#type' => 'checkbox',
656
 '#title' => t('Show accepted taxon on top of the synonymy'),
657
 '#default_value' => variable_get('cdm_dataportal_nomref_in_title', CDM_DATAPORTAL_NOMREF_IN_TITLE),
658
 '#description' => t('If checked, the first homotypic taxon is a repetition of the accepted taxon most likely
659
 with the full nomenclatural reference (depending on the currently chosen theme).')
660
 );
661

    
662
 $form['synonymy']['cdm_dataportal_display_is_accepted_for'] = array(
663
 '#type' => 'checkbox',
664
 '#title' => t('Display <em>is accepted for ...</em> on taxon pages when coming from a synonym link.'),
665
 '#default_value' => variable_get('cdm_dataportal_display_is_accepted_for', CDM_DATAPORTAL_DISPLAY_IS_ACCEPTED_FOR),
666
 '#description' => t('Check this if after doing a search and clicking on a synonym you want to see the "accept of" text for the accepted synonym.')
667
 );
668

    
669
 $form['synonymy']['name_relationships']['name_relationships_to_show'] = array(
670
 '#type' => 'checkboxes',
671
 '#title' => t('Display name relationships'),
672
 '#default_value' => variable_get('name_relationships_to_show', 0),
673
 '#options' => $nameRelationshipTypeOptions,
674
 '#description' => t('Select the name relationships you want to show for the accepted taxa.'),
675
 );
676

    
677
 $form['synonymy'][CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS] = array(
678
 '#type' => 'checkbox',
679
 '#title' => t('Show taxon relations ships of accepted taxon'),
680
 '#default_value' => variable_get(CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS, CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS_DEFAULT),
681
 '#description' => t('If this option is enabled the synonymy will show the below selected taxon relationships of accepted taxa.')
682
 );
683

    
684
 $taxonRelationshipTypeOptions = cdm_Vocabulary_as_option(UUID_TAXON_RELATIONSHIP_TYPE);
685
 $form['synonymy'][CDM_TAXON_RELATIONSHIP_TYPES] = array(
686
 '#type' => 'checkboxes',
687
 '#title' => t('Taxon relationship types'),
688
 '#description' => t('Only taxon relationships of the selected type will be displayed'),
689
 '#options' => $taxonRelationshipTypeOptions,
690
 '#default_value' => variable_get('CDM_TAXON_RELATIONSHIP_TYPES', unserialize(CDM_TAXON_RELATIONSHIP_TYPES_DEFAULT)),
691
 '#disabled' => !variable_get(CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS, CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS_DEFAULT)
692
 );
693

    
694
 return system_settings_form($form);
695

    
696
 }
697
 */
698

    
699
/**
700
 * @todo Please document this function.
701
 * @see http://drupal.org/node/1354
702
 */
703
function cdm_dataportal_create_gallery_settings_form($form_name, $form_title, $collapsed, $form_description = '') {
704
  $form[$form_name] = array(
705
    '#type' => 'fieldset',
706
    '#title' => t($form_title),
707
    '#collapsible' => TRUE,
708
    '#collapsed' => $collapsed,
709
    '#tree' => TRUE,
710
    '#description' => t($form_description),
711
  );
712

    
713
  $default_values = unserialize(CDM_DATAPORTAL_GALLERY_SETTINGS);
714
  $gallery_settings = variable_get($form_name, $default_values);
715
  // $test = variable_get('cdm_dataportal_search_items_on_page', CDM_DATAPORTAL_SEARCH_ITEMS_ON_PAGE);
716
  if ($form_name == CDM_DATAPORTAL_SEARCH_GALLERY_NAME) {
717
    /*
718
    TODO: why cdm_dataportal_search_items_on_page does not save the value on $test???
719
    $form[$form_name]['cdm_dataportal_search_items_on_page'] = array(
720
    '#type' => 'textfield',
721
    '#title' => t('Search Page Size'),
722
    '#default_value' => $test,
723
    '#description' => t('Number of Names to display per page in search results.')
724
    );
725
    */
726
    $form[$form_name]['cdm_dataportal_show_taxon_thumbnails'] = array(
727
      '#type' => 'checkbox',
728
      '#title' => t('Show media thumbnails for accepted taxa'),
729
      '#default_value' => $gallery_settings['cdm_dataportal_show_taxon_thumbnails'],
730
    );
731

    
732
    $form[$form_name]['cdm_dataportal_show_synonym_thumbnails'] = array(
733
      '#type' => 'checkbox',
734
      '#title' => t('Show media thumbnails for synonyms'),
735
      '#default_value' => $gallery_settings['cdm_dataportal_show_synonym_thumbnails'],
736
      '#description' => '',
737
    );
738
  }
739

    
740
  // $showCaption = variable_get('cdm_dataportal_findtaxa_show_thumbnail_captions', 0);
741
  $form[$form_name]['cdm_dataportal_show_thumbnail_captions'] = array(
742
    '#type' => 'checkbox',
743
    '#title' => t('Show captions under thumbnails'),
744
    '#default_value' => $gallery_settings['cdm_dataportal_show_thumbnail_captions'],
745
    '#description' => '',
746
  );
747

    
748
  $form[$form_name]['cdm_dataportal_media_maxextend'] = array(
749
    '#type' => 'textfield',
750
    '#title' => t('Thumbnail size') . ':',
751
    '#default_value' => $gallery_settings['cdm_dataportal_media_maxextend'],
752
    '#description' => t('Select the size of each individual thumbnail.'),
753
  );
754

    
755
  if ($form_name != CDM_DATAPORTAL_MEDIA_GALLERY_NAME) {
756
    $form[$form_name]['cdm_dataportal_media_cols'] = array(
757
      '#type' => 'textfield',
758
      '#title' => t('Number of columns') . ':',
759
      '#default_value' => $gallery_settings['cdm_dataportal_media_cols'],
760
      '#description' => t('Group the thumbnails in columns: select how many
761
        columns the gallery should display.'),
762
    );
763
  }
764

    
765
  if ($form_name == CDM_DATAPORTAL_SEARCH_GALLERY_NAME) {
766
    $form[$form_name]['cdm_dataportal_media_maxRows'] = array(
767
      '#type' => 'textfield',
768
      '#title' => t('Maximum number of rows') . ':',
769
      '#default_value' => $gallery_settings['cdm_dataportal_media_maxRows'],
770
      '#description' => t('You can group the thumbnails in rows, select in how
771
        many rows should be the thumbnails grouped.<br/><strong>Note:</strong>
772
        If you want an unlimited number of rows please set to 0.'),
773
    );
774
  }
775

    
776
  return $form;
777
}
778

    
779
/**
780
 * @todo document this function.
781
 */
782
function cdm_settings_layout_taxon() {
783
  $collapsed = FALSE;
784
  $form = array();
785

    
786
  // --------- TABBED TAXON ------- //
787
  $form['taxon_tabs'] = array(
788
    '#type' => 'fieldset',
789
    '#title' => t('Taxon tabs'),
790
    '#collapsible' => TRUE,
791
    '#collapsed' => FALSE,
792
    '#description' => t('If tabbed taxon page is enabled the taxon profile will
793
      be splitted in four diferent tabs; General, Synonymy, Images and
794
      Specimens. If the taxon has no information for any of the tabs/sections
795
      such tab will be not displayed.'),
796
  );
797

    
798
  $form['taxon_tabs']['cdm_dataportal_taxonpage_tabs'] = array(
799
    '#type' => 'checkbox',
800
    '#title' => t('Tabbed taxon page'),
801
    '#default_value' => variable_get('cdm_dataportal_taxonpage_tabs', 1),
802
    '#description' => t('<p>If selected split the taxon page into individual
803
      tabs for description, images, synonymy and specimens. If not the taxon
804
      data is rendered as a long single page without tabs.</p>'),
805
  );
806

    
807
  $form['taxon_tabs']['cdm_taxonpage_tabs_visibility'] = array(
808
    '#type' => 'checkboxes',
809
    '#title' => t('Tabs visibility options') . ':',
810
    '#default_value' => variable_get('cdm_taxonpage_tabs_visibility', get_taxon_options_list()),
811
    '#options' => get_taxon_options_list(),
812
    '#description' => t('Enable or disable Tabs in the Tabbed page display'),
813
  );
814

    
815
  $form['taxon_tabs']['cdm_dataportal_default_tab'] = array(
816
    '#type' => 'select',
817
    '#title' => t('Default tab to display') . ':',
818
    '#default_value' => variable_get('cdm_dataportal_default_tab', 0),
819
    '#options' => unserialize(CDM_DATAPORTAL_DEFAULT_TAXON_TAB),
820
    '#description' => t('<p>Select the default tab to display when visiting a
821
      taxon page. Only available if Tabbed Taxon Page is enable.</p>
822
      <strong>Note:</strong> After performing a search and clicking in any
823
      synonym, the taxon tab to be rendered will be the synonymy of the accepted
824
      taxon and not the above selected tab.'),
825
  );
826

    
827
  $form['cdm_dataportal_show_back_to_search_results'] = array(
828
    '#type' => 'checkbox',
829
    '#title' => t('Show <em>Back to search results</em> link at the taxon site.'),
830
    '#default_value' => variable_get('cdm_dataportal_show_back_to_search_results', 1),
831
    '#description' => t('<p>If checked the link to search results is rendered at
832
       the top of the taxon site. Clicking on the link the last search performed
833
       is rendered again.</p>'),
834
  );
835

    
836
  /* ======  TAXON_PROFILE ====== */
837
  $form['taxon_profile'] = array(
838
    '#type' => 'fieldset',
839
    '#title' => t('Taxon profile (tab)'),
840
    '#description' => t('<p>This section covers the setting related to the taxon
841
      profile tab, also known as the <strong>"General"</strong> tab.</p>'),
842
    '#collapsible' => TRUE,
843
    '#collapsed' => TRUE,
844
  );
845

    
846
  // ---- PROFILE PICTURE ----//
847
  $form['taxon_profile']['picture'] = array(
848
    '#type' => 'fieldset',
849
    '#title' => t('Profile Picture'),
850
    '#collapsible' => TRUE,
851
    '#collapsed' => FALSE,
852
    '#description' => t('Select a profile picture for taxa. Like a facebook of plants.'),
853
  );
854

    
855
  $form['taxon_profile']['picture']['cdm_dataportal_show_default_image'] = array(
856
    '#type' => 'checkbox',
857
    '#title' => t('Enable profil picture'),
858
    '#default_value' => variable_get('cdm_dataportal_show_default_image', FALSE),
859
    '#description' => t('Show the profil picture.'),
860
  );
861

    
862
  $options = cdm_rankVocabulary_as_option();
863
  array_unshift($options, '-- DISABLED --');
864
  $form['taxon_profile']['picture']['image_hide_rank'] = array(
865
    '#type' => 'select',
866
    '#title' => t('Hide picture for taxa above') . ':',
867
    '#default_value' => variable_get('image_hide_rank', '0'),
868
    '#options' => $options,
869
    '#description' => t('Select which rank of pictures should not have
870
      a profile picture.'),
871
  );
872
  // Show picture.
873
  $selectShowMedia = array(
874
    0 => "Show only taxon pictures",
875
    1 => "Show taxon and child taxa pictures",
876
  );
877

    
878
  $form['taxon_profile']['picture']['cdm_dataportal_show_media'] = array(
879
    '#type' => 'select',
880
    '#title' => t('Available picture files') . ':',
881
    '#default_value' => variable_get('cdm_dataportal_show_media', FALSE),
882
    '#options' => $selectShowMedia,
883
    '#description' => t("Show the profile pictures current taxon's children."),
884
  );
885

    
886
  // -- MEDIA THUMBNAILS -- //
887
  $form_name = CDM_DATAPORTAL_DESCRIPTION_GALLERY_NAME;
888
  $form_title = 'Taxon Profile Images';
889
  $form_description = '<p>The different section in the taxon  profile can have images associated with them. These images are displayed in a gallery of thumbnails wich can be configuered here:</p>';
890
  $form['taxon_profile'][] = cdm_dataportal_create_gallery_settings_form($form_name, $form_title, $collapsed, $form_description);
891

    
892
  // ---- FEATURE TREE ---- //
893
  $form['taxon_profile']['taxon_profile'] = array(
894
    '#type' => 'fieldset',
895
    '#title' => t('Features'),
896
    '#collapsible' => TRUE,
897
    '#collapsed' => FALSE,
898
    '#description' => t("This section covers settings related to the taxon's
899
      <em>Feature Tree</em>. The <em>feature tree</em> are the taxon's
900
      features such as description, distribution, common names, etc. that Drupal
901
      will render at the taxon profile page."),
902
  );
903
  $featureTrees = cdm_get_featureTrees_as_options(TRUE);
904
  $form['taxon_profile']['feature_trees'][CDM_PROFILE_FEATURETREE_UUID] = array(
905
    '#type' => 'radios',
906
    '#title' => t('Taxon profile sections') . ':',
907
    '#default_value' => variable_get(CDM_PROFILE_FEATURETREE_UUID, UUID_DEFAULT_FEATURETREE),
908
    '#options' =>  $featureTrees['options'],
909
    // Comment @WA: because #options are sanitized in D7, it would
910
    // strip html like <fieldset>, so we put the fieldset in a suffix.
911
    '#field_suffix' => $featureTrees['treeRepresentations'],
912
    '#description' => t('Select the Feature Tree to be displayed at the taxon
913
      profile. Click "Show Details" to see the Feature Tree elements.'
914
    ),
915
  );
916
  $featureTrees = cdm_get_featureTrees_as_options();
917
  $form['taxon_profile']['feature_trees'][CDM_DATAPORTAL_STRUCTURED_DESCRIPTION_FEATURETREE_UUID] = array(
918
    '#type' => 'radios',
919
    '#title' => t('Natural language representation of structured descriptions') . ':',
920
    '#default_value' => variable_get(CDM_DATAPORTAL_STRUCTURED_DESCRIPTION_FEATURETREE_UUID, NULL),
921
    '#options' => $featureTrees['options'],
922
      // Comment @WA: because #options are sanitized in D7, it would
923
      // strip html like <fieldset>, so we put the fieldset in a suffix.
924
    '#field_suffix' => $featureTrees['treeRepresentations'],
925
    '#description' => t('Taxon descriptions can be stored in a highly structured
926
      form. The feature tree selected here will be used to generate textual
927
      representation in natural language.'
928
      // If there is no applicable FeatureTree you can create a new one using the <a href="">FeatureTreeManager</a>'
929
    ),
930
  );
931

    
932
  // ---- LAYOUT PER FEATURE ---- //
933
  $feature_tree = get_profile_featureTree();
934
  if (isset($feature_tree->root->children)) {
935

    
936
    $form_feature_list_layout = array(
937
      '#title' => t('Taxon profile layout'),
938
      '#collapsible' => TRUE,
939
      '#collapsed' => FALSE,
940
      '#type' => 'fieldset',
941
      '#description' => t('Will be available in a future release.'),
942
    );
943

    
944
    $feature_list_layout_settings_disabled = TRUE;
945
    foreach ($feature_tree->root->children as $featureNode) {
946

    
947
      if (!$feature_list_layout_settings_disabled && isset($featureNode->feature)) {
948
        // Must not exceed 45 characters !!!
949
        $subform_id = LAYOUT_SETTING_PREFIX . $featureNode->feature->uuid;
950

    
951
        $settings = mixed_variable_get($subform_id, FEATURE_TREE_LAYOUT_DEFAULTS);
952
        $systemDefaults = unserialize(FEATURE_TREE_LAYOUT_DEFAULTS);
953

    
954
        $form_feature_list_layout[$subform_id] = array(
955
          '#tree' => TRUE,
956
          '#title' => 'test' . $featureNode->feature->representation_L10n,
957
          '#collapsible' => FALSE,
958
          '#collapsed' => FALSE,
959
          '#type' => 'fieldset',
960
          '#description' => t(''),
961
        );
962

    
963
        $form_feature_list_layout[$subform_id]['enabled'] = array(
964
          '#type' => 'checkbox',
965
          '#title' => t('Enable'),
966
          '#default_value' => $settings['enabled'],
967
          '#description' => t('Enable user defined layout for this feature'),
968
        );
969

    
970
        $form_feature_list_layout[$subform_id]['enclosingTag'] = array(
971
          '#type' => 'textfield',
972
          '#title' => t('Enclosing tag'),
973
          '#disabled' => !$settings['enabled'],
974
          '#default_value' => $settings['enclosingTag'],
975
          '#description' => t('Default is: ') . "'<code>" . $systemDefaults['enclosingTag'] . "</code>'",
976
        );
977

    
978
        $form_feature_list_layout[$subform_id]['entryEnclosingTag'] = array(
979
          '#type' => 'textfield',
980
          '#title' => t('Entry enclosing tag'),
981
          '#disabled' => !$settings['enabled'],
982
          '#default_value' => $settings['entryEnclosingTag'],
983
          '#description' => t('Default is: ') . "'<code>" . $systemDefaults['entryEnclosingTag'] . "</code>'",
984
        );
985

    
986
        $form_feature_list_layout[$subform_id]['glue'] = array(
987
          '#type' => 'textfield',
988
          '#title' => t('Glue'),
989
          '#disabled' => !$settings['enabled'],
990
          '#default_value' => $settings['glue'],
991
          '#description' => t('Default is: ') . "'<code>" . $systemDefaults['glue'] . "</code>'",
992
        );
993

    
994
      }
995

    
996
      $form['taxon_profile']['feature_list_layout'] = $form_feature_list_layout;
997
    }
998
  }
999

    
1000
  // ---- DISTRIBUTION LAYOUT ---- //
1001
  $form['taxon_profile']['distribution_layout'] = array(
1002
    '#title' => t('Distribution'),
1003
    '#collapsible' => TRUE,
1004
    '#collapsed' => FALSE,
1005
    '#type' => 'fieldset',
1006
    '#description' => t('Select if you want to sort or not the distribution text
1007
      located below the distribution map.'),
1008
  );
1009

    
1010
  $form['taxon_profile']['distribution_layout']['distribution_sort'] = array(
1011
    '#type' => 'radios',
1012
    '#title' => t('Sort') . ':',
1013
    '#default_value' => variable_get('distribution_sort', 'NO_SORT'),
1014
    '#options' => array(
1015
      'NO_SORT' => t('Standard (No sort)'),
1016
      'HIDE_TDWG2' => t('Sorted without TDWG Level 2'),
1017
    ),
1018
  );
1019

    
1020
  $form['taxon_profile']['distribution_layout'][DISTRIBUTION_TEXTDATA_DISPLAY_ON_TOP] = array(
1021
    '#type' => 'checkbox',
1022
    '#title' => t('Show TextData elements on top of the map'),
1023
    '#default_value' => variable_get(DISTRIBUTION_TEXTDATA_DISPLAY_ON_TOP, 0),
1024
    '#description' => t('Check this if you want to appear all <code>TextData</code>
1025
      elements on top of the map. Otherwise all <code>TextData</code>
1026
      distribution elements will be listed below the other area elements.
1027
      This option is useful if you need to have descriptive texts for each
1028
      distribution map.'),
1029
  );
1030

    
1031

    
1032
  /* ====== SYNONYMY ====== */
1033
  $form['taxon_synonymy'] = array(
1034
    '#type' => 'fieldset',
1035
    '#title' => t('Taxon synonymy (tab)'),
1036
    '#collapsible' => TRUE,
1037
    '#collapsed' => TRUE,
1038
    '#description' => t('This section covers the settings related to the taxon
1039
      <strong>synonymy</strong> tab.####'),
1040
  );
1041

    
1042
  $form['taxon_synonymy']['cdm_dataportal_nomref_in_title'] = array(
1043
    '#type' => 'checkbox',
1044
    '#title' => t('Show accepted taxon on top of the synonymy'),
1045
    '#default_value' => variable_get('cdm_dataportal_nomref_in_title', CDM_DATAPORTAL_NOMREF_IN_TITLE),
1046
    '#description' => t('If checked, the first homotypic taxon is a repetition
1047
      of the accepted taxon most likely with the full nomenclatural reference
1048
      (depending on the currently chosen theme).'),
1049
  );
1050

    
1051
  $form['taxon_synonymy']['cdm_dataportal_display_is_accepted_for'] = array(
1052
    '#type' => 'checkbox',
1053
    '#title' => t('Display <em>is accepted for ...</em> on taxon pages when
1054
      coming from a synonym link.'),
1055
    '#default_value' => variable_get('cdm_dataportal_display_is_accepted_for', CDM_DATAPORTAL_DISPLAY_IS_ACCEPTED_FOR),
1056
    '#description' => t('Check this if after doing a search and clicking on a
1057
      synonym you want to see the "accept of" text for the accepted synonym.'),
1058
  );
1059

    
1060
  $nameRelationshipTypeOptions = cdm_Vocabulary_as_option(UUID_NAME_RELATIONSHIP_TYPE);
1061
  $form['name_relationships']['name_relationships_to_show'] = array(
1062
    '#type' => 'checkboxes',
1063
    '#title' => t('Display name relationships') . ':',
1064
    '#default_value' => variable_get('name_relationships_to_show', 0),
1065
    '#options' => $nameRelationshipTypeOptions,
1066
    '#description' => t('Select the name relationships you want to show for the
1067
      accepted taxa.'),
1068
  );
1069

    
1070
  $form[CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS] = array(
1071
    '#type' => 'checkbox',
1072
    '#title' => t('Show taxon relations ships of accepted taxon'),
1073
    '#default_value' => variable_get(CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS, CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS_DEFAULT),
1074
    '#description' => t('If this option is enabled the synonymy will show the
1075
      below selected taxon relationships of accepted taxa.'),
1076
  );
1077

    
1078
  $taxonRelationshipTypeOptions = cdm_Vocabulary_as_option(UUID_TAXON_RELATIONSHIP_TYPE, '_cdm_relationship_type_term_label_callback');
1079
  $form[CDM_TAXON_RELATIONSHIP_TYPES] = array(
1080
    '#type' => 'checkboxes',
1081
    '#title' => t('Taxon relationship types') . ':',
1082
    '#description' => t('Only taxon relationships of the selected type will be
1083
      displayed'),
1084
    '#options' => $taxonRelationshipTypeOptions,
1085
    '#default_value' => variable_get(CDM_TAXON_RELATIONSHIP_TYPES, unserialize(CDM_TAXON_RELATIONSHIP_TYPES_DEFAULT)),
1086
    '#disabled' => !variable_get(CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS, CDM_DATAPORTAL_DISPLAY_TAXON_RELATIONSHIPS_DEFAULT),
1087
  );
1088

    
1089
  // ====== SPECIMENS ====== //
1090
  $form['taxon_specimens'] = array(
1091
    '#type' => 'fieldset',
1092
    '#title' => t('Taxon specimens (tab)'),
1093
    '#collapsible' => TRUE,
1094
    '#collapsed' => TRUE,
1095
    '#description' => t('This section covers the settings related to the taxon
1096
      <strong>specimens</strong> tab.'),
1097
  );
1098

    
1099
  $form_name = CDM_DATAPORTAL_SPECIMEN_GALLERY_NAME;
1100
  $form_title = t('Specimen media');
1101
  $form_description = t('Specimens may have media which is displayed at the
1102
     Specimen tab/section as a gallery. It is possible to configure the
1103
     thumbnails gallery here, however for configuring how a single media should
1104
     be displayed please go to !url.</p>',
1105
     array(
1106
       '!url' => l(t('Layout -> Media'), 'admin/config/cdm_dataportal/settings/layout/media'),
1107
     ));
1108
  $form['taxon_specimens'][] = cdm_dataportal_create_gallery_settings_form($form_name, $form_title, FALSE, $form_description);
1109

    
1110
  // --- MEDIA GALLERY ---- //
1111
  $form_name = CDM_DATAPORTAL_TAXON_MEDIA_GALLERY_NAME_TAB;
1112
  $form_title = 'Media gallery (tab)';
1113
  $form_description = '<p>This section covers the settings related to the taxon <strong>media</strong> tab.
1114
   Taxa may have media (usually images) and they are as thumbnails displayed. It is possible to configure
1115
   the thumbnails gallery here, however for configuring how a single media should be displayed please go to
1116
   <a href="./?q=admin/settings/cdm_dataportal/layout/media">Layout -&gt; Media</a></p>
1117
   <p><strong>Note:</strong> These settings are only taken into account when the standard
1118
   gallery viewer is selected at <a href="./?q=admin/settings/cdm_dataportal/layout/media">Layout -&gt; Media</a>.</p>';
1119
  $form['taxon_media'][] = cdm_dataportal_create_gallery_settings_form($form_name, $form_title, TRUE, $form_description);
1120

    
1121
  // Comment @WA: D7 form api does not support reset buttons,
1122
  // so to mimic the D5 reset button we add one like this.
1123
  $form['actions']['reset'] = array(
1124
    '#markup' => '<input id="reset" type="reset" class="form-submit" value="' . t('Reset to defaults') . '" />',
1125
    '#weight' => 1000,
1126
  );
1127
  return system_settings_form($form);
1128
}
1129

    
1130
/**
1131
 * @todo document this function.
1132
 */
1133
function cdm_settings_layout_search() {
1134

    
1135
  $form = array();
1136

    
1137
  $form['search_settings'] = array(
1138
    '#type' => 'fieldset',
1139
    '#title' => t('Taxa Search'),
1140
    '#collapsible' => TRUE,
1141
    '#collapsed' => TRUE,
1142
    '#description' => t('<p>The data portal allows the users to perform searchs.</p><p>To perform searchs
1143
         the block <em>CDM Taxon Search</em> should be enabled and visible for users
1144
         where they can write the text to be searched. You can find Drupal block configuration
1145
         site at <a href="./?q=admin/build/block">Administer&#45&#62Site building&#45&#62Blocks</a></p> '),
1146
  );
1147

    
1148
  $form['search_settings']['cdm_dataportal_search_items_on_page'] = array(
1149
    '#type' => 'textfield',
1150
    '#title' => t('Results per page') . ':',
1151
    '#default_value' => variable_get('cdm_dataportal_search_items_on_page', CDM_DATAPORTAL_SEARCH_ITEMS_ON_PAGE),
1152
    '#description' => t('Number of results to display per page.'),
1153
  );
1154

    
1155
  $form['search_settings']['cdm_search_taxa'] = array(
1156
    '#type' => 'checkbox',
1157
    '#title' => t('Sets the default value of <em>Search for accepted taxa</em> in the advanced search form.'),
1158
    '#default_value' => variable_get('cdm_search_taxa', 1),
1159
    '#description' => t('<p>If checked the <em>Search for accepted taxa </em> option will be enabled in the advanced form.</p>'),
1160
  );
1161

    
1162
  $form['search_settings']['cdm_search_synonyms'] = array(
1163
    '#type' => 'checkbox',
1164
    '#title' => t('Sets the default value of <em>Search for synonyms</em> in the advanced search form.'),
1165
    '#default_value' => variable_get('cdm_search_synonyms', 1),
1166
    '#description' => t('<p>If checked the <em>Search for synonyms</em> option will be enabled in the advanced form.</p>'),
1167
  );
1168

    
1169
  $form['search_settings']['cdm_search_common_names'] = array(
1170
    '#type' => 'checkbox',
1171
    '#title' => t('Sets the default value of <em>Search for common names</em> in the advanced search form.'),
1172
    '#default_value' => variable_get('cdm_search_common_names', 0),
1173
    '#description' => t('<p>If checked the <em>Search for common names</em> option will be enabled in the advanced form.</p>'),
1174
  );
1175

    
1176
  $form['search_settings']['cdm_search_use_default_values'] = array(
1177
    '#type' => 'checkbox',
1178
    '#title' => t('Sets use of default values in the advanced search form.'),
1179
    '#default_value' => variable_get('cdm_search_use_default_values', 1),
1180
    '#description' => t('<p>If checked the defqult values set abovewill be used for the search.</p>'),
1181
  );
1182

    
1183

    
1184
  // --- SEARCH TAXA GALLERY ---- //
1185
  $items = variable_get('cdm_dataportal_search_items_on_page', CDM_DATAPORTAL_SEARCH_ITEMS_ON_PAGE);
1186
  $collapsed = FALSE;
1187
  $form_name = CDM_DATAPORTAL_SEARCH_GALLERY_NAME;
1188
  $form_title = 'Taxa Search thumbnails';
1189
  $form_description = 'Search results may show thumbnails. ';
1190
  $form[] = cdm_dataportal_create_gallery_settings_form($form_name, $form_title, $collapsed, $form_description);
1191

    
1192
  // Comment @WA: D7 form api does not support reset buttons,
1193
  // so to mimic the D5 reset button we add one like this.
1194
  $form['actions']['reset'] = array(
1195
    '#markup' => '<input id="reset" type="reset" class="form-submit" value="' . t('Reset to defaults') . '" />',
1196
    '#weight' => 1000,
1197
  );
1198
  return system_settings_form($form);
1199
}
1200

    
1201
/**
1202
 * @todo document this function.
1203
 */
1204
function cdm_settings_layout_media() {
1205

    
1206
  $form = array();
1207

    
1208
  $form['media_settings'] = array(
1209
    '#type' => 'fieldset',
1210
    '#title' => t('Media display settings'),
1211
    '#collapsible' => TRUE,
1212
    '#collapsed' => FALSE,
1213
    '#description' => t('This section covers the settings related to the taxa media, that is how each single media should be displayed.'),
1214
  );
1215

    
1216
  $form['media_settings']['image_gallery_viewer'] = array(
1217
    '#type' => 'select',
1218
    '#title' => t('Image viewer') . ':',
1219
    '#default_value' => variable_get('image_gallery_viewer', 'default'),
1220
    '#options' => array(
1221
      'default' => t('Standard image viewer'),
1222
      'fsi' => t('FSI viewer (requires FSI server!)'),
1223
    ),
1224
  );
1225

    
1226
  // --- MEDIA GALLERY ---- //
1227
  $form_name = CDM_DATAPORTAL_MEDIA_GALLERY_NAME;
1228
  $form_title = 'Standard viewer';
1229
  $form_description = '<p>Configure the standard image viewer.</p><p><strong>Note:</strong> the image viewer should selected otherwise settings are not taking into account.</p>';
1230
  // $form[] = cdm_dataportal_create_gallery_settings_form($form_name, $form_title, $collapsed);
1231
  // Comment @WA: $collapsed is not defined.
1232
  // $form['media_settings'][] = cdm_dataportal_create_gallery_settings_form($form_name, $form_title, $collapsed, $form_description);
1233
  $form['media_settings'][] = cdm_dataportal_create_gallery_settings_form($form_name, $form_title, FALSE, $form_description);
1234

    
1235
  // @WA: D7 form api does not support reset buttons,
1236
  // so to mimic the D5 reset button we add one like this.
1237
  $form['actions']['reset'] = array(
1238
    '#markup' => '<input id="reset" type="reset" class="form-submit" value="' . t('Reset to defaults') . '" />',
1239
    '#weight' => 1000,
1240
  );
1241
  return system_settings_form($form);
1242
}
1243

    
1244
/**
1245
 * GEOSERVICE and Map settings.
1246
 */
1247
function cdm_settings_geo() {
1248

    
1249
  $form = array();
1250

    
1251
  /*
1252
  GEO SERVER
1253
  */
1254
  $form['geoserver'] = array(
1255
    '#type' => 'fieldset',
1256
    '#title' => t('Geo Server Settings'),
1257
    '#collapsible' => TRUE,
1258
    '#collapsed' => TRUE,
1259
    '#description' => t('Configuration and selection of your geo server.
1260
      The Geo Server is responsible for generating the maps.'),
1261
  );
1262

    
1263
  $form['geoserver']['edit_map_server'] = array(
1264
    '#type' => 'select',
1265
    '#title' => t('Geoservice access point URL') . ':',
1266
    '#default_value' => variable_get('edit_map_server', EDIT_MAPSERVER_V1_URI),
1267
    '#options' => array(
1268
      EDIT_MAPSERVER_V1_URI => 'EDIT Map Server v1',
1269
      EDIT_MAPSERVER_V11_URI => 'EDIT Map Server v1.1',
1270
      /*
1271
      'http://edit.br.fgov.be/edit_wp5/v1/' => 'EDIT Map Server - Mirror 1',
1272
      'http://edit.br.fgov.be/edit_wp5/v1/' => 'EDIT Map Server - Mirror 2',
1273
      */
1274
      'ALTERNATIVE' => '-- Alternative URL --',
1275
    ),
1276
    '#description' => t('Select the Map Server you want the data portal to
1277
      connect. If you want to introduce a custom address just select the
1278
      Alternative URL value and fill the field Geoservice Access Point
1279
      - Alternative URL with the custom ip address.'),
1280
  );
1281

    
1282
  $form['geoserver']['edit_map_server_alternative'] = array(
1283
    '#type' => 'textfield',
1284
    '#title' => t('Geoservice access point - alternative URL') . ':',
1285
    '#default_value' => variable_get('edit_map_server_alternative', ''),
1286
    '#description' => t('Alternative URL of a EDIT Map Service to be used by
1287
      this portal. You must choose the option <i>-- Alternative URL --</i> in
1288
      the chooser above to enable this url.'),
1289
  );
1290

    
1291
  /*
1292
  MAP SETTINGS
1293
  */
1294
  $form['map_settings'] = array(
1295
    '#type' => 'fieldset',
1296
    '#title' => t('Maps settings'),
1297
    '#collapsible' => TRUE,
1298
    '#collapsed' => TRUE,
1299
    '#description' => t('General configuration for all map types.'),
1300
  );
1301

    
1302
  $form['map_settings']['cdm_dataportal_geoservice_display_width'] = array(
1303
    '#type' => 'textfield',
1304
    '#title' => t('Maps width') . ':',
1305
    '#default_value' => variable_get('cdm_dataportal_geoservice_display_width', 390),
1306
    '#description' => t('Choose the width of your maps, the height will always
1307
      be the half of the width. A value of 500 means the size will be 500 pixels
1308
      width and 250 pixels height.'),
1309
  );
1310

    
1311
  $form['map_settings']['cdm_dataportal_geoservice_bounding_box'] = array(
1312
    '#type' => 'textfield',
1313
    '#title' => t('Fixed bounding box') . ':',
1314
    '#default_value' => variable_get('cdm_dataportal_geoservice_bounding_box', '-180,-90,180,90'),
1315
    '#description' => t('Define surrounding of area to be displayed in maps.
1316
      Use "-180,-90,180,90" for the whole world. Leave <strong>empty</strong>
1317
      to let the map <strong>automatically zoom</strong> to the distribution
1318
      area.'),
1319
  );
1320

    
1321
  $form['map_settings']['cdm_dataportal_geoservice_labels_on'] = array(
1322
    '#type' => 'checkbox',
1323
    '#title' => '<b>' . t('Display area labels') . '</b>',
1324
    '#default_value' => variable_get('cdm_dataportal_geoservice_labels_on', FALSE),
1325
    '#description' => t('Check this if you like area names to be displayed in the maps. DOES IT WORK???? '),
1326
  );
1327

    
1328
  $form['map_settings']['cdm_dataportal_geoservice_map_caption'] = array(
1329
    '#type' => 'textfield',
1330
    '#title' => t('Map caption') . ':',
1331
    '#default_value' => variable_get('cdm_dataportal_geoservice_map_caption', ''),
1332
    '#description' => t('Define a caption for the map.'),
1333
  );
1334

    
1335
  $form['map_settings']['cdm_dataportal_geoservice_distributionOpacity'] = array(
1336
    '#type' => 'textfield',
1337
    '#title' => t('Distribution layer opacity') . ':',
1338
    '#default_value' => variable_get('cdm_dataportal_geoservice_distributionOpacity', '0.5'),
1339
    '#description' => t('Valid values range from 0.0 to 1.0. Value 1.0 means the distributions (the countries or regions) will
1340
                           fully visible, while a value near to 0.0 will be not much visible.'),
1341
  );
1342

    
1343
  $form['map_settings']['cdm_dataportal_map_openlayers'] = array(
1344
    '#type' => 'radios',
1345
    '#title' => t('Map Viewer') . ':',
1346
    '#options' => array(
1347
      1 => "OpenLayers dynamic mapviewer",
1348
      0 => "Plain image",
1349
    ),
1350
    '#default_value' => variable_get('cdm_dataportal_map_openlayers', 1),
1351
    '#description' => t('You can choose from two different map viewers:
1352
      <ul><li><em>OpenLayers</em> displays the maps in an interactive viewer
1353
      which allows zooming and panning. If not enabled the maps will consist
1354
      on a static image. If enabled you can configure the default layer
1355
      (background of your maps) below. Only one of them will be rendered.</li>
1356
      <li><em>Plain image</em> displays the map as a plain non interactive
1357
      image.</li></ul>'),
1358
  );
1359

    
1360
  $openLayersEnabled = variable_get('cdm_dataportal_map_openlayers', 1) == 1;
1361

    
1362

    
1363
  // --- Plain Image Settings --- //
1364
  $form['map_image'] = array(
1365
    '#type' => 'fieldset',
1366
    '#title' => t('Plain image map settings'),
1367
    '#collapsible' => TRUE,
1368
    '#collapsed' => $openLayersEnabled,
1369
    '#description' => t('The settings in this section are still expertimental
1370
      and can only be used with the EDIT map service version 1.1 or above.'),
1371
  );
1372

    
1373
  $edit_mapserver_version = getEDITMapServiceVersionNumber();
1374
  if ($edit_mapserver_version < 1.1) {
1375
    $form['map_image']['#description'] = '<div class="messages warning">' . t("The selected EDIT map service version has to small version number: $edit_mapserver_version") . '</div>'
1376
      . $form['map_image']['#description'];
1377
  }
1378

    
1379
  $form['map_image']['map_base_layer'] = array(
1380
    '#type' => 'textfield',
1381
    '#title' => t('Background layer') . ':',
1382
    '#default_value' => variable_get('map_base_layer', 'cyprusdivs'),
1383
    '#description' => t('Background layer. For available layers inspect !url1 or !url2.', array(
1384
      '!url1' => l(t('deegree-csw'), 'http://edit2.br.fgov.be:8080/deegree-csw/md_search.jsp'),
1385
      '!url2' => l(t('geoserver layers'), 'http://edit.br.fgov.be:8080/geoserver/rest/layers'),
1386
    )),
1387
  );
1388

    
1389
  $form['map_image']['map_bg_color'] = array(
1390
    '#type' => 'textfield',
1391
    '#title' => t('Background color') . ':',
1392
    '#default_value' => variable_get('map_bg_color', '1874CD'),
1393
  );
1394

    
1395
  $form['map_image']['map_base_layer_style'] = array(
1396
    '#type' => 'textfield',
1397
    '#title' => t('Background layer area style') . ':',
1398
     // Only line color by now.
1399
    '#default_value' => variable_get('map_base_layer_style', 'ffffff,606060,,'),
1400
    '#description' => t('Syntax: {Area fill color},{Area stroke color},{Area stroke width},{Area stroke dash style}'),
1401
  );
1402

    
1403

    
1404
  // --- OpenLayers Settings --- //
1405
  $form['openlayers'] = array(
1406
    '#type' => 'fieldset',
1407
    '#title' => t('OpenLayers settings'),
1408
    '#collapsible' => TRUE,
1409
    '#collapsed' => !$openLayersEnabled,
1410
    '#description' => '',
1411
  );
1412

    
1413
  if (!$openLayersEnabled) {
1414
    $form['openlayers']['#description'] = '<div class="messages warning">' . t('The Openlayers viewer is currently not enabled! (see section Maps settings above )') . '</div>'
1415
      . $form['openlayers']['#description'];
1416
  }
1417

    
1418
  $baselayer_options = array(
1419
    /*
1420
   NOTICE: must correspond to the layers defined in
1421
   js/openlayers_,ap.js#getLayersByName()
1422
   */
1423
    // osgeo_vmap0 projections: EPSG:4326: EPSG:900913
1424
    'osgeo_vmap0' => "Metacarta Vmap0",
1425
    // 'metacarta_vmap0' => "Metacarta Vmap0" , // EPSG:4326, EPSG:900913
1426
    // all others EPSG:900913
1427
    // 'edit-vmap0_world_basic' => 'EDIT Vmap0',
1428
    'edit-etopo1' => "ETOPO1 Global Relief Model",
1429
    'mapnik' => 'OpenStreetMap',
1430
    'osmarender' => 'OpenStreetMap (Tiles@home)',
1431
    'gmap' => 'Google Streets',
1432
    'gsat' => 'Google Satellite',
1433
    'ghyb' => 'Google Hybrid',
1434
    'veroad' => 'Virtual Earth Roads',
1435
    'veaer' => 'Virtual Earth Aerial',
1436
    'vehyb' => 'Virtual Earth Hybrid',
1437
    // 'yahoo' => 'Yahoo Street',
1438
    // 'yahoosat' => 'Yahoo Satellite',
1439
    // 'yahoohyb' => 'Yahoo Hybrid',
1440
  );
1441

    
1442
  $form['openlayers']['baselayers'] = array(
1443
    '#type' => 'checkboxes_preferred',
1444
    '#title' => t('Base Layers') . ':',
1445
    '#options' => $baselayer_options,
1446
    '#default_value' => variable_get('baselayers', array('metacarta_vmap0' => "metacarta_vmap0", 'PREFERRED' => 'metacarta_vmap0')),
1447
    '#description' => t('Choose the baselayer layer you prefer to use as map background in the OpenLayers dynamic mapviewer.'),
1448
  );
1449

    
1450
  // cdm_dataportal_geoservice_showLayerSwitcher
1451
  $form['openlayers']['cdm_dataportal_geoservice_showLayerSwitcher'] = array(
1452
    '#type' => 'checkbox',
1453
    '#title' => '<b>' . t('Show Layer Switcher') . '</b>',
1454
    '#default_value' => variable_get('cdm_dataportal_geoservice_showLayerSwitcher', TRUE),
1455
    '#description' => t('
1456
      The Layer Switcher control displays a table of contents
1457
      for the map.  This allows the user interface to switch between
1458
      BaseLayers and to show or hide Overlays.  By default the switcher is
1459
      shown minimized on the right edge of the map, the user may expand it
1460
      by clicking on the handle.'
1461
    ),
1462
  );
1463

    
1464
  $localhostkey = 'ABQIAAAAFho6eHAcUOTHLmH9IYHAeBRi_j0U6kJrkFvY4-OX2XYmEAa76BTsyMmEq-tn6nFNtD2UdEGvfhvoCQ';
1465
  $gmap_api_key = variable_get('gmap_api_key', 'ABQIAAAAFho6eHAcUOTHLmH9IYHAeBRi_j0U6kJrkFvY4-OX2XYmEAa76BTsyMmEq-tn6nFNtD2UdEGvfhvoCQ');
1466
  $form['openlayers']['gmap_api_key'] = array(
1467
    '#type' => 'textfield',
1468
    '#title' => t('Google maps API key') . ':',
1469
    '#default_value' => variable_get('gmap_api_key', $gmap_api_key),
1470
    '#description' => t('If you want to use the Google Maps Layer, a key is
1471
      needed. If you need a key, visit
1472
      <a href="http://code.google.com/intl/en/apis/maps/signup.html">google maps api key</a>.
1473
      <br/><strong>Note:</strong> The following key: <code>!localhostkey</code>
1474
      is the default key for the localhost (127.0.0.1). The key in use is the
1475
      one above this text.', array('!localhostkey' => $localhostkey)),
1476
  );
1477

    
1478
  $form['cdm_dataportal_geoservice_map_legend'] = array(
1479
    '#type' => 'fieldset',
1480
    '#title' => t('Map legend'),
1481
    '#collapsible' => TRUE,
1482
    '#collapsed' => TRUE,
1483
    '#description' => t('Configure the maps legend.'),
1484
  );
1485

    
1486
  $form['cdm_dataportal_geoservice_map_legend']['cdm_dataportal_geoservice_legend_on'] = array(
1487
    '#type' => 'checkbox',
1488
    '#title' => '<b>' . t('Display a map legend') . '</b>',
1489
    '#default_value' => variable_get('cdm_dataportal_geoservice_legend_on', TRUE),
1490
    '#description' => t('Check this if you like a legend to be displayed with the maps.'),
1491
  );
1492

    
1493
  $form['cdm_dataportal_geoservice_map_legend']['cdm_dataportal_geoservice_legendOpacity'] = array(
1494
    '#type' => 'textfield',
1495
    '#title' => t('Legend opacity'),
1496
    '#default_value' => variable_get('cdm_dataportal_geoservice_legendOpacity', '0.5'),
1497
    '#description' => t('Valid values range from 0.0 to 1.0. Value 1.0 means the legend will be fully visible, while a value near
1498
                         to 0.0 will be not much visible.'),
1499
  );
1500

    
1501
  $form['cdm_dataportal_geoservice_map_legend']['cdm_dataportal_geoservice_legend_font_size'] = array(
1502
    '#type' => 'textfield',
1503
    '#title' => t('Font size'),
1504
    '#default_value' => variable_get('cdm_dataportal_geoservice_legend_font_size', 10),
1505
    '#description' => t('Font size in pixels.'),
1506
  );
1507

    
1508
  $fontStyles = array(
1509
    0 => "plane",
1510
    1 => "italic",
1511
  );
1512
  $form['cdm_dataportal_geoservice_map_legend']['cdm_dataportal_geoservice_legend_font_style'] = array(
1513
    '#type' => 'select',
1514
    '#title' => t('Available font styles'),
1515
    '#default_value' => variable_get('cdm_dataportal_geoservice_legend_font_style', FALSE),
1516
    '#options' => $fontStyles,
1517
    '#description' => t('Select a font style for the map legend.'),
1518
  );
1519

    
1520
  $form['cdm_dataportal_geoservice_map_legend']['cdm_dataportal_geoservice_legend_icon_width'] = array(
1521
    '#type' => 'textfield',
1522
    '#title' => t('Legend icon width'),
1523
    '#default_value' => variable_get('cdm_dataportal_geoservice_legend_icon_width', 35),
1524
    '#description' => t('Legend icon width in pixels.'),
1525
  );
1526
  $form['cdm_dataportal_geoservice_map_legend']['cdm_dataportal_geoservice_legend_icon_height'] = array(
1527
    '#type' => 'textfield',
1528
    '#title' => t('Legend icon height'),
1529
    '#default_value' => variable_get('cdm_dataportal_geoservice_legend_icon_height', 15),
1530
    '#description' => t('Legend icon height in pixels.'),
1531
  );
1532

    
1533
  // @WA: D7 form api does not support reset buttons,
1534
  // so to mimic the D5 reset button we add one like this.
1535
  $form['actions']['reset'] = array(
1536
    '#markup' => '<input id="reset" type="reset" class="form-submit" value="' . t('Reset to defaults') . '" />',
1537
    '#weight' => 1000,
1538
  );
1539
  return system_settings_form($form);
1540
}
1541

    
1542
/**
1543
 * @todo document this function.
1544
 */
1545
function cdm_settings_cache() {
1546

    
1547
  $form = array();
1548

    
1549
  $form['cache_settings'] = array(
1550
    '#type' => 'fieldset',
1551
    '#title' => t('Cache Settings'),
1552
    '#collapsible' => FALSE,
1553
    '#collapsed' => FALSE,
1554
    '#description' => t('<p>When caching is enabled all single taxon sites are
1555
      stored in an internal drupal cache doing the portal response of taxa pages
1556
      faster. This is possible because the sites are loaded from the cache and
1557
      are not created from scratch.</p>'),
1558
  );
1559

    
1560
  $form['cache_settings']['cdm_webservice_cache'] = array(
1561
    '#type' => 'checkbox',
1562
    '#title' => t('<strong>Enable caching</strong>'),
1563
    '#options' => cdm_help_general_cache(),
1564
    '#default_value' => variable_get('cdm_webservice_cache', 1),
1565
    '#description' => t('<p>Enable drupal to load taxa pages from the cache.</p>
1566
       <p><strong>Note:</strong> If taxa are modified by the editor or any other
1567
       application the changes will be not visible till the cache is erased.
1568
       Therefore developers should deactived this feature when they are working
1569
       on the CDM Dataportal Module.</p>'),
1570
  );
1571

    
1572
  $form['cache_settings']['cdm_run_cache'] = array(
1573
    '#markup' => cdm_view_cache_site(),
1574
  );
1575

    
1576
  // @WA: D7 form api does not support reset buttons,
1577
  // so to mimic the D5 reset button we add one like this.
1578
  $form['actions']['reset'] = array(
1579
    '#markup' => '<input id="reset" type="reset" class="form-submit" value="' . t('Reset to defaults') . '" />',
1580
    '#weight' => 1000,
1581
  );
1582
  return system_settings_form($form);
1583
}
1584

    
1585
/**
1586
 * Walk and cache all taxon pages.
1587
 */
1588
function cdm_view_cache_site() {
1589

    
1590
  $out = '';
1591

    
1592
  drupal_add_js(drupal_get_path('module', 'cdm_dataportal') . '/js/cache_all_taxa.js');
1593

    
1594
  $request_params = array();
1595
  $request_params['query'] = '%';
1596
  // Cache only the dafault classification.
1597
  $request_params['tree'] = variable_get('cdm_taxonomictree_uuid', FALSE);
1598
  $request_params['doTaxa'] = 1;
1599
  $request_params['doSynonyms'] = 0;
1600
  $request_params['doTaxaByCommonNames'] = 0;
1601

    
1602
  $search_url = cdm_compose_url(CDM_WS_PORTAL_TAXON_FIND . ".json", NULL, queryString($request_params));
1603

    
1604
  $search_url = uri_uriByProxy($search_url);
1605
  $search_url = rtrim($search_url, '/');
1606
  $taxon_page_url = url('cdm_dataportal/taxon/');
1607

    
1608
  $out .= t('<p><strong>Cache all taxon pages</strong></p>');
1609
  $out .= '<p>When you launch the cache process the cache is filled and ready to be enabled.<br/>
1610
  Remember that when you load the taxa from the cache last changes on taxa will be not visible till you erase
1611
  the cache and fill it again.</p>';
1612
  $out .= '<p>Before  running the cache bot you have to empty the cache manually.</p>';
1613

    
1614
  $out .= '<div>' . t('This caching process may take long time and could cause heavy load on your server') . '</div>';
1615
  $out .= '<div id="progress"></div>';
1616

    
1617
  // Comment @WA: A form within a form is not valid html and not needed here.
1618
  // Also, it would be recommended just to include this part of the form in the
1619
  // rest of the form array in cdm_settings_cache().
1620
  // $out .= '<form id="cache_site">';
1621
  $out .= '<input type="hidden" name="searchTaxaUrl" value="' . $search_url . '"/>';
1622
  $out .= '<input type="hidden" name="taxonPageUrl" value="' . $taxon_page_url . '"/>';
1623
  $out .= '<input type="button" name="start" value="' . t('Start') . '"/>';
1624
  $out .= '<input type="button" name="stop" value="' . t('Stop') . '"/>';
1625
  // $out .= '</form>';
1626
  $out .= '</div>';
1627
  /*
1628
  foreach($taxonPager->records as $taxon){
1629
    cdm_dataportal_taxon_view($uuid);
1630
  }
1631
  */
1632
  return $out;
1633
}
1634

    
1635
/**
1636
 * Form validation handler for ?
1637
 *
1638
 * Comment @WA: currently this handler is not used.
1639
 * It seems partly for cdm_settings_general en partly for cdm_settings_cache?
1640
 * Then you can change the name into cdm_settings_general_validate() or
1641
 * cdm_settings_cache_validate().
1642
 * But cdm_api_secref_cache_clear is not doing anything (yet)?
1643
 */
1644
function cdm_settings_validate($form, &$form_state) {
1645

    
1646
  if (!str_endsWith($form_state['values']['cdm_webservice_url'], '/')) {
1647
    // form_set_error('cdm_webservice_url', t("The URL to the CDM Web Service must end with a slash: '/'."));
1648
    $form_state['values']['cdm_webservice_url'] .= '/';
1649
  }
1650

    
1651
  if ($form_state['values']['cdm_webservice_cache'] != variable_get('cdm_webservice_cache', 1)) {
1652
    cache_clear_all(NULL, 'cache_cdm_ws');
1653
    // Better clear secref_cache since I can not be sure if the cache has not
1654
    // be used during this response.
1655
    cdm_api_secref_cache_clear();
1656
  }
1657
}
1658

    
1659
/**
1660
 * @todo document this function.
1661
 */
1662
function getEDITMapServiceURI() {
1663

    
1664
  if (variable_get('edit_map_server', FALSE) == 'ALTERNATIVE') {
1665
    return (variable_get('edit_map_server_alternative', FALSE));
1666
  }
1667
  elseif (variable_get('edit_map_server', FALSE)) {
1668
    return variable_get('edit_map_server', FALSE);
1669
  }
1670
  else {
1671
    return EDIT_MAPSERVER_V1_URI;
1672
  }
1673

    
1674
}
1675

    
1676
/**
1677
 * @todo document this function.
1678
 *
1679
 * @return float
1680
 *   The version number of the currently selected edit mapserver as a float.
1681
 *   Returns 0 on error.
1682
 */
1683
function getEDITMapServiceVersionNumber() {
1684

    
1685
  $pattern = '/v([\d\.]+)$/';
1686

    
1687
  $url = getEDITMapServiceURI();
1688
  preg_match($pattern, $url, $matches, PREG_OFFSET_CAPTURE, 3);
1689
  if (isset($matches[1])) {
1690
    // Convert string to float.
1691
    $version = 1 + $matches[1][0] - 1;
1692
    return $version;
1693
  }
1694
  else {
1695
    // Report error.
1696
    drupal_set_message(t(" Invalid version number in EDIT map service URL: '!edit_mapserver'", array('!edit_mapserver' => variable_get('edit_map_server', EDIT_MAPSERVER_V1_URI))), 'warning');
1697
    return 0;
1698
  }
1699
}
1700

    
1701
/**
1702
 * Implements hook_element_info().
1703
 *
1704
 * @see http://drupal.org/node/37862
1705
 */
1706
function cdm_dataportal_element_info() {
1707
  $type['checkboxes_preferred'] = array(
1708
    '#input' => TRUE,
1709
    '#process' => array('expand_checkboxes_preferred'),
1710
    '#after_build' => array('checkboxes_preferred_after_build'),
1711
    '#theme' => array('checkboxes_preferred'),
1712
    // '#theme_wrapper' => array('form_element'),
1713
  );
1714
  return $type;
1715
}
1716

    
1717
/**
1718
 * #process function for the custom form element type 'checkbox_preferred'
1719
 */
1720
function expand_checkboxes_preferred($element, &$form_state, $form) {
1721
  // First of all create the checkboxes.
1722
  $element = form_process_checkboxes($element);
1723

    
1724
  $children = element_children($element);
1725

    
1726
  $element['table_start'] = array(
1727
    '#markup' => '<table class="checkboxes_preferred"><tr><th></th><th>' . t('Enabled') . '</th><th>' . t('Default') . '</th></tr>',
1728
    '#weight' => -1,
1729
  );
1730

    
1731
  $weight = 0;
1732
  foreach ($children as $key) {
1733
    $odd_even = $weight % 4 == 0 ? 'odd' : 'even';
1734
    $element[$key]['#weight'] = $weight;
1735
    $element[$key]['#prefix'] = '<tr class="' . $odd_even . '"><td>' . t($element['#options'][$key]) . '</td><td>';
1736
    $element[$key]['#suffix'] = '</td>';
1737
    unset($element[$key]['#title']);
1738
    $weight += 2;
1739
  }
1740
  $weight = 0;
1741

    
1742
  if (count($element['#options']) > 0) {
1743
    foreach ($element['#options'] as $key => $choice) {
1744
      if (!isset($element[$key . '_preferred'])) {
1745
        $element[$key . '_preferred'] = array(
1746
          '#type' => 'radio',
1747
          '#name' => $element['#parents'][0] . '_preferred',
1748
          '#return_value' => check_plain($key),
1749
          '#default_value' => empty($element['#default_value_2']) ? NULL : $element['#default_value_2'],
1750
          '#attributes' => $element['#attributes'],
1751
          // '#spawned' => TRUE,
1752
          '#weight' => $weight + 1,
1753
          '#prefix' => '<td>',
1754
          '#suffix' => '</td></tr>',
1755
        );
1756
      }
1757
      $weight += 2;
1758
    }
1759
  }
1760

    
1761
  $element['table_end'] = array(
1762
    '#markup' => '</table>',
1763
    '#weight' => $weight++,
1764
  );
1765

    
1766
  return $element;
1767
}
1768

    
1769
/**
1770
 * Theme function for the custom form field 'checkboxes_preferred'.
1771
 */
1772
function theme_checkboxes_preferred($variables) {
1773
  $element = $variables['element'];
1774
  $out = '<div id="edit-baselayers-wrapper" class="form-item">';
1775
  $out .= '<label for="edit-baselayers">' . $element['#title'] . '</label>';
1776
  $out .= drupal_render_children($element);
1777
  $out .= '<div class="description">' . $element['#description'] . '</div>';
1778
  $out .= '</div>';
1779
  return $out;
1780
}
1781

    
1782
/**
1783
 * @todo Please document this function.
1784
 * @see http://drupal.org/node/1354
1785
 */
1786
function checkboxes_preferred_after_build($form, &$form_state) {
1787

    
1788
  $parent_id = $form['#parents'][0];
1789

    
1790
  if ($_POST && count($_POST) > 0) {
1791
    // First pass of form processing.
1792
    $preferred_layer = $_POST[$parent_id . '_preferred'];
1793
    $form['#value']['PREFERRED'] = $preferred_layer;
1794
    $form_state[$parent_id] = $form['#value'];
1795
  }
1796
  else {
1797
    // Second pass of form processing.
1798
    $preferred_layer = $form['#value']['PREFERRED'];
1799
  }
1800

    
1801
  // Also set the chosen value (not sure if this is good Drupal style ....).
1802
  foreach ($children = element_children($form) as $key) {
1803
    if (!empty($form[$key]['#type']) && $form[$key]['#type'] == 'radio') {
1804
      $form[$key]['#value'] = $preferred_layer;
1805
    }
1806
  }
1807
  // The default layer must always be enabled.
1808
  $form[$preferred_layer]['#value'] = $preferred_layer;
1809

    
1810
  return $form;
1811
}
(13-13/13)