Project

General

Profile

Download (12.7 KB) Statistics
| Branch: | Tag: | Revision:
1 6657531f Andreas Kohlbecker
<?php
2
/**
3
 * @file
4
 * Install, update and uninstall functions for the cdm_dataportal module.
5
 */
6
7
/**
8
 * Implements hook_install().
9
 */
10
function cdm_dataportal_install() {
11
  db_update('system')
12
    ->fields(array(
13
      'weight' => 20,
14
    ))
15
    ->condition('name', 'cdm_dataportal')
16
    ->execute();
17
}
18
19
/**
20
 * Implements hook_uninstall().
21
 */
22
function cdm_dataportal_uninstall() {
23
  // Delete all nodes with a cdm content type from the node table.
24
  // Comment @WA: you also may want to delete these content types from the
25
  // node_type table.
26
  db_delete('node')
27
    ->condition('type', 'cdm_%')
28
    ->execute();
29 661b79ac Andreas Kohlbecker
}
30 ba706bf0 Andreas Kohlbecker
31 661b79ac Andreas Kohlbecker
/*
32
 * update functions:
33
 *
34
 * - 1 digit for Drupal core compatibility.
35 9438ad3a Andreas Kohlbecker
 * - 1 digit for your module's major release version (e.g., is this the 7.x-1.* (1) or 7.x-2.* (2) series of your module?). This digit should be 0 for initial porting of your module to a new Drupal core API.
36
 * - 2 digits for sequential counting, starting with 00.
37 661b79ac Andreas Kohlbecker
 *
38
 * @see http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_update_N/7
39
 */
40 ba706bf0 Andreas Kohlbecker
41 bfb2b81a Andreas Kohlbecker
/**
42 661b79ac Andreas Kohlbecker
 * update for RELEASE 3.1.3:
43
 *  - reset edit_map_server variable to default
44
 */
45 8f886253 Andreas Kohlbecker
function cdm_dataportal_update_7301() {
46 661b79ac Andreas Kohlbecker
  // reset edit_map_server variable to default
47
   return _remove_variable('edit_map_server');
48 ba706bf0 Andreas Kohlbecker
}
49
50
/**
51
 * update for RELEASE 3.1.4:
52
 *  - reset edit_map_server variable to default
53 9438ad3a Andreas Kohlbecker
 */
54
function cdm_dataportal_update_7302() {
55
56
  return
57 ba706bf0 Andreas Kohlbecker
  _remove_variable('edit_map_server') . // once again reset edit_map_server variable to default
58
  _rename_variable('cdm_dataportal_show_media', 'cdm_images_include_children');
59 3e36c87c Andreas Kohlbecker
}
60
61
/**
62
 * update for RELEASE 3.2.1:
63
 *  - adding missing permissions for role CDM Admin
64
 */
65
function cdm_dataportal_update_7303() {
66
  $role = user_role_load_by_name('CDM admin');
67
  if(!$role){
68 711242b7 Andreas Kohlbecker
    return "Role CDM admin not found, so the update is skipped.";
69
  }
70
71
  $tasks_performed = array();
72
73
  // permissions for node types
74
  $node_type_names = node_type_get_names();
75
  $types_to_update = array('page', 'story', 'article');
76
  foreach ($types_to_update as $name){
77
    if(in_array($name, $node_type_names)) {
78
      $node_type_permissions = array(
79
          'create ' . $name . ' content',
80
          'edit any ' . $name . ' content',
81
          'edit own ' . $name . ' content',
82
          'delete any ' . $name . ' content',
83
          'delete own ' . $name . ' content',
84
      );
85
      user_role_grant_permissions($role->rid, $node_type_permissions);
86
      $tasks_performed[] = "node type " . $name;
87
    }
88
  }
89 fa40a4af Andreas Kohlbecker
90 711242b7 Andreas Kohlbecker
  if(module_exists('extlinks')){
91
    $extlinks_permissions = array(
92
        'access extlinks content',
93 fa40a4af Andreas Kohlbecker
        'administer extlinks',
94 711242b7 Andreas Kohlbecker
    );
95
    user_role_grant_permissions($role->rid, $extlinks_permissions);
96
    $tasks_performed[] = 'permissions for extlinks';
97
  }
98
99 fa40a4af Andreas Kohlbecker
  foreach (filter_formats() as $key=>$format){
100 711242b7 Andreas Kohlbecker
    if($key == 'full_html' || $format->format == "Full HTML"){
101
      $formats_permissions = array(
102 fa40a4af Andreas Kohlbecker
          'use text format full_html'
103 711242b7 Andreas Kohlbecker
      );
104
      user_role_grant_permissions($role->rid, $formats_permissions);
105
      $tasks_performed[] = 'use text format full_html';
106
    }
107
  }
108
109
  // assure  'create url aliases' can be set
110
  if(!module_exists('path')){
111
    module_enable(array('path'), TRUE);
112 fa40a4af Andreas Kohlbecker
    $tasks_performed[] = 'module path enabled';
113 3e36c87c Andreas Kohlbecker
  }
114
  $other_permissions = array(
115
      'create url aliases',
116 711242b7 Andreas Kohlbecker
      'delete revisions',
117
      'revert revisions',
118 3e36c87c Andreas Kohlbecker
      'view own unpublished content',
119 fa40a4af Andreas Kohlbecker
      'flush caches'
120 711242b7 Andreas Kohlbecker
  );
121 3e36c87c Andreas Kohlbecker
  user_role_grant_permissions($role->rid, $other_permissions);
122 711242b7 Andreas Kohlbecker
  $tasks_performed[] = 'and other permissions';
123 3e36c87c Andreas Kohlbecker
124
  return "adding missing permissions for role CDM Admin: " . join(', ', $tasks_performed);
125
}
126 9c92cd84 Andreas Kohlbecker
127
128
/**
129
 * update for RELEASE 3.2.2:
130 86b65fa0 Andreas Kohlbecker
 *  - migrating variable cdm_dataportal_show_default_image to cdm_taxon_profile_image['show']
131 cc3c9807 Andreas Kohlbecker
 *  - enabling required module file
132 9c92cd84 Andreas Kohlbecker
 *  - enable new debug block for all dataportals
133
 *  - migrating variables for map settings
134
 */
135
function cdm_dataportal_update_7304() {
136
137
    module_enable(array('file'), TRUE);
138 86b65fa0 Andreas Kohlbecker
    $tasks_performed[] = 'module file enabled';
139
140
    if(!variable_get(CDM_TAXON_PROFILE_IMAGE, FALSE)){
141
      $cdm_taxon_profile_image_settings = unserialize(CDM_TAXON_PROFILE_IMAGE_DEFAULT);
142
      $cdm_taxon_profile_image_settings['show'] = variable_get('cdm_dataportal_show_default_image', 0);
143
      variable_set(CDM_TAXON_PROFILE_IMAGE, $cdm_taxon_profile_image_settings);
144
      variable_del('cdm_dataportal_show_default_image');
145
      $tasks_performed[] = 'migrating variable cdm_dataportal_show_default_image to cdm_taxon_profile_image[\'show\']';
146
    }
147
148
149
    // CDM web service debug block
150
    $cdm_ws_debug_block = array(
151
        'block' => array(
152
            'module' => 'cdm_api',
153
            'delta' => 'cdm_ws_debug',
154
            'theme' => NULL,
155
            'status' => 1,
156
            'weight' => -50,
157
            'region' => 'sidebar_first',
158
            'pages' => '',
159
            'cache' => -1,
160
        ),
161 917333b5 Andreas Kohlbecker
        'block_role' =>
162 86b65fa0 Andreas Kohlbecker
            array(
163
164 917333b5 Andreas Kohlbecker
        )
165
    );
166
167
    $admin_user = user_load(1);
168
169
    // harmonize cdm admin role names if needed
170
    $cdm_admin_role = user_role_load_by_name('CDM Admin');
171
    if(is_object($cdm_admin_role) && $cdm_admin_role->name !== 'CDM admin'){
172
      $cdm_admin_role->name = 'CDM admin';
173
      user_role_save($cdm_admin_role);
174
      $tasks_performed[] = $cdm_admin_role->name . ' role name harmonized';
175
    }
176
    $cdm_admin_role = user_role_load_by_name('CDM admin');
177
178
    if(is_object($cdm_admin_role)) {
179
      // make sure admin is member of role CDM admin
180
      if (!isset($admin_user->roles[$admin_role->rid])) {
181
        user_multiple_role_edit(array(1), 'add_role', $cdm_admin_role->rid);
182
        $tasks_performed[] = 'admin user (uid=1) added to role ' . $cdm_admin_role->name;
183
      }
184
      $cdm_ws_debug_block['block_role'][] =  array(
185
        'module' => 'cdm_api',
186
        'delta' => 'cdm_ws_debug',
187
        'rid' => $cdm_admin_role->rid
188
      );
189
    }
190
191
    $admin_role = user_role_load_by_name("admin"); // Drupal 5
192
193
    if(is_object($admin_role)){
194
      $admin_role->name == 'administrator';
195
      user_role_save($admin_role);
196
      $tasks_performed[] = 'administrator role name harmonized';
197
    } else {
198
      $admin_role = user_role_load_by_name("administrator"); // Drupal 7
199
    }
200
    if(is_object($admin_role)){
201
      // make sure admin is member of role admin
202
      if (!isset($admin_user->roles[$admin_role->rid])) {
203
        user_multiple_role_edit(array(1), 'add_role', $admin_role->rid);
204
        $tasks_performed[] = 'admin user (uid=1) added to role ' . $admin_role->name;
205
      }
206
      $cdm_ws_debug_block['block_role'][] =  array(
207
          'module' => 'cdm_api',
208
          'delta' => 'cdm_ws_debug',
209
          'rid' => $admin_role->rid
210
      );
211 86b65fa0 Andreas Kohlbecker
    }
212
213
    // clean up existing block configuration which might be set by drupal automatically, we need to override this
214
    db_delete('block')->condition('module', 'cdm_api')->execute();
215
    db_delete('block_role')->condition('module', 'cdm_api')->execute();
216
    // insert
217
    $block_insert = db_insert('block')->fields(array('module', 'delta', 'theme', 'status', 'weight', 'region', 'pages', 'cache'));
218
    $block_role_insert = db_insert('block_role')->fields(array('module', 'delta', 'rid'));
219
220
    $themes = system_list('theme');
221
    foreach ($themes as $theme) {
222
      if($theme->status == "1"){ // only for enabled themes
223
        $cdm_ws_debug_block['block']['theme'] = $theme->name;
224
        $block_insert->values($cdm_ws_debug_block['block']);
225
      }
226
    }
227
    foreach($cdm_ws_debug_block['block_role'] as $block_role){
228
      $block_role_insert->values($block_role);
229
    }
230
    $block_insert->execute();
231
    $block_role_insert->execute();
232
    $tasks_performed[] = 'CDM web service debug block enabled for \'CDM admin\' users in all themes';
233 9c92cd84 Andreas Kohlbecker
    $tasks_performed[] = _remove_variable('cdm_webservice_debug');
234 cc3c9807 Andreas Kohlbecker
    $tasks_performed[] = _remove_variable('cdm_webservice_isStub');
235
236
    /*
237
     *  migrating variables for map settings
238
     */
239
    $cdm_map_distribution = array();
240
241
    $cdm_map_distribution['width'] = variable_get('cdm_dataportal_geoservice_display_width', 390);
242
    $cdm_map_distribution['height'] = $cdm_map_distribution['width'] / 2;
243
    _remove_variable('cdm_dataportal_geoservice_display_width');
244
245
    $cdm_map_distribution['bbox'] = variable_get('cdm_dataportal_geoservice_bounding_box', '-180,-90,180,90');
246
    _remove_variable('cdm_dataportal_geoservice_bounding_box');
247
248
    $cdm_map_distribution['show_labels'] = variable_get('cdm_dataportal_geoservice_labels_on', FALSE);
249
    _remove_variable('cdm_dataportal_geoservice_labels_on');
250
251
    $cdm_map_distribution['caption'] = variable_get('cdm_dataportal_geoservice_map_caption', '');
252
    _remove_variable('cdm_dataportal_geoservice_map_caption');
253
254
    $cdm_map_distribution['distribution_opacity'] = variable_get('cdm_dataportal_geoservice_distributionOpacity', '0.5');
255
    _remove_variable('cdm_dataportal_geoservice_distributionOpacity');
256
257
    $cdm_map_distribution['mapType'] = variable_get('cdm_dataportal_map_openlayers', 1);
258
    _remove_variable('cdm_dataportal_map_openlayers');
259
260
    // imageMap
261
    $cdm_map_distribution['image_map'] = array();
262
    $cdm_map_distribution['image_map']['base_layer']= variable_get('map_base_layer', 'cyprusdivs');
263
    _remove_variable('map_base_layer');
264
265
    $cdm_map_distribution['image_map']['bg_color'] = variable_get('map_bg_color', '1874CD');
266
    _remove_variable('map_bg_color');
267
268
    $cdm_map_distribution['image_map']['layer_style'] = variable_get('map_base_layer_style', 'ffffff,606060,,');
269
    _remove_variable('map_base_layer_style');
270
271
    // OpenLayers
272
    $cdm_map_distribution['openlayers'] = array();
273
    $cdm_map_distribution['openlayers']['base_layers'] = variable_get('baselayers', array('osgeo_vmap0' => 'osgeo_vmap0', 'PREFERRED' => 'osgeo_vmap0'));
274
    _remove_variable('baselayers');
275
276
    $cdm_map_distribution['openlayers']['show_layer_switcher'] = variable_get('cdm_dataportal_geoservice_showLayerSwitcher', TRUE);
277
    _remove_variable('cdm_dataportal_geoservice_showLayerSwitcher');
278
279
    $cdm_map_distribution['legend'] = array();
280
    $cdm_map_distribution['legend']['show'] = variable_get('cdm_dataportal_geoservice_legend_on', TRUE);
281
    _remove_variable('cdm_dataportal_geoservice_legend_on');
282
283
    $cdm_map_distribution['legend']['opacity'] = variable_get('cdm_dataportal_geoservice_legendOpacity', '0.5');
284
    _remove_variable('cdm_dataportal_geoservice_legendOpacity');
285
286
    $cdm_map_distribution['legend']['font_size'] = variable_get('cdm_dataportal_geoservice_legend_font_size', 10);
287
    _remove_variable('cdm_dataportal_geoservice_legend_font_size');
288
289
    $cdm_map_distribution['legend']['font_style'] = variable_get('cdm_dataportal_geoservice_legend_font_style', FALSE);
290
    _remove_variable('cdm_dataportal_geoservice_legend_font_style');
291
292
    $cdm_map_distribution['legend']['icon_width'] = variable_get('cdm_dataportal_geoservice_legend_icon_width', 35);
293
    _remove_variable('cdm_dataportal_geoservice_legend_icon_width');
294
295
    $cdm_map_distribution['legend']['icon_height'] = variable_get('cdm_dataportal_geoservice_legend_icon_height', 15);
296
    _remove_variable('cdm_dataportal_geoservice_legend_icon_height');
297
298
    variable_set('cdm_map_distribution', $cdm_map_distribution);
299 9c92cd84 Andreas Kohlbecker
    $tasks_performed[] =  'variables for map settings migrated to new variable "cdm_map_distribution"';
300
301 3e36c87c Andreas Kohlbecker
    return  join(', ',$tasks_performed);
302
}
303 6657531f Andreas Kohlbecker
304 9438ad3a Andreas Kohlbecker
305
/**
306
 * Renames a persistent variable.
307
 *
308 6657531f Andreas Kohlbecker
 * @return
309
 *   A message string of the performed operation.
310
 */
311
function _rename_variable($old_name, $new_name) {
312
  $success = FALSE;
313
  $value = variable_get($old_name, FALSE);
314
  variable_del($old_name);
315
  if ($value !== FALSE) {
316
    variable_set($new_name, $value);
317
    $success = variable_get($new_name, FALSE) === $value;
318
  }
319
  else {
320
    $success = TRUE;
321 86b65fa0 Andreas Kohlbecker
  }
322 6657531f Andreas Kohlbecker
323
  return "Variable '$old_name' to '$new_name' renamed. ";
324
}
325 9438ad3a Andreas Kohlbecker
326
/**
327
 * Unsets a persistent variable.
328
 *
329
 * Calls variable_del() and returns a message string.
330
 *
331 6657531f Andreas Kohlbecker
 * @return
332
 *   A message string of the performed operation.
333
 */
334 86b65fa0 Andreas Kohlbecker
function _remove_variable($name) {
335 6657531f Andreas Kohlbecker
  variable_del($name);
336
  return "Variable '$name' removed. ";
337
}
338 9438ad3a Andreas Kohlbecker
339
/**
340
 * Sets a persistent variable.
341
 *
342
 * Calls variable_set() and returns a message string.
343
 *
344 6657531f Andreas Kohlbecker
 * @return
345
 *   A message string of the performed operation.
346
 */
347 86b65fa0 Andreas Kohlbecker
function _create_variable($name, $value) {
348 6657531f Andreas Kohlbecker
  variable_set($name, $value);
349
  return "Variable '$name' created with value: '$value'. ";
350
}
351 9438ad3a Andreas Kohlbecker
352
/**
353
 * Overwrites a persistent variable.
354
 *
355
 * Calls _create_variable() and returns a message string.
356
 *
357 6657531f Andreas Kohlbecker
 * @return
358
 *   A message string of the performed operation.
359
 */
360
function _modify_variable($name, $value_override) {
361
  /*
362
   * FIXME take care for correct handling of tree variables
363
   * for example description_gallery contains the array:
364
   * Array
365
   (
366
   [cdm_dataportal_show_thumbnail_captions] => 1
367
   [cdm_dataportal_media_maxextend] => 120
368
   [cdm_dataportal_media_cols] => 4
369
   )
370
   * -----> solutions merge arrays !!!
371
   */
372 661b79ac Andreas Kohlbecker
  return _create_variable($name, $value_override);
373
}
374