You are here

nodeblock.install in Nodeblock 7

Define module install logic.

File

nodeblock.install
View source
<?php

/**
 * @file
 * Define module install logic.
 */

/**
 * Implements hook_schema().
 */
function nodeblock_schema() {
  $schema['nodeblock'] = array(
    'description' => 'The base table for nodeblock.module.',
    'fields' => array(
      'nid' => array(
        'description' => 'The primary identifier for a node.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'enabled' => array(
        'description' => 'A flag indicating whether a block should be created.',
        'type' => 'int',
        'size' => 'tiny',
        'not null' => TRUE,
        'default' => 1,
      ),
      'machine_name' => array(
        'description' => 'The machine name for a block.',
        'type' => 'varchar',
        'length' => 32,
        'not null' => TRUE,
      ),
      'block_title' => array(
        'description' => 'The block title for a block.',
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
      ),
      'view_mode' => array(
        'description' => 'The view mode used to render the node.',
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
      ),
      'node_link' => array(
        'description' => 'Whether the node links should be shown.',
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '0',
      ),
      'comment_link' => array(
        'description' => 'Whether the comment links should be shown.',
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '0',
      ),
      'translation_fallback' => array(
        'description' => 'A flag indicating whether the translation fallback is enabled.',
        'type' => 'int',
        'size' => 'tiny',
        'not null' => TRUE,
        'default' => 0,
      ),
    ),
    'primary key' => array(
      'nid',
    ),
    'unique keys' => array(
      'machine_name' => array(
        'machine_name',
      ),
    ),
  );
  return $schema;
}

/**
 * Placeholder for potential Drupal 6 upgrade path
 */
function nodeblock_update_7100() {
}

/**
 * Remove variable settings for nodes where blocks are not enabled.
 */
function nodeblock_update_7101() {
  $variables = variable_initialize();
  foreach ($variables as $name => $value) {
    if (strpos($name, 'nodeblock') !== FALSE) {
      if (strpos($name, 'nodeblock_block_') !== FALSE) {
        $blocks[str_replace('nodeblock_block_', '', $name)] = $name;
      }
      elseif (strpos($name, 'nodeblock_comment_link_') === FALSE && strpos($name, 'nodeblock_node_link_') === FALSE && strpos($name, 'nodeblock_view_mode_') === FALSE) {
        if ((bool) $value) {
          $content_types[] = str_replace('nodeblock_', '', $name);
        }
      }
    }
  }
  if (!empty($content_types) && !empty($blocks)) {
    $query = db_select('node', 'n')
      ->fields('n', array(
      'nid',
    ))
      ->condition('n.type', $content_types);
    $result = $query
      ->execute()
      ->fetchAll();
    if (!empty($result)) {
      foreach ($result as $value) {
        $nids[$value->nid] = $value->nid;
      }
      if (!empty($nids)) {
        $blocks = array_diff_key($blocks, $nids);
        if (!empty($blocks)) {
          foreach ($blocks as $name) {
            variable_del($name);
          }
        }
      }
    }
  }
}

/**
 * Adding a new nodeblock table and create entries for all existing nodeblocks.
 */
function nodeblock_update_7102() {
  module_load_include('module', 'nodeblock');
  if (!db_table_exists('nodeblock')) {
    $schema = nodeblock_schema();
    db_create_table('nodeblock', $schema['nodeblock']);
    $types = node_type_get_types();
    $enabled_types = array();
    foreach ($types as $type_name => $type) {
      if (nodeblock_type_enabled($type_name)) {
        $enabled_types[] = $type_name;
      }
    }
    if (count($enabled_types)) {
      $results = db_select('node', 'n')
        ->fields('n', array(
        'nid',
      ))
        ->condition('type', $enabled_types)
        ->execute()
        ->fetchCol();
      $defaults = array(
        'comment_link' => 'node_block_default',
        'node_link' => 'node_block_default',
        'view_mode' => 'node_block_default',
      );
      foreach ($results as $nid) {
        $settings = variable_get('nodeblock_block_' . $nid, $defaults);
        $settings = array_merge($defaults, $settings);
        if (isset($settings['teaser']) && $settings['teaser'] == 1) {
          $settings['view_mode'] == 'teaser';
        }
        if (isset($settings['links']) && $settings['links'] == 1) {
          $settings['node_link'] = 1;
          $settings['comment_link'] = 1;
        }
        db_insert('nodeblock')
          ->fields(array(
          'nid',
          'machine_name',
          'view_mode',
          'node_link',
          'comment_link',
          'translation_fallback',
        ))
          ->values(array(
          $nid,
          $nid,
          $settings['view_mode'],
          $settings['node_link'],
          $settings['comment_link'],
          variable_get('nodeblock_translation_fallback_' . $nid, 0),
        ))
          ->execute();
        variable_del('nodeblock_translation_fallback_' . $nid);
        variable_del('nodeblock_block_' . $nid);
      }
    }
  }
}

/**
 * Add new block title column in db.
 */
function nodeblock_update_7103() {
  module_load_include('module', 'nodeblock');
  if (!db_field_exists('nodeblock', 'block_title')) {
    db_add_field('nodeblock', 'block_title', array(
      'description' => 'The block title for a block.',
      'type' => 'varchar',
      'length' => 255,
      'not null' => TRUE,
      'default' => '',
    ));
  }
  $types = node_type_get_types();
  $enabled_types = array();
  foreach ($types as $type_name => $type) {
    if (nodeblock_type_enabled($type_name)) {
      $enabled_types[] = $type_name;
    }
  }
  if (count($enabled_types)) {
    $results = db_select('node', 'n')
      ->fields('n', array(
      'nid',
      'title',
    ))
      ->condition('type', $enabled_types)
      ->execute();
    foreach ($results as $node) {
      db_update('nodeblock')
        ->fields(array(
        'block_title' => $node->title,
      ))
        ->condition('nid', $node->nid)
        ->execute();
    }
  }
}

/**
 * `Show the Block title field in the Node Block fieldset` default value, change schema weight.
 */
function nodeblock_update_7104() {
  $types = node_type_get_types();
  foreach ($types as $type_name => $type) {
    if ($var = variable_get('nodeblock_node_overrides_' . $type_name)) {
      $var[] = 'block_title_in_fieldset';
      variable_set('nodeblock_node_overrides_' . $type_name, $var);
    }
  }
}

/**
 * Implements hook_uninstall().
 */
function nodeblock_uninstall() {
  $types = node_type_get_types();
  foreach ($types as $type_name => $type) {
    if (variable_get('nodeblock_' . $type_name, 0)) {
      variable_del('nodeblock_' . $type_name);
      variable_del('nodeblock_comment_link_' . $type_name);
      variable_del('nodeblock_node_link_' . $type_name);
      variable_del('nodeblock_view_mode_' . $type_name);
      variable_del('nodeblock_node_overrides_' . $type_name);
      variable_del('nodeblock_node_override_block_available_' . $type_name);
      variable_del('nodeblock_node_override_block_title_field_' . $type_name);
    }
  }
  db_delete('block')
    ->condition('module', 'nodeblock')
    ->execute();
  db_delete('block_role')
    ->condition('module', 'nodeblock')
    ->execute();
  variable_del('nodeblock_dangerous_force_block_caching');
  variable_del('nodeblock_table_exists');
}

Functions

Namesort descending Description
nodeblock_schema Implements hook_schema().
nodeblock_uninstall Implements hook_uninstall().
nodeblock_update_7100 Placeholder for potential Drupal 6 upgrade path
nodeblock_update_7101 Remove variable settings for nodes where blocks are not enabled.
nodeblock_update_7102 Adding a new nodeblock table and create entries for all existing nodeblocks.
nodeblock_update_7103 Add new block title column in db.
nodeblock_update_7104 `Show the Block title field in the Node Block fieldset` default value, change schema weight.