-- (c) Aaron Schulz, 2007

-- Table structure for table `Confirm account`
-- Replace /*$wgDBprefix*/ with the proper prefix

-- This stores all of our reviews,
-- the corresponding tags are stored in the tag table
CREATE TABLE IF NOT EXISTS /*_*/account_requests (
	acr_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
	-- Usernames must be unique, must not be in the form of
	-- an IP address. _Shouldn't_ allow slashes or case
	-- conflicts. Spaces are allowed, and are _not_ converted
	-- to underscores like titles. See the User::newFromName() for
	-- the specific tests that usernames have to pass.
	acr_name varchar(255) binary NOT NULL default '',
	-- Optional 'real name' to be displayed in credit listings
	acr_real_name varchar(255) binary NOT NULL default '',
	-- Note: email should be restricted, not public info.
	-- Same with passwords.
	acr_email varchar(255) binary NOT NULL,
	-- Initially NULL; when a user's e-mail address has been
	-- validated by returning with a mailed token, this is
	-- set to the current timestamp.
	acr_email_authenticated varbinary(14) default NULL,
	-- Randomly generated token created when the e-mail address
	-- is set and a confirmation test mail sent.
	acr_email_token binary(32),
	-- Expiration date for the user_email_token
	acr_email_token_expires varbinary(14),
	-- A little about this user
	acr_bio mediumblob NOT NULL,
	-- Private info for reviewers to look at when considering request
	acr_notes mediumblob NOT NULL,
	-- Links to recognize/identify this user, CSV, may not be public
	acr_urls mediumblob NOT NULL,
	-- IP address
	acr_ip VARCHAR(255) NULL default '',
	acr_xff VARCHAR(255) NULL default '',
	-- User-Agent header
	acr_agent VARCHAR(255) NULL default '',
	-- Name of attached file (.pdf,.doc,.txt etc...)
	acr_filename VARCHAR(255) NULL,
	acr_storage_key VARCHAR(64) NULL,
	-- Prospective account access level
	acr_type tinyint(255) unsigned NOT NULL default 0,
	-- Areas of interest
	acr_areas mediumblob NOT NULL,

	-- Timestamp of account registration.
	acr_registration varbinary(14) NOT NULL,

	-- Flag for rejected accounts
	acr_deleted bool NOT NULL,
	-- Time of rejection (if rejected)
	acr_rejected varbinary(14),
	-- Time request was put on hold (if held)
	acr_held varbinary(14),
	-- The user who rejected/held it
	acr_user int unsigned NOT NULL default 0,
	-- Reason
	acr_comment varchar(255) NOT NULL default ''
) /*$wgDBTableOptions*/;

CREATE UNIQUE INDEX /*i*/acr_name ON /*_*/account_requests (acr_name);
CREATE INDEX /*i*/acr_email ON /*_*/account_requests (acr_email);
CREATE INDEX /*i*/acr_email_token ON /*_*/account_requests (acr_email_token);
CREATE INDEX /*i*/acr_type_del_reg ON /*_*/account_requests (acr_type,acr_deleted,acr_registration);

-- This stores all of credential information
-- When accounts are confirmed, the identity info goes here
CREATE TABLE IF NOT EXISTS /*_*/account_credentials (
	-- Revision ID #
	acd_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
	-- Foreign key to user.user_id
	acd_user_id int unsigned NOT NULL,
	-- Optional 'real name' to be displayed in credit listings
	acd_real_name varchar(255) binary NOT NULL default '',
	-- Note: email should be restricted, not public info.
	-- Same with passwords.
	acd_email tinytext NOT NULL,
	-- Initially NULL; when a user's e-mail address has been
	-- validated by returning with a mailed token, this is
	-- set to the current timestamp.
	acd_email_authenticated varbinary(14) default NULL,
	-- A little about this user
	acd_bio mediumblob NOT NULL,
	-- Private info for reviewers to look at when considering request
	acd_notes mediumblob NOT NULL,
	-- Links to recognize/identify this user, CSV, may not be public
	acd_urls mediumblob NOT NULL,
	-- IP address
	acd_ip VARCHAR(255) NULL default '',
	acd_xff VARCHAR(255) NULL default '',
	-- User-Agent header
	acd_agent VARCHAR(255) NULL default '',
	-- Name of attached file (.pdf,.doc,.txt etc...)
	acd_filename VARCHAR(255) NULL,
	acd_storage_key VARCHAR(64) NULL,
	-- Areas of interest
	acd_areas mediumblob NOT NULL,

	-- Timestamp of account registration.
	acd_registration varbinary(14) NOT NULL,

	-- Timestamp of acceptance
	acd_accepted varbinary(14),
	-- The user who accepted it
	acd_user int unsigned NOT NULL default 0,
	-- Reason given in email
	acd_comment varchar(255) NOT NULL default ''
) /*$wgDBTableOptions*/;

CREATE UNIQUE INDEX /*i*/acd_user_id ON /*_*/account_credentials (acd_user_id,acd_id);
