| Line # | Frequency | Source Line | | 1 | | <?php | | 2 | | // $Id: user.install,v 1.8 2008/03/31 20:50:05 dries Exp $ | | 3 | | | | 4 | | /** | | 5 | | * Implementation of hook_schema(). | | 6 | | */ | | 7 | | function user_schema() { | | 8 | | $schema['access'] = array( | | 9 | 1 | 'description' => t('Stores site access rules.'), | | 10 | | 'fields' => array( | | 11 | | 'aid' => array( | | 12 | | 'type' => 'serial', | | 13 | | 'not null' => TRUE, | | 14 | | 'description' => t('Primary Key: Unique access ID.'), | | 15 | | ), | | 16 | | 'mask' => array( | | 17 | | 'type' => 'varchar', | | 18 | | 'length' => 255, | | 19 | | 'not null' => TRUE, | | 20 | | 'default' => '', | | 21 | | 'description' => t('Text mask used for filtering access.'), | | 22 | | ), | | 23 | | 'type' => array( | | 24 | | 'type' => 'varchar', | | 25 | | 'length' => 255, | | 26 | | 'not null' => TRUE, | | 27 | | 'default' => '', | | 28 | | 'description' => t('Type of access rule: name, mail or host.'), | | 29 | | ), | | 30 | | 'status' => array( | | 31 | | 'type' => 'int', | | 32 | | 'not null' => TRUE, | | 33 | | 'default' => 0, | | 34 | | 'size' => 'tiny', | | 35 | | 'description' => t('Whether rule is to allow(1) or deny(0) access.'), | | 36 | | ), | | 37 | | ), | | 38 | | 'primary key' => array('aid'), | | 39 | | ); | | 40 | | | | 41 | | $schema['authmap'] = array( | | 42 | 1 | 'description' => t('Stores distributed authentication mapping.'), | | 43 | | 'fields' => array( | | 44 | | 'aid' => array( | | 45 | | 'description' => t('Primary Key: Unique authmap ID.'), | | 46 | | 'type' => 'serial', | | 47 | | 'unsigned' => TRUE, | | 48 | | 'not null' => TRUE, | | 49 | | ), | | 50 | | 'uid' => array( | | 51 | | 'type' => 'int', | | 52 | | 'not null' => TRUE, | | 53 | | 'default' => 0, | | 54 | | 'description' => t("User's {users}.uid."), | | 55 | | ), | | 56 | | 'authname' => array( | | 57 | | 'type' => 'varchar', | | 58 | | 'length' => 128, | | 59 | | 'not null' => TRUE, | | 60 | | 'default' => '', | | 61 | | 'description' => t('Unique authentication name.'), | | 62 | | ), | | 63 | | 'module' => array( | | 64 | | 'type' => 'varchar', | | 65 | | 'length' => 128, | | 66 | | 'not null' => TRUE, | | 67 | | 'default' => '', | | 68 | | 'description' => t('Module which is controlling the authentication.'), | | 69 | | ), | | 70 | | ), | | 71 | | 'unique keys' => array( | | 72 | | 'authname' => array('authname'), | | 73 | | ), | | 74 | | 'primary key' => array('aid'), | | 75 | | ); | | 76 | | | | 77 | | $schema['permission'] = array( | | 78 | 1 | 'description' => t('Stores permissions for users.'), | | 79 | | 'fields' => array( | | 80 | | 'pid' => array( | | 81 | | 'type' => 'serial', | | 82 | | 'not null' => TRUE, | | 83 | | 'description' => t('Primary Key: Unique permission ID.'), | | 84 | | ), | | 85 | | 'rid' => array( | | 86 | | 'type' => 'int', | | 87 | | 'unsigned' => TRUE, | | 88 | | 'not null' => TRUE, | | 89 | | 'default' => 0, | | 90 | | 'description' => t('The {role}.rid to which the permissions are assigned.'), | | 91 | | ), | | 92 | | 'perm' => array( | | 93 | | 'type' => 'text', | | 94 | | 'not null' => FALSE, | | 95 | | 'size' => 'big', | | 96 | | 'description' => t('List of permissions being assigned.'), | | 97 | | ), | | 98 | | 'tid' => array( | | 99 | | 'type' => 'int', | | 100 | | 'unsigned' => TRUE, | | 101 | | 'not null' => TRUE, | | 102 | | 'default' => 0, | | 103 | | 'description' => t('Originally intended for taxonomy-based permissions, but never used.'), | | 104 | | ), | | 105 | | ), | | 106 | | 'primary key' => array('pid'), | | 107 | | 'indexes' => array( | | 108 | | 'rid' => array('rid'), | | 109 | | ), | | 110 | | ); | | 111 | | | | 112 | | $schema['role'] = array( | | 113 | 1 | 'description' => t('Stores user roles.'), | | 114 | | 'fields' => array( | | 115 | | 'rid' => array( | | 116 | | 'type' => 'serial', | | 117 | | 'unsigned' => TRUE, | | 118 | | 'not null' => TRUE, | | 119 | | 'description' => t('Primary Key: Unique role id.'), | | 120 | | ), | | 121 | | 'name' => array( | | 122 | | 'type' => 'varchar', | | 123 | | 'length' => 64, | | 124 | | 'not null' => TRUE, | | 125 | | 'default' => '', | | 126 | | 'description' => t('Unique role name.'), | | 127 | | ), | | 128 | | ), | | 129 | | 'unique keys' => array( | | 130 | | 'name' => array('name'), | | 131 | | ), | | 132 | | 'primary key' => array('rid'), | | 133 | | ); | | 134 | | | | 135 | | $schema['users'] = array( | | 136 | 1 | 'description' => t('Stores user data.'), | | 137 | | 'fields' => array( | | 138 | | 'uid' => array( | | 139 | | 'type' => 'serial', | | 140 | | 'unsigned' => TRUE, | | 141 | | 'not null' => TRUE, | | 142 | | 'description' => t('Primary Key: Unique user ID.'), | | 143 | | ), | | 144 | | 'name' => array( | | 145 | | 'type' => 'varchar', | | 146 | | 'length' => 60, | | 147 | | 'not null' => TRUE, | | 148 | | 'default' => '', | | 149 | | 'description' => t('Unique user name.'), | | 150 | | ), | | 151 | | 'pass' => array( | | 152 | | 'type' => 'varchar', | | 153 | | 'length' => 128, | | 154 | | 'not null' => TRUE, | | 155 | | 'default' => '', | | 156 | | 'description' => t("User's password (hashed)."), | | 157 | | ), | | 158 | | 'mail' => array( | | 159 | | 'type' => 'varchar', | | 160 | | 'length' => 64, | | 161 | | 'not null' => FALSE, | | 162 | | 'default' => '', | | 163 | | 'description' => t("User's email address."), | | 164 | | ), | | 165 | | 'mode' => array( | | 166 | | 'type' => 'int', | | 167 | | 'not null' => TRUE, | | 168 | | 'default' => 0, | | 169 | | 'size' => 'tiny', | | 170 | | 'description' => t('Per-user comment display mode (threaded vs. flat), used by the {comment} module.'), | | 171 | | ), | | 172 | | 'sort' => array( | | 173 | | 'type' => 'int', | | 174 | | 'not null' => FALSE, | | 175 | | 'default' => 0, | | 176 | | 'size' => 'tiny', | | 177 | | 'description' => t('Per-user comment sort order (newest vs. oldest first), used by the {comment} module.'), | | 178 | | ), | | 179 | | 'threshold' => array( | | 180 | | 'type' => 'int', | | 181 | | 'not null' => FALSE, | | 182 | | 'default' => 0, | | 183 | | 'size' => 'tiny', | | 184 | | 'description' => t('Previously used by the {comment} module for per-user preferences; no longer used.'), | | 185 | | ), | | 186 | | 'theme' => array( | | 187 | | 'type' => 'varchar', | | 188 | | 'length' => 255, | | 189 | | 'not null' => TRUE, | | 190 | | 'default' => '', | | 191 | | 'description' => t("User's default theme."), | | 192 | | ), | | 193 | | 'signature' => array( | | 194 | | 'type' => 'varchar', | | 195 | | 'length' => 255, | | 196 | | 'not null' => TRUE, | | 197 | | 'default' => '', | | 198 | | 'description' => t("User's signature."), | | 199 | | ), | | 200 | | 'created' => array( | | 201 | | 'type' => 'int', | | 202 | | 'not null' => TRUE, | | 203 | | 'default' => 0, | | 204 | | 'description' => t('Timestamp for when user was created.'), | | 205 | | ), | | 206 | | 'access' => array( | | 207 | | 'type' => 'int', | | 208 | | 'not null' => TRUE, | | 209 | | 'default' => 0, | | 210 | | 'description' => t('Timestamp for previous time user accessed the site.'), | | 211 | | ), | | 212 | | 'login' => array( | | 213 | | 'type' => 'int', | | 214 | | 'not null' => TRUE, | | 215 | | 'default' => 0, | | 216 | | 'description' => t("Timestamp for user's last login."), | | 217 | | ), | | 218 | | 'status' => array( | | 219 | | 'type' => 'int', | | 220 | | 'not null' => TRUE, | | 221 | | 'default' => 0, | | 222 | | 'size' => 'tiny', | | 223 | | 'description' => t('Whether the user is active(1) or blocked(0).'), | | 224 | | ), | | 225 | | 'timezone' => array( | | 226 | | 'type' => 'varchar', | | 227 | | 'length' => 8, | | 228 | | 'not null' => FALSE, | | 229 | | 'description' => t("User's timezone."), | | 230 | | ), | | 231 | | 'language' => array( | | 232 | | 'type' => 'varchar', | | 233 | | 'length' => 12, | | 234 | | 'not null' => TRUE, | | 235 | | 'default' => '', | | 236 | | 'description' => t("User's default language."), | | 237 | | ), | | 238 | | 'picture' => array( | | 239 | | 'type' => 'varchar', | | 240 | | 'length' => 255, | | 241 | | 'not null' => TRUE, | | 242 | | 'default' => '', | | 243 | | 'description' => t("Path to the user's uploaded picture."), | | 244 | | ), | | 245 | | 'init' => array( | | 246 | | 'type' => 'varchar', | | 247 | | 'length' => 64, | | 248 | | 'not null' => FALSE, | | 249 | | 'default' => '', | | 250 | | 'description' => t('Email address used for initial account creation.'), | | 251 | | ), | | 252 | | 'data' => array( | | 253 | | 'type' => 'text', | | 254 | | 'not null' => FALSE, | | 255 | | 'size' => 'big', | | 256 | | 'serialize' => TRUE, | | 257 | | 'description' => t('A serialized array of name value pairs that are related to the user. Any form values posted during user edit are stored and are loaded into the $user object during user_load(). Use of this field is discouraged and it will likely disappear in a future version of Drupal.'), | | 258 | | ), | | 259 | | ), | | 260 | | 'indexes' => array( | | 261 | | 'access' => array('access'), | | 262 | | 'created' => array('created'), | | 263 | | 'mail' => array('mail'), | | 264 | | ), | | 265 | | 'unique keys' => array( | | 266 | | 'name' => array('name'), | | 267 | | ), | | 268 | | 'primary key' => array('uid'), | | 269 | | ); | | 270 | | | | 271 | | $schema['users_roles'] = array( | | 272 | 1 | 'description' => t('Maps users to roles.'), | | 273 | | 'fields' => array( | | 274 | | 'uid' => array( | | 275 | | 'type' => 'int', | | 276 | | 'unsigned' => TRUE, | | 277 | | 'not null' => TRUE, | | 278 | | 'default' => 0, | | 279 | | 'description' => t('Primary Key: {users}.uid for user.'), | | 280 | | ), | | 281 | | 'rid' => array( | | 282 | | 'type' => 'int', | | 283 | | 'unsigned' => TRUE, | | 284 | | 'not null' => TRUE, | | 285 | | 'default' => 0, | | 286 | | 'description' => t('Primary Key: {role}.rid for role.'), | | 287 | | ), | | 288 | | ), | | 289 | | 'primary key' => array('uid', 'rid'), | | 290 | | 'indexes' => array( | | 291 | | 'rid' => array('rid'), | | 292 | | ), | | 293 | | ); | | 294 | | | | 295 | 1 | return $schema; | | 296 | | } | | 297 | | | | 298 | | /** | | 299 | | * @defgroup user-updates-6.x-to-7.x User updates from 6.x to 7.x | | 300 | | * @{ | | 301 | | */ | | 302 | | | | 303 | | /** | | 304 | | * Increase the length of the password field to accommodate better hashes. | | 305 | | * | | 306 | | * Also re-hashes all current passwords to improve security. This may be a | | 307 | | * lengthy process, and is performed batch-wise. | | 308 | | */ | | 309 | | function user_update_7000(&$sandbox) { | | 310 | | $ret = array('#finished' => 0); | | 311 | | // Lower than DRUPAL_HASH_COUNT to make the update run at a reasonable speed. | | 312 | | $hash_count_log2 = 11; | | 313 | | // Multi-part update. | | 314 | | if (!isset($sandbox['user_from'])) { | | 315 | | db_change_field($ret, 'users', 'pass', 'pass', array('type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => '')); | | 316 | | $sandbox['user_from'] = 0; | | 317 | | $sandbox['user_count'] = db_result(db_query("SELECT COUNT(uid) FROM {users}")); | | 318 | | } | | 319 | | else { | | 320 | | require_once variable_get('password_inc', './includes/password.inc'); | | 321 | | // Hash again all current hashed passwords. | | 322 | | $has_rows = FALSE; | | 323 | | // Update this many per page load. | | 324 | | $count = 1000; | | 325 | | $result = db_query_range("SELECT uid, pass FROM {users} WHERE uid > 0 ORDER BY uid", $sandbox['user_from'], $count); | | 326 | | while ($account = db_fetch_array($result)) { | | 327 | | $has_rows = TRUE; | | 328 | | $new_hash = user_hash_password($account['pass'], $hash_count_log2); | | 329 | | if ($new_hash) { | | 330 | | // Indicate an updated password. | | 331 | | $new_hash = 'U'. $new_hash; | | 332 | | db_query("UPDATE {users} SET pass = '%s' WHERE uid = %d", $new_hash, $account['uid']); | | 333 | | } | | 334 | | } | | 335 | | $ret['#finished'] = $sandbox['user_from']/$sandbox['user_count']; | | 336 | | $sandbox['user_from'] += $count; | | 337 | | if (!$has_rows) { | | 338 | | $ret['#finished'] = 1; | | 339 | | $ret[] = array('success' => TRUE, 'query' => "UPDATE {users} SET pass = 'U'. user_hash_password(pass) WHERE uid > 0"); | | 340 | | } | | 341 | | } | | 342 | | return $ret; | | 343 | | } | | 344 | | | | 345 | | /** | | 346 | | * @} End of "defgroup user-updates-6.x-to-7.x" | | 347 | | * The next series of updates should start at 8000. | | 348 | | */ | | 349 | | |
|