home | career | drupal | java | mac | mysql | perl | php | scala | uml | unix

Drupal example source code file (captcha.install)

This example Drupal source code file (captcha.install) is included in the DevDaily.com "Drupal Source Code Warehouse" project. The intent of this project is to help you "Learn Drupal by Example".

PHP - Drupal tags/keywords

array, default, description, form_id, function, items, not, null, of, the, true, type, varchar

The captcha.install Drupal example source code

<?php
// $Id: captcha.install,v 1.11.2.8 2011/02/03 23:43:56 soxofaan Exp $

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

/**
 * Implementation of hook_schema().
 */
function captcha_schema() {
  // Table for positions and types of the challenges.
  $schema['captcha_points'] = array(
    'description' => 'This table describes which challenges should be added to which forms.',
    'fields' => array(
      'form_id' => array(
        'description' => 'The form_id of the form to add a CAPTCHA to.',
        'type' => 'varchar',
        'length' => 128,
        'not null' => TRUE,
        'default' => '',
      ),
      'module' => array(
        'description' => 'The module that provides the challenge.',
        'type' => 'varchar',
        'length' => 64,
      ),
      'captcha_type' => array(
        'description' => 'The challenge type to use.',
        'type' => 'varchar',
        'length' => 64,
      ),
    ),
    'primary key' => array('form_id'),
  );
  // Table for the CAPTCHA sessions.
  $schema['captcha_sessions'] = array(
    'description' => 'Stores the data about CAPTCHA sessions (solution, IP address, timestamp, ...).',
    'fields' => array(
      'csid' => array(
        'description' => 'CAPTCHA session ID.',
        'type' => 'serial',
        'not null' => TRUE,
      ),
      'token' => array(
        'description' => 'One time CAPTCHA token.',
        'type' => 'varchar',
        'length' => 64,
        'not null' => FALSE,
      ),
      'uid' => array(
        'description' => "User's {users}.uid.",
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'sid' => array(
        'description' => "Session ID of the user.",
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => '',
      ),
      'ip_address' => array(
        'description' => 'IP address of the visitor.',
        'type' => 'varchar',
        'length' => 128,
        'not null' => FALSE,
      ),
      'timestamp' => array(
        'description' => 'A Unix timestamp indicating when the challenge was generated.',
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'form_id' => array(
        'description' => 'The form_id of the form where the CAPTCHA is added to.',
        'type' => 'varchar',
        'length' => 128,
        'not null' => TRUE,
      ),
      'solution' => array(
        'description' => 'Solution of the challenge.',
        'type' => 'varchar',
        'length' => 128,
        'not null' => TRUE,
        'default' => '',
      ),
      'status' => array(
        'description' => 'Status of the CAPTCHA session (unsolved, solved, ...)',
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'attempts' => array(
        'description' => 'The number of attempts.',
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      )
    ),
    'primary key' => array('csid'),
    'indexes' => array(
      'csid_ip' => array('csid', 'ip_address'),
    ),
  );

  return $schema;
}

/**
 * Implementation of hook_requirements().
 */
function captcha_requirements($phase) {
  $requirements = array();
  $t = get_t();
  if ($phase == 'runtime') {
    // Show the wrong response counter in the status report.
    $requirements['captcha_wrong_response_counter'] = array(
      'title' => $t('CAPTCHA'),
      'value' => format_plural(
        variable_get('captcha_wrong_response_counter', 0),
        'Already 1 blocked form submission',
        'Already @count blocked form submissions'
      ),
      'severity' => REQUIREMENT_INFO,
    );
  }
  return $requirements;
}

/**
 * Implementation of hook_install().
 */
function captcha_install() {
  $t = get_t();
  drupal_install_schema('captcha');

  // Insert some default CAPTCHA points.
  $form_ids = array(
    'comment_form',
    'contact_mail_user', 'contact_mail_page',
    'user_register', 'user_pass', 'user_login', 'user_login_block',
    'forum_node_form'
  );
  foreach ($form_ids as $form_id) {
    db_query("INSERT INTO {captcha_points} (form_id, module, captcha_type) VALUES ('%s', NULL, NULL)", $form_id);
  }

  // Be friendly to your users: what to do after install?
  drupal_set_message($t('You can now <a href="!captcha_admin">configure the CAPTCHA module</a> for your site.',
    array('!captcha_admin' => url('admin/user/captcha'))), 'status');

  // Explain to users that page caching may be disabled.
  if (variable_get('cache', CACHE_DISABLED) != CACHE_DISABLED) {
    drupal_set_message($t('Note that the CAPTCHA module disables <a href="!performance_admin">page caching</a> of pages that include a CAPTCHA challenge.',
      array('!performance_admin' => url('admin/settings/performance'))), 'warning');
  }

}

/**
 * Implementation of hook_uninstall().
 */
function captcha_uninstall() {
  drupal_uninstall_schema('captcha');
  db_query("DELETE FROM {variable} WHERE name LIKE 'captcha_%'");
  cache_clear_all('variables', 'cache');
}

/**
 * Implementation of hook_update_N()
 */
function captcha_update_1() {
  $items = array();
  switch ($GLOBALS['db_type']) {
    case 'mysql':
    case 'mysqli':
      $items[] = update_sql("CREATE TABLE {captcha_points} (
        form_id varchar(128) NOT NULL,
        module varchar(64) default NULL,
        type varchar(64) default NULL,
        PRIMARY KEY (form_id)
        ) /*!40100 DEFAULT CHARACTER SET utf8 */;"
      );
      $succes = TRUE;
      break;
    case 'pgsql':
      $items[] = update_sql("CREATE TABLE {captcha_points} (
        form_id varchar(128) NOT NULL,
        module varchar(64) default NULL,
        type varchar(64) default NULL,
        PRIMARY KEY (form_id)
        );"
      );
      $succes = TRUE;
      break;
    default:
      drupal_set_message(t('Unsupported database.'), 'error');
      $succes = FALSE;
      break;
  }
  if ($succes) {
    // insert some defaults
    $form_ids = array('comment_form', 'contact_mail_user', 'contact_mail_page',
      'user_register', 'user_pass');
    foreach ($form_ids as $form_id) {
      $items[] = update_sql("INSERT INTO {captcha_points} (form_id, module, type) VALUES ('$form_id', NULL, NULL)");
    }
  }
  return $items;
}

/**
 * Implementation of hook_update_N()
 */
function captcha_update_2() {
  $items = array();
  // insert some defaults
  $form_ids = array('user_login', 'user_login_block');
  foreach ($form_ids as $form_id) {
    $items[] = update_sql("INSERT INTO {captcha_points} (form_id, module, type) VALUES ('$form_id', NULL, NULL)");
  }
  return $items;
}

/**
 * Implementation of hook_update_N()
 */
function captcha_update_6200() {
  $items = array();

  // Table for the CAPTCHA sessions.
  $schema['captcha_sessions'] = array(
    'description' => 'Stores the data about CAPTCHA sessions (solution, IP address, timestamp, ...).',
    'fields' => array(
      'csid' => array(
        'description' => 'CAPTCHA session ID.',
        'type' => 'serial',
        'not null' => TRUE,
      ),
      'uid' => array(
        'description' => "User's {users}.uid.",
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'sid' => array(
        'description' => "Session ID of the user.",
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => '',
      ),
      'ip_address' => array(
        'description' => 'IP address of the visitor.',
        'type' => 'varchar',
        'length' => 128,
        'not null' => FALSE,
      ),
      'timestamp' => array(
        'description' => 'A Unix timestamp indicating when the challenge was generated.',
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'form_id' => array(
        'description' => 'The form_id of the form where the CAPTCHA is added to.',
        'type' => 'varchar',
        'length' => 128,
        'not null' => TRUE,
      ),
      'solution' => array(
        'description' => 'Solution of the challenge.',
        'type' => 'varchar',
        'length' => 128,
        'not null' => TRUE,
        'default' => '',
      ),
      'status' => array(
        'description' => 'Status of the CAPTCHA session (unsolved, solved, ...)',
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'attempts' => array(
        'description' => 'The number of attempts.',
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      )
    ),
    'primary key' => array('csid'),
    'indexes' => array(
      'csid_ip' => array('csid', 'ip_address'),
    ),
  );

  db_create_table($items, 'captcha_sessions', $schema['captcha_sessions']);

  return $items;
}

/**
 * Implementation of hook_update_N()
 * Change the captcha points with the old text CAPTCHA, which was
 * removed from the 6.x-2.x branch, to the simple math CAPTCHA.
 */
function captcha_update_6201() {
  $items = array();
  $items[] = update_sql("UPDATE {captcha_points} SET module = 'captcha', type = 'Math' WHERE module = 'text_captcha' AND type = 'Text';");
  return $items;
}


/**
 * Implementation of hook_update_N()
 * Add a CAPTCHA token column to captcha_sessions table.
 */
function captcha_update_6202() {
  $ret = array();
  db_add_column($ret, 'captcha_sessions', 'token', 'varchar(64)');
  return $ret;
}


/**
 * Implementation of hook_update_N()
 * Rename the type field to captcha_type in captcha_points.
 */
function captcha_update_6203() {
  $ret = array();
  db_change_field($ret, 'captcha_points', 'type', 'captcha_type', array('type' => 'varchar', 'length' => 64));
  return $ret;
}

Other Drupal examples (source code examples)

Here is a short list of links related to this Drupal captcha.install source code file:

new blog posts

"Drupal" is a registered trademark of Dries Buytaert.

my drupal tutorials and examples  

Copyright 1998-2016 Alvin Alexander, alvinalexander.com
All Rights Reserved.

Beginning in 2016, a portion of the proceeds from pages under the '/drupal-code-examples/' URI will be donated to charity.