summaryrefslogtreecommitdiff
path: root/modules/dashboard/dashboard.install
blob: 1a80993c491c802d888ff7e19244c11838e79f2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
// $Id$

/**
 * @file
 * Install, update and uninstall functions for the dashboard module.
 */

/**
 * Implements hook_disable().
 *
 * Stash a list of blocks enabled on the dashboard, so they can be re-enabled
 * if the dashboard is re-enabled. Then disable those blocks, since the
 * dashboard regions will no longer be defined.
 */
function dashboard_disable() {
  // Stash a list of currently enabled blocks.
  $stashed_blocks = array();

  $result = db_select('block', 'b')
    ->fields('b', array('module', 'delta', 'region'))
    ->condition('b.region', dashboard_regions(), 'IN')
    ->execute();

  foreach ($result as $block) {
    $stashed_blocks[] = array(
      'module' => $block->module,
      'delta' => $block->delta,
      'region' => $block->region,
    );
  }
  variable_set('dashboard_stashed_blocks', $stashed_blocks);

  // Disable the dashboard blocks.
  db_update('block')
    ->fields(array(
      'status' => 0,
      'region' => BLOCK_REGION_NONE,
    ))
    ->condition('region', dashboard_regions(), 'IN')
    ->execute();
}

/**
 * Implements hook_enable().
 *
 * Restores blocks to the dashboard that were there when the dashboard module
 * was disabled.
 */
function dashboard_enable() {
  global $theme_key;
  if (!$stashed_blocks = variable_get('dashboard_stashed_blocks')) {
    return;
  }
  if (!$admin_theme = variable_get('admin_theme')) {
    drupal_theme_initialize();
    $admin_theme = $theme_key;
  }
  foreach ($stashed_blocks as $block) {
    db_update('block')
      ->fields(array(
        'status' => 1,
        'region' => $block['region']
      ))
      ->condition('module', $block['module'])
      ->condition('delta', $block['delta'])
      ->condition('theme', $admin_theme)
      ->condition('status', 0)
      ->execute();
  }
  variable_del('dashboard_stashed_blocks');
}

/**
 * Implements hook_uninstall().
 */
function dashboard_uninstall() {
  variable_del('dashboard_stashed_blocks');
}