protected_node.install in Protected Node 7
Same filename and directory in other branches
Install, update and uninstall functions for the protected_node module.
File
protected_node.installView source
<?php
/**
 * @file
 * Install, update and uninstall functions for the protected_node module.
 */
/**
 * Implements hook_schema().
 */
function protected_node_schema() {
  $schema['protected_nodes'] = array(
    'description' => 'The table to store the node - password hash pairs.',
    'fields' => array(
      'nid' => array(
        'description' => 'The primary identifier for a node',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'protected_node_is_protected' => array(
        'description' => 'Whether this node is currently protected.',
        'type' => 'int',
        'size' => 'small',
        'not null' => TRUE,
        'default' => 0,
      ),
      'protected_node_passwd' => array(
        'description' => 'The sha1/sha256 hashed password for the given node.',
        'type' => 'char',
        'length' => 128,
        'not null' => TRUE,
        'default' => '',
      ),
      'protected_node_passwd_changed' => array(
        'description' => 'Date when the password was last changed',
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'protected_node_show_title' => array(
        'description' => 'Whether the title of the node should also be protected.',
        'type' => 'int',
        'size' => 'small',
        'not null' => TRUE,
        'default' => 0,
      ),
      'protected_node_emails' => array(
        'description' => 'List of email addresses which received the last notification.',
        'type' => 'text',
        'size' => 'normal',
      ),
      'protected_node_hint' => array(
        'description' => 'A hint about the password on this node.',
        'type' => 'text',
      ),
    ),
    'indexes' => array(
      'protected_is_protected' => array(
        'protected_node_is_protected',
      ),
      'protected_passwd' => array(
        'protected_node_passwd',
      ),
    ),
    'primary key' => array(
      'nid',
    ),
  );
  return $schema;
}
/**
 * Implements hook_install().
 */
function protected_node_install() {
  db_update('system')
    ->fields(array(
    'weight' => 80,
  ))
    ->condition('name', 'protected_node')
    ->condition('type', 'module')
    ->execute();
}
/**
 * Implements hook_uninstall().
 */
function protected_node_uninstall() {
  db_delete('variable')
    ->condition('name', 'protected_node_%%', 'LIKE')
    ->execute();
}
/**
 * Adds a protected_node_emails field to the protected_nodes table.
 */
function protected_node_update_7100() {
  db_add_field('protected_nodes', 'protected_node_emails', array(
    'type' => 'text',
    'size' => 'normal',
    'description' => 'List of email addresses which received the last notification.',
  ));
}
/**
 * Change size of protected_node_passwd from 40 to 128.
 */
function protected_node_update_7101() {
  db_change_field('protected_nodes', 'protected_node_passwd', 'protected_node_passwd', array(
    'description' => 'The sha1/sha256 hashed password for the given node.',
    'type' => 'char',
    'length' => 128,
    'not null' => TRUE,
    'default' => '',
  ));
}
/**
 * Manage "view protected content" permission deletion.
 */
function protected_node_update_7102() {
  // Get the rids with "view protected content".
  $rids = db_select('role_permission')
    ->fields('role_permission', array(
    'rid',
  ))
    ->condition('permission', 'view protected content')
    ->condition('module', 'protected_node')
    ->execute()
    ->fetchCol();
  // Get all permissions in the form of $permission => $module array.
  $permissions = user_permission_get_modules();
  if (isset($permissions['bypass password protection'])) {
    foreach ($rids as $rid) {
      // Give "bypass password protection" to roles with
      // "view protected content".
      user_role_grant_permissions($rid, array(
        'bypass password protection',
      ));
      // Remove "view protected content" from database.
      user_role_revoke_permissions($rid, array(
        'view protected content',
      ));
    }
  }
}
/**
 * Manage reorganisation of permissions.
 */
function protected_node_update_7103() {
  // Permission: access protected content.
  // Get the rids with "access protected content".
  $rids = db_select('role_permission')
    ->fields('role_permission', array(
    'rid',
  ))
    ->condition('permission', 'access protected content')
    ->condition('module', 'protected_node')
    ->execute()
    ->fetchCol();
  foreach ($rids as $rid) {
    // Give "access protected node password form" to roles with
    // "access protected content".
    user_role_grant_permissions($rid, array(
      'access protected node password form',
    ));
    // Remove "access protected content" from database.
    user_role_revoke_permissions($rid, array(
      'access protected content',
    ));
  }
  // Get all permissions in the form of $permission => $module array.
  $permissions = user_permission_get_modules();
  // This case treats users that were not affected in protected_node_update_7102
  // because 'bypass password protection' does no more exists in code.
  if (!isset($permissions['bypass password protection'])) {
    // Permission: view protected content.
    // Get the rids with "view protected content".
    $rids = db_select('role_permission')
      ->fields('role_permission', array(
      'rid',
    ))
      ->condition('permission', 'view protected content')
      ->condition('module', 'protected_node')
      ->execute()
      ->fetchCol();
    foreach ($rids as $rid) {
      // Give "access protected node overview page" to roles with
      // "view protected content".
      user_role_grant_permissions($rid, array(
        'access protected node overview page',
      ));
      // Give "edit protected content" to roles with "view protected content".
      user_role_grant_permissions($rid, array(
        'edit protected content',
      ));
      // Remove "bypass password protection" from database.
      user_role_revoke_permissions($rid, array(
        'bypass password protection',
      ));
    }
  }
  // Permission: bypass password protection.
  // Get the rids with "bypass password protection".
  $rids = db_select('role_permission')
    ->fields('role_permission', array(
    'rid',
  ))
    ->condition('permission', 'bypass password protection')
    ->condition('module', 'protected_node')
    ->execute()
    ->fetchCol();
  foreach ($rids as $rid) {
    // Give "access protected node overview page" to roles with
    // "bypass password protection".
    user_role_grant_permissions($rid, array(
      'access protected node overview page',
    ));
    // Give "view protected content" to roles with "bypass password protection".
    user_role_grant_permissions($rid, array(
      'view protected content',
    ));
    // Give "edit protected content" to roles with "bypass password protection".
    user_role_grant_permissions($rid, array(
      'edit protected content',
    ));
    // Remove "bypass password protection" from database.
    user_role_revoke_permissions($rid, array(
      'bypass password protection',
    ));
  }
  // Permission: edit any password.
  // Get the rids with "edit any password".
  $rids = db_select('role_permission')
    ->fields('role_permission', array(
    'rid',
  ))
    ->condition('permission', 'edit any password')
    ->condition('module', 'protected_node')
    ->execute()
    ->fetchCol();
  foreach ($rids as $rid) {
    // Give "edit any protected node password" to roles with
    // "edit any password".
    user_role_grant_permissions($rid, array(
      'edit any protected node password',
    ));
    // Remove "edit any password" from database.
    user_role_revoke_permissions($rid, array(
      'edit any password',
    ));
  }
}Functions
| Name   | Description | 
|---|---|
| protected_node_install | Implements hook_install(). | 
| protected_node_schema | Implements hook_schema(). | 
| protected_node_uninstall | Implements hook_uninstall(). | 
| protected_node_update_7100 | Adds a protected_node_emails field to the protected_nodes table. | 
| protected_node_update_7101 | Change size of protected_node_passwd from 40 to 128. | 
| protected_node_update_7102 | Manage "view protected content" permission deletion. | 
| protected_node_update_7103 | Manage reorganisation of permissions. | 
