password_policy.install in Password Policy 6
Same filename and directory in other branches
File module installation and upgrade code.
File
password_policy.installView source
<?php
/**
* @file
* File module installation and upgrade code.
*/
/**
* Implements hook_schema().
*/
function password_policy_schema() {
return array(
'password_policy' => array(
'description' => "Stores password policies.",
'fields' => array(
'pid' => array(
'description' => "Primary Key: Unique password policy ID.",
'type' => 'serial',
'not null' => TRUE,
),
'name' => array(
'description' => "The name of the policy.",
'type' => 'varchar',
'length' => 64,
'not null' => TRUE,
'default' => '',
),
'description' => array(
'description' => "The description of the policy.",
'type' => 'varchar',
'length' => 255,
'default' => '',
),
'enabled' => array(
'description' => "Whether the policy is enabled.",
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'size' => 'tiny',
),
'policy' => array(
'description' => "The policy's serialized data.",
'type' => 'varchar',
'length' => 1024,
'not null' => TRUE,
'default' => '',
),
'created' => array(
'description' => "Timestamp for when the policy was created.",
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'expiration' => array(
'description' => "The passwords will expire after this number of days.",
'type' => 'int',
),
'warning' => array(
'description' => "Comma separated list of days when warning is sent out.",
'type' => 'varchar',
'length' => 64,
),
'weight' => array(
'description' => "Weight of the policy, used to order active policies.",
'type' => 'int',
'size' => 'tiny',
'not null' => TRUE,
'default' => 0,
),
),
'primary key' => array(
'pid',
),
'unique keys' => array(
'name' => array(
'name',
),
),
),
'password_policy_history' => array(
'description' => "Stores users' old password hashes.",
'fields' => array(
'pid' => array(
'description' => "Primary Key: Unique password policy users ID.",
'type' => 'serial',
'not null' => TRUE,
),
'uid' => array(
'description' => "User's {users}.uid.",
'type' => 'int',
'not null' => TRUE,
),
'pass' => array(
'description' => "User's password (hashed).",
'type' => 'varchar',
'length' => 128,
'not null' => TRUE,
),
'created' => array(
'description' => "Timestamp for when the policy was created.",
'type' => 'int',
'not null' => TRUE,
),
),
'primary key' => array(
'pid',
),
'indexes' => array(
'uid' => array(
'uid',
),
),
),
'password_policy_expiration' => array(
'description' => 'Stores users password expiration data.',
'fields' => array(
'pid' => array(
'description' => "Primary Key: Unique password policy expirations ID.",
'type' => 'serial',
'not null' => TRUE,
),
'uid' => array(
'description' => "User's {users}.uid.",
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'warning' => array(
'description' => "Timestamp for when the warning was shown.",
'type' => 'int',
),
'blocked' => array(
'description' => "Timestamp for when the user was blocked.",
'type' => 'int',
),
'unblocked' => array(
'description' => "Timestamp for when the user was unblocked.",
'type' => 'int',
),
),
'primary key' => array(
'pid',
),
'indexes' => array(
'uid' => array(
'uid',
),
),
),
'password_policy_force_change' => array(
'description' => 'Forced password reset status.',
'fields' => array(
'uid' => array(
'type' => 'int',
'not null' => TRUE,
),
'force_change' => array(
'type' => 'int',
'default' => 0,
),
),
'indexes' => array(
'uid' => array(
'uid',
),
),
),
'password_policy_role' => array(
'description' => "Links policies with roles.",
'fields' => array(
'rid' => array(
'description' => "Role ID.",
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'pid' => array(
'description' => "Policy ID.",
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'name' => array(
'description' => "The name of the policy.",
'type' => 'varchar',
'length' => 64,
'not null' => TRUE,
'default' => '',
),
),
'primary key' => array(
'rid',
'pid',
),
'unique keys' => array(
'name' => array(
'rid',
'name',
),
),
),
);
return $schema;
}
/**
* Implements hook_enable().
*/
function password_policy_enable() {
drupal_set_message(t('Password policy module successfully installed. Please review the available <a href="@settings">configuration settings</a>.', array(
'@settings' => url('admin/settings/password_policy'),
)));
}
/**
* Implements hook_install().
*/
function password_policy_install() {
drupal_install_schema('password_policy');
db_query('INSERT INTO {password_policy_force_change} (uid) SELECT DISTINCT uid FROM {users} WHERE uid > 0');
}
/**
* Implements hook_uninstall().
*/
function password_policy_uninstall() {
drupal_uninstall_schema('password_policy');
variable_del('password_policy_admin');
variable_del('password_policy_begin');
variable_del('password_policy_block');
variable_del('password_policy_show_restrictions');
variable_del('password_policy_warning_subject');
variable_del('password_policy_warning_body');
variable_del('password_policy_new_login_change');
variable_del('password_policy_change_url');
}
function password_policy_update_6000() {
$ret = array();
db_add_field($ret, 'password_policy', 'weight', array(
'description' => t("Weight of the policy, used to order active policies."),
'type' => 'int',
'size' => 'tiny',
'not null' => TRUE,
'default' => 0,
));
db_create_table($ret, 'password_policy_role', array(
'description' => t("Links policies with roles."),
'fields' => array(
'rid' => array(
'description' => t("Role ID."),
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'pid' => array(
'description' => t("Policy ID."),
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
),
'primary key' => array(
'rid',
'pid',
),
));
// Ensure existing policies are active for all roles.
$result = db_query("SELECT pid FROM {password_policy}");
while ($row = db_fetch_object($result)) {
$ret[] = update_sql("INSERT INTO {password_policy_role} (pid, rid) VALUES (" . $row->pid . ", " . DRUPAL_AUTHENTICATED_RID . ")");
$ret[] = update_sql("INSERT INTO {password_policy_role} (pid, rid) VALUES (" . $row->pid . ", " . DRUPAL_ANONYMOUS_RID . ")");
}
return $ret;
}
function password_policy_update_6001() {
$ret = array();
db_create_table($ret, 'password_policy_force_change', array(
'description' => t('Forced password reset status.'),
'fields' => array(
'uid' => array(
'type' => 'int',
'not null' => TRUE,
),
'force_change' => array(
'type' => 'int',
'default' => 0,
),
),
'indexes' => array(
'uid' => array(
'uid',
),
),
));
$ret[] = update_sql('INSERT INTO {password_policy_force_change} (uid) SELECT DISTINCT uid FROM {users} WHERE uid > 0');
return $ret;
}
/**
* Fix for http://drupal.org/node/583902.
*/
function password_policy_update_6002() {
$ret = array();
db_change_field($ret, 'password_policy', 'policy', 'policy', array(
'description' => t('The serialized policy data'),
'type' => 'varchar',
'length' => 1024,
'not null' => TRUE,
'default' => '',
));
return $ret;
}
/**
* Make sure name on password_policy is unique for exportables (features)
*/
function password_policy_update_6003() {
$ret = array();
db_add_unique_key($ret, 'password_policy', 'name', array(
'name',
));
return $ret;
}
/**
* Make sure name column on password_policy_role for exportables (features)
*/
function password_policy_update_6004() {
$ret = array();
db_add_field($ret, 'password_policy_role', 'name', array(
'type' => 'varchar',
'length' => 64,
'not null' => TRUE,
'default' => '',
));
return $ret;
}
/**
* Make sure name column on password_policy_role is set with corrsponding name
*/
function password_policy_update_6005() {
$ret = array();
// update name based on name from password_policy table where pid's match
// update password_policy_role pr, password_policy
// set pr.name = pp.name
// where pr.pid = pp.pid;
$ret[] = update_sql("UPDATE {password_policy_role} pr SET name = (SELECT name FROM {password_policy} pp WHERE pr.pid = pp.pid)");
return $ret;
}
/**
* Add unique key on password_policy_role for exportables (rid,name)
*/
function password_policy_update_6006() {
$ret = array();
// could drop past primary key, and add new primary key but this
// works for now leaving old primary in place
db_add_unique_key($ret, 'password_policy_role', 'name', array(
'rid',
'name',
));
return $ret;
}
/**
* Notify of change to username constraint behavior.
*/
function password_policy_update_6100() {
return array(
array(
'success' => TRUE,
'query' => t('The username constraint has changed to disallow passwords containing the username in addition to passwords matching the username.'),
),
);
}
/**
* Increase length of {password_policy_history}.pass to support phpass.
*/
function password_policy_update_6101() {
$ret = array();
db_change_field($ret, 'password_policy_history', 'pass', 'pass', array(
'type' => 'varchar',
'length' => 128,
'not null' => TRUE,
));
return $ret;
}
/**
* Increase module weight to support phpass.
*/
function password_policy_update_6102() {
$ret = array();
$ret[] = update_sql("UPDATE {system} SET weight = 1 WHERE type = 'module' AND name = 'password_policy'");
return $ret;
}
/**
* Reset module weight to 0.
*
* A custom module weight is no longer needed to support phpass.
*/
function password_policy_update_6103() {
$ret = array();
$ret[] = update_sql("UPDATE {system} SET weight = 0 WHERE type = 'module' AND name = 'password_policy'");
return $ret;
}
Functions
Name | Description |
---|---|
password_policy_enable | Implements hook_enable(). |
password_policy_install | Implements hook_install(). |
password_policy_schema | Implements hook_schema(). |
password_policy_uninstall | Implements hook_uninstall(). |
password_policy_update_6000 | |
password_policy_update_6001 | |
password_policy_update_6002 | Fix for http://drupal.org/node/583902. |
password_policy_update_6003 | Make sure name on password_policy is unique for exportables (features) |
password_policy_update_6004 | Make sure name column on password_policy_role for exportables (features) |
password_policy_update_6005 | Make sure name column on password_policy_role is set with corrsponding name |
password_policy_update_6006 | Add unique key on password_policy_role for exportables (rid,name) |
password_policy_update_6100 | Notify of change to username constraint behavior. |
password_policy_update_6101 | Increase length of {password_policy_history}.pass to support phpass. |
password_policy_update_6102 | Increase module weight to support phpass. |
password_policy_update_6103 | Reset module weight to 0. |