+++ /dev/null
-<?php
-
-/* Main database structure configuration file.
- *
- * Here are described all the tables, fields and indexes Friendica needs to work.
- *
- * Syntax (braces indicate optionale values):
- * "<table name>" => [
- * "comment" => "Description of the table",
- * "fields" => [
- * "<field name>" => [
- * "type" => "<field type>{(<field size>)} <unsigned>",
- * "not null" => 0|1,
- * {"extra" => "auto_increment",}
- * {"default" => "<default value>",}
- * {"default" => NULL_DATE,} (for datetime fields)
- * {"primary" => "1",}
- * {"relation" => ["<foreign key table name>" => "<foreign key field name>"],}
- * "comment" => "Description of the fields"
- * ],
- * ...
- * ],
- * "indexes" => [
- * "PRIMARY" => ["<primary key field name>", ...],
- * "<index name>" => [{"UNIQUE",} "<field name>{(<key size>)}", ...]
- * ...
- * ],
- * ],
- *
- * If you need to make any change, make sure to increment the DB_UPDATE_VERSION constant value below.
- *
- */
-
-use Friendica\Database\DBA;
-
-if (!defined('DB_UPDATE_VERSION')) {
- define('DB_UPDATE_VERSION', 1318);
-}
-
-return [
- "2fa_recovery_codes" => [
- "comment" => "Two-factor authentication recovery codes",
- "fields" => [
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "primary" => "1", "relation" => ["user" => "uid"], "comment" => "User ID"],
- "code" => ["type" => "varchar(50)", "not null" => "1", "primary" => "1", "comment" => "Recovery code string"],
- "generated" => ["type" => "datetime", "not null" => "1", "comment" => "Datetime the code was generated"],
- "used" => ["type" => "datetime", "comment" => "Datetime the code was used"],
- ],
- "indexes" => [
- "PRIMARY" => ["uid", "code"]
- ]
- ],
- "addon" => [
- "comment" => "registered addons",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
- "name" => ["type" => "varchar(50)", "not null" => "1", "default" => "", "comment" => "addon base (file)name"],
- "version" => ["type" => "varchar(50)", "not null" => "1", "default" => "", "comment" => "currently unused"],
- "installed" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "currently always 1"],
- "hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "currently unused"],
- "timestamp" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "file timestamp to check for reloads"],
- "plugin_admin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 = has admin config, 0 = has no admin config"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "name" => ["UNIQUE", "name"],
- ]
- ],
- "apcontact" => [
- "comment" => "ActivityPub compatible contacts - used in the ActivityPub implementation",
- "fields" => [
- "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "URL of the contact"],
- "uuid" => ["type" => "varchar(255)", "comment" => ""],
- "type" => ["type" => "varchar(20)", "not null" => "1", "comment" => ""],
- "following" => ["type" => "varchar(255)", "comment" => ""],
- "followers" => ["type" => "varchar(255)", "comment" => ""],
- "inbox" => ["type" => "varchar(255)", "not null" => "1", "comment" => ""],
- "outbox" => ["type" => "varchar(255)", "comment" => ""],
- "sharedinbox" => ["type" => "varchar(255)", "comment" => ""],
- "manually-approve" => ["type" => "boolean", "comment" => ""],
- "nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "name" => ["type" => "varchar(255)", "comment" => ""],
- "about" => ["type" => "text", "comment" => ""],
- "photo" => ["type" => "varchar(255)", "comment" => ""],
- "addr" => ["type" => "varchar(255)", "comment" => ""],
- "alias" => ["type" => "varchar(255)", "comment" => ""],
- "pubkey" => ["type" => "text", "comment" => ""],
- "baseurl" => ["type" => "varchar(255)", "comment" => "baseurl of the ap contact"],
- "generator" => ["type" => "varchar(255)", "comment" => "Name of the contact's system"],
- "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""]
- ],
- "indexes" => [
- "PRIMARY" => ["url"],
- "addr" => ["addr(32)"],
- "alias" => ["alias(190)"],
- "url" => ["followers(190)"]
- ]
- ],
- "attach" => [
- "comment" => "file attachments",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "generated index"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
- "hash" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => "hash"],
- "filename" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "filename of original"],
- "filetype" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => "mimetype"],
- "filesize" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "size in bytes"],
- "data" => ["type" => "longblob", "not null" => "1", "comment" => "file data"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation time"],
- "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "last edit time"],
- "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>"],
- "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
- "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
- "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
- "backend-class" => ["type" => "tinytext", "comment" => "Storage backend class"],
- "backend-ref" => ["type" => "text", "comment" => "Storage backend data reference"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "auth_codes" => [
- "comment" => "OAuth usage",
- "fields" => [
- "id" => ["type" => "varchar(40)", "not null" => "1", "primary" => "1", "comment" => ""],
- "client_id" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "relation" => ["clients" => "client_id"],
- "comment" => ""],
- "redirect_uri" => ["type" => "varchar(200)", "not null" => "1", "default" => "", "comment" => ""],
- "expires" => ["type" => "int", "not null" => "1", "default" => "0", "comment" => ""],
- "scope" => ["type" => "varchar(250)", "not null" => "1", "default" => "", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "cache" => [
- "comment" => "Stores temporary data",
- "fields" => [
- "k" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "cache key"],
- "v" => ["type" => "mediumtext", "comment" => "cached serialized value"],
- "expires" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of cache expiration"],
- "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of cache insertion"],
- ],
- "indexes" => [
- "PRIMARY" => ["k"],
- "k_expires" => ["k", "expires"],
- ]
- ],
- "challenge" => [
- "comment" => "",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "challenge" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "dfrn-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "type" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "last_update" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "clients" => [
- "comment" => "OAuth usage",
- "fields" => [
- "client_id" => ["type" => "varchar(20)", "not null" => "1", "primary" => "1", "comment" => ""],
- "pw" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "comment" => ""],
- "redirect_uri" => ["type" => "varchar(200)", "not null" => "1", "default" => "", "comment" => ""],
- "name" => ["type" => "text", "comment" => ""],
- "icon" => ["type" => "text", "comment" => ""],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- ],
- "indexes" => [
- "PRIMARY" => ["client_id"],
- ]
- ],
- "config" => [
- "comment" => "main configuration storage",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
- "cat" => ["type" => "varbinary(50)", "not null" => "1", "default" => "", "comment" => ""],
- "k" => ["type" => "varbinary(50)", "not null" => "1", "default" => "", "comment" => ""],
- "v" => ["type" => "mediumtext", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "cat_k" => ["UNIQUE", "cat", "k"],
- ]
- ],
- "contact" => [
- "comment" => "contact table",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "updated" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => "Date of last contact update"],
- "self" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 if the contact is the user him/her self"],
- "remote_self" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "rel" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "The kind of the relation between the user and the contact"],
- "duplex" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Network of the contact"],
- "protocol" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Protocol of the contact"],
- "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name that this contact is known by"],
- "nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Nick- and user name of the contact"],
- "location" => ["type" => "varchar(255)", "default" => "", "comment" => ""],
- "about" => ["type" => "text", "comment" => ""],
- "keywords" => ["type" => "text", "comment" => "public keywords (interests) of the contact"],
- "gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
- "xmpp" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "attag" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "avatar" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "photo" => ["type" => "varchar(255)", "default" => "", "comment" => "Link to the profile photo of the contact"],
- "thumb" => ["type" => "varchar(255)", "default" => "", "comment" => "Link to the profile photo (thumb size)"],
- "micro" => ["type" => "varchar(255)", "default" => "", "comment" => "Link to the profile photo (micro size)"],
- "site-pubkey" => ["type" => "text", "comment" => ""],
- "issued-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "dfrn-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "nurl" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "addr" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "alias" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "pubkey" => ["type" => "text", "comment" => "RSA public key 4096 bit"],
- "prvkey" => ["type" => "text", "comment" => "RSA private key 4096 bit"],
- "batch" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "request" => ["type" => "varchar(255)", "comment" => ""],
- "notify" => ["type" => "varchar(255)", "comment" => ""],
- "poll" => ["type" => "varchar(255)", "comment" => ""],
- "confirm" => ["type" => "varchar(255)", "comment" => ""],
- "poco" => ["type" => "varchar(255)", "comment" => ""],
- "aes_allow" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "ret-aes" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "usehub" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "subhub" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "hub-verify" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "last-update" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last try to update the contact info"],
- "success_update" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last successful contact update"],
- "failure_update" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last failed update"],
- "name-date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "uri-date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "avatar-date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "term-date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "last-item" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "date of the last post"],
- "priority" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "blocked" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => "Node-wide block status"],
- "block_reason" => ["type" => "text", "comment" => "Node-wide block reason"],
- "readonly" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "posts of the contact are readonly"],
- "writable" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "forum" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "contact is a forum"],
- "prv" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "contact is a private group"],
- "contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""],
- "hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "archive" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "pending" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""],
- "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Contact has been deleted"],
- "rating" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""],
- "unsearchable" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Contact prefers to not be searchable"],
- "sensitive" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Contact posts sensitive content"],
- "baseurl" => ["type" => "varchar(255)", "default" => "", "comment" => "baseurl of the contact"],
- "reason" => ["type" => "text", "comment" => ""],
- "closeness" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "99", "comment" => ""],
- "info" => ["type" => "mediumtext", "comment" => ""],
- "profile-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "bdyear" => ["type" => "varchar(4)", "not null" => "1", "default" => "", "comment" => ""],
- "bd" => ["type" => "date", "not null" => "1", "default" => DBA::NULL_DATE, "comment" => ""],
- "notify_new_posts" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "fetch_further_information" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "ffi_keyword_blacklist" => ["type" => "text", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid_name" => ["uid", "name(190)"],
- "self_uid" => ["self", "uid"],
- "alias_uid" => ["alias(32)", "uid"],
- "pending_uid" => ["pending", "uid"],
- "blocked_uid" => ["blocked", "uid"],
- "uid_rel_network_poll" => ["uid", "rel", "network", "poll(64)", "archive"],
- "uid_network_batch" => ["uid", "network", "batch(64)"],
- "addr_uid" => ["addr(32)", "uid"],
- "nurl_uid" => ["nurl(32)", "uid"],
- "nick_uid" => ["nick(32)", "uid"],
- "dfrn-id" => ["dfrn-id(64)"],
- "issued-id" => ["issued-id(64)"],
- ]
- ],
- "conv" => [
- "comment" => "private messages",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this conversation"],
- "recips" => ["type" => "text", "comment" => "sender_handle;recipient_handle"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
- "creator" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "handle of creator"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation timestamp"],
- "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "edited timestamp"],
- "subject" => ["type" => "text", "comment" => "subject of initial message"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid" => ["uid"],
- ]
- ],
- "conversation" => [
- "comment" => "Raw data and structure information for messages",
- "fields" => [
- "item-uri" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "Original URI of the item - unrelated to the table with the same name"],
- "reply-to-uri" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => "URI to which this item is a reply"],
- "conversation-uri" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => "GNU Social conversation URI"],
- "conversation-href" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => "GNU Social conversation link"],
- "protocol" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "255", "comment" => "The protocol of the item"],
- "source" => ["type" => "mediumtext", "comment" => "Original source"],
- "received" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Receiving date"],
- ],
- "indexes" => [
- "PRIMARY" => ["item-uri"],
- "conversation-uri" => ["conversation-uri"],
- "received" => ["received"],
- ]
- ],
- "diaspora-interaction" => [
- "comment" => "Signed Diaspora Interaction",
- "fields" => [
- "uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
- "interaction" => ["type" => "mediumtext", "comment" => "The Diaspora interaction"]
- ],
- "indexes" => [
- "PRIMARY" => ["uri-id"]
- ]
- ],
- "event" => [
- "comment" => "Events",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
- "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact_id (ID of the contact in contact table)"],
- "uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation time"],
- "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "last edit time"],
- "start" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "event start time"],
- "finish" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "event end time"],
- "summary" => ["type" => "text", "comment" => "short description or title of the event"],
- "desc" => ["type" => "text", "comment" => "event description"],
- "location" => ["type" => "text", "comment" => "event location"],
- "type" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "comment" => "event or birthday"],
- "nofinish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if event does have no end this is 1"],
- "adjust" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => "adjust to timezone of the recipient (0 or 1)"],
- "ignore" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "0 or 1"],
- "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>'"],
- "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
- "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
- "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid_start" => ["uid", "start"],
- ]
- ],
- "fcontact" => [
- "comment" => "Diaspora compatible contacts - used in the Diaspora implementation",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "unique id"],
- "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "request" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "addr" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "batch" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "notify" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "poll" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "confirm" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "priority" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""],
- "alias" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "pubkey" => ["type" => "text", "comment" => ""],
- "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "addr" => ["addr(32)"],
- "url" => ["UNIQUE", "url(190)"],
- ]
- ],
- "fsuggest" => [
- "comment" => "friend suggestion stuff",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
- "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "request" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "note" => ["type" => "text", "comment" => ""],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "gcign" => [
- "comment" => "contacts ignored by friend suggestions",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Local User id"],
- "gcid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["gcontact" => "id"], "comment" => "gcontact.id of ignored contact"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid" => ["uid"],
- "gcid" => ["gcid"],
- ]
- ],
- "gcontact" => [
- "comment" => "global contacts",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name that this contact is known by"],
- "nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Nick- and user name of the contact"],
- "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Link to the contacts profile page"],
- "nurl" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Link to the profile photo"],
- "connect" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "updated" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "last_contact" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "last_failure" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "archive_date" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "archived" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "about" => ["type" => "text", "comment" => ""],
- "keywords" => ["type" => "text", "comment" => "puplic keywords (interests)"],
- "gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
- "birthday" => ["type" => "varchar(32)", "not null" => "1", "default" => DBA::NULL_DATE, "comment" => ""],
- "community" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 if contact is forum account"],
- "contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "-1", "comment" => ""],
- "hide" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 = should be hidden from search"],
- "nsfw" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 = contact posts nsfw content"],
- "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "social network protocol"],
- "addr" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "notify" => ["type" => "varchar(255)", "comment" => ""],
- "alias" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "generation" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "server_url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "baseurl of the contacts server"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "nurl" => ["UNIQUE", "nurl(190)"],
- "name" => ["name(64)"],
- "nick" => ["nick(32)"],
- "addr" => ["addr(64)"],
- "hide_network_updated" => ["hide", "network", "updated"],
- "updated" => ["updated"],
- ]
- ],
- "glink" => [
- "comment" => "'friends of friends' linkages derived from poco",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "gcid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["gcontact" => "id"], "comment" => ""],
- "zcid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["gcontact" => "id"], "comment" => ""],
- "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "cid_uid_gcid_zcid" => ["UNIQUE", "cid", "uid", "gcid", "zcid"],
- "gcid" => ["gcid"],
- ]
- ],
- "group" => [
- "comment" => "privacy groups, group info",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
- "visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 indicates the member list is not private"],
- "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 indicates the group has been deleted"],
- "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "human readable name of group"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid" => ["uid"],
- ]
- ],
- "group_member" => [
- "comment" => "privacy groups, member info",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "gid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["group" => "id"], "comment" => "groups.id of the associated group"],
- "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id of the member assigned to the associated group"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "contactid" => ["contact-id"],
- "gid_contactid" => ["UNIQUE", "gid", "contact-id"],
- ]
- ],
- "gserver" => [
- "comment" => "Global servers",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "nurl" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "version" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "site_name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "info" => ["type" => "text", "comment" => ""],
- "register_policy" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""],
- "registered-users" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Number of registered users"],
- "poco" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "noscrape" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""],
- "platform" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "relay-subscribe" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Has the server subscribed to the relay system"],
- "relay-scope" => ["type" => "varchar(10)", "not null" => "1", "default" => "", "comment" => "The scope of messages that the server wants to get"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "last_poco_query" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "last_contact" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "last_failure" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "nurl" => ["UNIQUE", "nurl(190)"],
- ]
- ],
- "gserver-tag" => [
- "comment" => "Tags that the server has subscribed",
- "fields" => [
- "gserver-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["gserver" => "id"], "primary" => "1",
- "comment" => "The id of the gserver"],
- "tag" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "primary" => "1", "comment" => "Tag that the server has subscribed"],
- ],
- "indexes" => [
- "PRIMARY" => ["gserver-id", "tag"],
- "tag" => ["tag"],
- ]
- ],
- "hook" => [
- "comment" => "addon hook registry",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "hook" => ["type" => "varbinary(100)", "not null" => "1", "default" => "", "comment" => "name of hook"],
- "file" => ["type" => "varbinary(200)", "not null" => "1", "default" => "", "comment" => "relative filename of hook handler"],
- "function" => ["type" => "varbinary(200)", "not null" => "1", "default" => "", "comment" => "function name of hook handler"],
- "priority" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => "not yet implemented - can be used to sort conflicts in hook handling by calling handlers in priority order"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "hook_file_function" => ["UNIQUE", "hook", "file", "function"],
- ]
- ],
- "inbox-status" => [
- "comment" => "Status of ActivityPub inboxes",
- "fields" => [
- "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "URL of the inbox"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Creation date of this entry"],
- "success" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last successful delivery"],
- "failure" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last failed delivery"],
- "previous" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Previous delivery date"],
- "archive" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Is the inbox archived?"],
- "shared" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Is it a shared inbox?"]
- ],
- "indexes" => [
- "PRIMARY" => ["url"]
- ]
- ],
- "intro" => [
- "comment" => "",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "fid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["fcontact" => "id"], "comment" => ""],
- "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
- "knowyou" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "duplex" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "note" => ["type" => "text", "comment" => ""],
- "hash" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "datetime" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "blocked" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""],
- "ignore" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "item" => [
- "comment" => "Structure for all posts",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => ["thread" => "iid"]],
- "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this item"],
- "uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
- "uri-hash" => ["type" => "varchar(80)", "not null" => "1", "default" => "", "comment" => "RIPEMD-128 hash from uri"],
- "parent" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => "item.id of the parent to this item if it is a reply of some form; otherwise this must be set to the id of this item"],
- "parent-uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "uri of the parent to this item"],
- "parent-uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table that contains the parent uri"],
- "thr-parent" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "If the parent of this item is not the top-level item in the conversation, the uri of the immediate parent; otherwise set to parent-uri"],
- "thr-parent-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table that contains the thread parent uri"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Creation timestamp."],
- "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of last edit (default is created)"],
- "commented" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of last comment/reply to this item"],
- "received" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime"],
- "changed" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date that something in the conversation changed, indicating clients should fetch the conversation again"],
- "gravity" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Network from where the item comes from"],
- "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Link to the contact table with uid=0 of the owner of this item"],
- "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Link to the contact table with uid=0 of the author of this item"],
- "icid" => ["type" => "int unsigned", "relation" => ["item-content" => "id"], "comment" => "Id of the item-content table entry that contains the whole item content"],
- "iaid" => ["type" => "int unsigned", "relation" => ["item-activity" => "id"], "comment" => "Id of the item-activity table entry that contains the activity data"],
- "extid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "post-type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "Post type (personal note, bookmark, ...)"],
- "global" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "private" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "distribution is restricted"],
- "visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "moderated" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been deleted"],
- // User specific fields. Eventually they will move to user-item
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner id which owns this copy of the item"],
- "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id"],
- "wall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "This item was posted to the wall of uid"],
- "origin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item originated at this site"],
- "pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "starred" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been favourited"],
- "unseen" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => "item has not been seen"],
- "mention" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "The owner of this item was mentioned in it"],
- "forum_mode" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "psid" => ["type" => "int unsigned", "relation" => ["permissionset" => "id"], "comment" => "ID of the permission set of this post"],
- // It has to be decided whether these fields belong to the user or the structure
- "resource-id" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => "Used to link other tables to items, it identifies the linked resource (e.g. photo) and if set must also set resource_type"],
- "event-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["event" => "id"], "comment" => "Used to link to the event.id"],
- // Could possibly be replaced by the "attach" table?
- "attach" => ["type" => "mediumtext", "comment" => "JSON structure representing attachments to this item"],
- // Deprecated fields. Will be removed in upcoming versions
- "allow_cid" => ["type" => "mediumtext", "comment" => "Deprecated"],
- "allow_gid" => ["type" => "mediumtext", "comment" => "Deprecated"],
- "deny_cid" => ["type" => "mediumtext", "comment" => "Deprecated"],
- "deny_gid" => ["type" => "mediumtext", "comment" => "Deprecated"],
- "postopts" => ["type" => "text", "comment" => "Deprecated"],
- "inform" => ["type" => "mediumtext", "comment" => "Deprecated"],
- "type" => ["type" => "varchar(20)", "comment" => "Deprecated"],
- "bookmark" => ["type" => "boolean", "comment" => "Deprecated"],
- "file" => ["type" => "mediumtext", "comment" => "Deprecated"],
- "location" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "coord" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "tag" => ["type" => "mediumtext", "comment" => "Deprecated"],
- "plink" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "title" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "content-warning" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "body" => ["type" => "mediumtext", "comment" => "Deprecated"],
- "app" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "verb" => ["type" => "varchar(100)", "comment" => "Deprecated"],
- "object-type" => ["type" => "varchar(100)", "comment" => "Deprecated"],
- "object" => ["type" => "text", "comment" => "Deprecated"],
- "target-type" => ["type" => "varchar(100)", "comment" => "Deprecated"],
- "target" => ["type" => "text", "comment" => "Deprecated"],
- "author-name" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "author-link" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "author-avatar" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "owner-name" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "owner-link" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "owner-avatar" => ["type" => "varchar(255)", "comment" => "Deprecated"],
- "rendered-hash" => ["type" => "varchar(32)", "comment" => "Deprecated"],
- "rendered-html" => ["type" => "mediumtext", "comment" => "Deprecated"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "guid" => ["guid(191)"],
- "uri" => ["uri(191)"],
- "parent" => ["parent"],
- "parent-uri" => ["parent-uri(191)"],
- "extid" => ["extid(191)"],
- "uid_id" => ["uid", "id"],
- "uid_contactid_id" => ["uid", "contact-id", "id"],
- "uid_received" => ["uid", "received"],
- "uid_commented" => ["uid", "commented"],
- "uid_unseen_contactid" => ["uid", "unseen", "contact-id"],
- "uid_network_received" => ["uid", "network", "received"],
- "uid_network_commented" => ["uid", "network", "commented"],
- "uid_thrparent" => ["uid", "thr-parent(190)"],
- "uid_parenturi" => ["uid", "parent-uri(190)"],
- "uid_contactid_received" => ["uid", "contact-id", "received"],
- "authorid_received" => ["author-id", "received"],
- "ownerid" => ["owner-id"],
- "contact-id" => ["contact-id"],
- "uid_uri" => ["uid", "uri(190)"],
- "resource-id" => ["resource-id"],
- "deleted_changed" => ["deleted", "changed"],
- "uid_wall_changed" => ["uid", "wall", "changed"],
- "uid_eventid" => ["uid", "event-id"],
- "icid" => ["icid"],
- "iaid" => ["iaid"],
- "psid_wall" => ["psid", "wall"],
- ]
- ],
- "item-activity" => [
- "comment" => "Activities for items",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => ["thread" => "iid"]],
- "uri" => ["type" => "varchar(255)", "comment" => ""],
- "uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
- "uri-hash" => ["type" => "varchar(80)", "not null" => "1", "default" => "", "comment" => "RIPEMD-128 hash from uri"],
- "activity" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""]
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uri-hash" => ["UNIQUE", "uri-hash"],
- "uri" => ["uri(191)"],
- "uri-id" => ["uri-id"]
- ]
- ],
- "item-content" => [
- "comment" => "Content for all posts",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => ["thread" => "iid"]],
- "uri" => ["type" => "varchar(255)", "comment" => ""],
- "uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
- "uri-plink-hash" => ["type" => "varchar(80)", "not null" => "1", "default" => "", "comment" => "RIPEMD-128 hash from uri"],
- "title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "item title"],
- "content-warning" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "body" => ["type" => "mediumtext", "comment" => "item body content"],
- "location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "text location where this item originated"],
- "coord" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "longitude/latitude pair representing location where this item originated"],
- "language" => ["type" => "text", "comment" => "Language information about this post"],
- "app" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "application which generated this item"],
- "rendered-hash" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
- "rendered-html" => ["type" => "mediumtext", "comment" => "item.body converted to html"],
- "object-type" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => "ActivityStreams object type"],
- "object" => ["type" => "text", "comment" => "JSON encoded object structure unless it is an implied object (normal post)"],
- "target-type" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => "ActivityStreams target type if applicable (URI)"],
- "target" => ["type" => "text", "comment" => "JSON encoded target structure if used"],
- "plink" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "permalink or URL to a displayable copy of the message at its source"],
- "verb" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => "ActivityStreams verb"]
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uri-plink-hash" => ["UNIQUE", "uri-plink-hash"],
- "uri" => ["uri(191)"],
- "uri-id" => ["uri-id"]
- ]
- ],
- "item-delivery-data" => [
- "comment" => "Delivery data for items",
- "fields" => [
- "iid" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "relation" => ["item" => "id"], "comment" => "Item id"],
- "postopts" => ["type" => "text", "comment" => "External post connectors add their network name to this comma-separated string to identify that they should be delivered to these networks during delivery"],
- "inform" => ["type" => "mediumtext", "comment" => "Additional receivers of the linked item"],
- "queue_count" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Initial number of delivery recipients, used as item.delivery_queue_count"],
- "queue_done" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries, used as item.delivery_queue_done"],
- "activitypub" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries via ActivityPub"],
- "dfrn" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries via DFRN"],
- "legacy_dfrn" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries via legacy DFRN"],
- "diaspora" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries via Diaspora"],
- "ostatus" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries via OStatus"],
- ],
- "indexes" => [
- "PRIMARY" => ["iid"],
- ]
- ],
- "item-uri" => [
- "comment" => "URI and GUID for items",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"],
- "uri" => ["type" => "varbinary(255)", "not null" => "1", "comment" => "URI of an item"],
- "guid" => ["type" => "varbinary(255)", "comment" => "A unique identifier for an item"]
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uri" => ["UNIQUE", "uri"],
- "guid" => ["guid"]
- ]
- ],
- "locks" => [
- "comment" => "",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "name" => ["type" => "varchar(128)", "not null" => "1", "default" => "", "comment" => ""],
- "locked" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "pid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Process ID"],
- "expires" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of cache expiration"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "name_expires" => ["name", "expires"]
- ]
- ],
- "mail" => [
- "comment" => "private messages",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
- "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this private message"],
- "from-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "name of the sender"],
- "from-photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "contact photo link of the sender"],
- "from-url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "profile linke of the sender"],
- "contact-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "relation" => ["contact" => "id"], "comment" => "contact.id"],
- "convid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["conv" => "id"], "comment" => "conv.id"],
- "title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "body" => ["type" => "mediumtext", "comment" => ""],
- "seen" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if message visited it is 1"],
- "reply" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "replied" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "unknown" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if sender not in the contact table this is 1"],
- "uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "parent-uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation time of the private message"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid_seen" => ["uid", "seen"],
- "convid" => ["convid"],
- "uri" => ["uri(64)"],
- "parent-uri" => ["parent-uri(64)"],
- "contactid" => ["contact-id(32)"],
- ]
- ],
- "mailacct" => [
- "comment" => "Mail account data for fetching mails",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "server" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "port" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "ssltype" => ["type" => "varchar(16)", "not null" => "1", "default" => "", "comment" => ""],
- "mailbox" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "user" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "pass" => ["type" => "text", "comment" => ""],
- "reply_to" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "action" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "movetofolder" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "last_check" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "manage" => [
- "comment" => "table of accounts that can manage each other",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "mid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid_mid" => ["UNIQUE", "uid", "mid"],
- ]
- ],
- "notify" => [
- "comment" => "notifications",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "hash" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => ""],
- "type" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "msg" => ["type" => "mediumtext", "comment" => ""],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
- "link" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => "item.id"],
- "parent" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => ""],
- "seen" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "verb" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => ""],
- "otype" => ["type" => "varchar(10)", "not null" => "1", "default" => "", "comment" => ""],
- "name_cache" => ["type" => "tinytext", "comment" => "Cached bbcode parsing of name"],
- "msg_cache" => ["type" => "mediumtext", "comment" => "Cached bbcode parsing of msg"]
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "hash_uid" => ["hash", "uid"],
- "seen_uid_date" => ["seen", "uid", "date"],
- "uid_date" => ["uid", "date"],
- "uid_type_link" => ["uid", "type", "link(190)"],
- ]
- ],
- "notify-threads" => [
- "comment" => "",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "notify-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["notify" => "id"], "comment" => ""],
- "master-parent-item" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"],
- "comment" => ""],
- "parent-item" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "receiver-uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"],
- "comment" => "User id"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "oembed" => [
- "comment" => "cache for OEmbed queries",
- "fields" => [
- "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "page url"],
- "maxwidth" => ["type" => "mediumint unsigned", "not null" => "1", "primary" => "1", "comment" => "Maximum width passed to Oembed"],
- "content" => ["type" => "mediumtext", "comment" => "OEmbed data of the page"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of creation"],
- ],
- "indexes" => [
- "PRIMARY" => ["url", "maxwidth"],
- "created" => ["created"],
- ]
- ],
- "openwebauth-token" => [
- "comment" => "Store OpenWebAuth token to verify contacts",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "type" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => "Verify type"],
- "token" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "A generated token"],
- "meta" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of creation"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "parsed_url" => [
- "comment" => "cache for 'parse_url' queries",
- "fields" => [
- "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "page url"],
- "guessing" => ["type" => "boolean", "not null" => "1", "default" => "0", "primary" => "1", "comment" => "is the 'guessing' mode active?"],
- "oembed" => ["type" => "boolean", "not null" => "1", "default" => "0", "primary" => "1", "comment" => "is the data the result of oembed?"],
- "content" => ["type" => "mediumtext", "comment" => "page data"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of creation"],
- ],
- "indexes" => [
- "PRIMARY" => ["url", "guessing", "oembed"],
- "created" => ["created"],
- ]
- ],
- "participation" => [
- "comment" => "Storage for participation messages from Diaspora",
- "fields" => [
- "iid" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "relation" => ["item" => "id"], "comment" => ""],
- "server" => ["type" => "varchar(60)", "not null" => "1", "primary" => "1", "comment" => ""],
- "cid" => ["type" => "int unsigned", "not null" => "1", "relation" => ["contact" => "id"], "comment" => ""],
- "fid" => ["type" => "int unsigned", "not null" => "1", "relation" => ["fcontact" => "id"], "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["iid", "server"],
- "cid" => ["cid"],
- "fid" => ["fid"]
- ]
- ],
- "pconfig" => [
- "comment" => "personal (per user) configuration storage",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "cat" => ["type" => "varbinary(50)", "not null" => "1", "default" => "", "comment" => ""],
- "k" => ["type" => "varbinary(100)", "not null" => "1", "default" => "", "comment" => ""],
- "v" => ["type" => "mediumtext", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid_cat_k" => ["UNIQUE", "uid", "cat", "k"],
- ]
- ],
- "permissionset" => [
- "comment" => "",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner id of this permission set"],
- "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>'"],
- "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
- "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
- "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid_allow_cid_allow_gid_deny_cid_deny_gid" => ["allow_cid(50)", "allow_gid(30)", "deny_cid(50)", "deny_gid(30)"],
- ]
- ],
- "photo" => [
- "comment" => "photo storage",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
- "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id"],
- "guid" => ["type" => "char(16)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this photo"],
- "resource-id" => ["type" => "char(32)", "not null" => "1", "default" => "", "comment" => ""],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation date"],
- "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "last edited date"],
- "title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "desc" => ["type" => "text", "comment" => ""],
- "album" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "The name of the album to which the photo belongs"],
- "filename" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "type" => ["type" => "varchar(30)", "not null" => "1", "default" => "image/jpeg"],
- "height" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "width" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "datasize" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "data" => ["type" => "mediumblob", "not null" => "1", "comment" => ""],
- "scale" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "profile" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>'"],
- "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
- "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
- "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
- "backend-class" => ["type" => "tinytext", "comment" => "Storage backend class"],
- "backend-ref" => ["type" => "text", "comment" => "Storage backend data reference"],
- "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""]
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "contactid" => ["contact-id"],
- "uid_contactid" => ["uid", "contact-id"],
- "uid_profile" => ["uid", "profile"],
- "uid_album_scale_created" => ["uid", "album(32)", "scale", "created"],
- "uid_album_resource-id_created" => ["uid", "album(32)", "resource-id", "created"],
- "resource-id" => ["resource-id"],
- ]
- ],
- "poll" => [
- "comment" => "Currently unused table for storing poll results",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "q0" => ["type" => "text", "comment" => ""],
- "q1" => ["type" => "text", "comment" => ""],
- "q2" => ["type" => "text", "comment" => ""],
- "q3" => ["type" => "text", "comment" => ""],
- "q4" => ["type" => "text", "comment" => ""],
- "q5" => ["type" => "text", "comment" => ""],
- "q6" => ["type" => "text", "comment" => ""],
- "q7" => ["type" => "text", "comment" => ""],
- "q8" => ["type" => "text", "comment" => ""],
- "q9" => ["type" => "text", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid" => ["uid"],
- ]
- ],
- "poll_result" => [
- "comment" => "data for polls - currently unused",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "poll_id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["poll" => "id"]],
- "choice" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "poll_id" => ["poll_id"],
- ]
- ],
- "process" => [
- "comment" => "Currently running system processes",
- "fields" => [
- "pid" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "comment" => ""],
- "command" => ["type" => "varbinary(32)", "not null" => "1", "default" => "", "comment" => ""],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["pid"],
- "command" => ["command"],
- ]
- ],
- "profile" => [
- "comment" => "user profiles data",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
- "profile-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name of the profile"],
- "is-default" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Mark this profile as default profile"],
- "hide-friends" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Hide friend list from viewers of this profile"],
- "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "pdesc" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Title or description"],
- "dob" => ["type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00", "comment" => "Day of birth"],
- "address" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "locality" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "region" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "postal-code" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
- "country-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "hometown" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
- "marital" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "with" => ["type" => "text", "comment" => ""],
- "howlong" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "sexual" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "politic" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "religion" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "pub_keywords" => ["type" => "text", "comment" => ""],
- "prv_keywords" => ["type" => "text", "comment" => ""],
- "likes" => ["type" => "text", "comment" => ""],
- "dislikes" => ["type" => "text", "comment" => ""],
- "about" => ["type" => "text", "comment" => ""],
- "summary" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "music" => ["type" => "text", "comment" => ""],
- "book" => ["type" => "text", "comment" => ""],
- "tv" => ["type" => "text", "comment" => ""],
- "film" => ["type" => "text", "comment" => ""],
- "interest" => ["type" => "text", "comment" => ""],
- "romance" => ["type" => "text", "comment" => ""],
- "work" => ["type" => "text", "comment" => ""],
- "education" => ["type" => "text", "comment" => ""],
- "contact" => ["type" => "text", "comment" => ""],
- "homepage" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "xmpp" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "thumb" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "publish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "publish default profile in local directory"],
- "net-publish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "publish profile in global directory"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid_is-default" => ["uid", "is-default"],
- "pub_keywords" => ["FULLTEXT", "pub_keywords"],
- ]
- ],
- "profile_check" => [
- "comment" => "DFRN remote auth use",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id"],
- "dfrn_id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "sec" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "push_subscriber" => [
- "comment" => "Used for OStatus: Contains feed subscribers",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "callback_url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "topic" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "nickname" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "push" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Retrial counter"],
- "last_update" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of last successful trial"],
- "next_try" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Next retrial date"],
- "renewed" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of last subscription renewal"],
- "secret" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "next_try" => ["next_try"],
- ]
- ],
- "register" => [
- "comment" => "registrations requiring admin approval",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "hash" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "password" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "language" => ["type" => "varchar(16)", "not null" => "1", "default" => "", "comment" => ""],
- "note" => ["type" => "text", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "search" => [
- "comment" => "",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "term" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "uid" => ["uid"],
- ]
- ],
- "session" => [
- "comment" => "web session storage",
- "fields" => [
- "id" => ["type" => "bigint unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "sid" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => ""],
- "data" => ["type" => "text", "comment" => ""],
- "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "sid" => ["sid(64)"],
- "expire" => ["expire"],
- ]
- ],
- "sign" => [
- "comment" => "Diaspora signatures",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => "item.id"],
- "signed_text" => ["type" => "mediumtext", "comment" => ""],
- "signature" => ["type" => "text", "comment" => ""],
- "signer" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "iid" => ["UNIQUE", "iid"],
- ]
- ],
- "term" => [
- "comment" => "item taxonomy (categories, tags, etc.) table",
- "fields" => [
- "tid" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
- "oid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => ""],
- "otype" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "term" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "received" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "global" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- ],
- "indexes" => [
- "PRIMARY" => ["tid"],
- "term_type" => ["term(64)", "type"],
- "oid_otype_type_term" => ["oid", "otype", "type", "term(32)"],
- "uid_otype_type_term_global_created" => ["uid", "otype", "type", "term(32)", "global", "created"],
- "uid_otype_type_url" => ["uid", "otype", "type", "url(64)"],
- "guid" => ["guid(64)"],
- ]
- ],
- "thread" => [
- "comment" => "Thread related data",
- "fields" => [
- "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["item" => "id"],
- "comment" => "sequential ID"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
- "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Item owner"],
- "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Item author"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "commented" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "received" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "changed" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
- "wall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "private" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "moderated" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "starred" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "ignored" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "post-type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "Post type (personal note, bookmark, ...)"],
- "unseen" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""],
- "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "origin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "forum_mode" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "mention" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""],
- "bookmark" => ["type" => "boolean", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["iid"],
- "uid_network_commented" => ["uid", "network", "commented"],
- "uid_network_received" => ["uid", "network", "received"],
- "uid_contactid_commented" => ["uid", "contact-id", "commented"],
- "uid_contactid_received" => ["uid", "contact-id", "received"],
- "contactid" => ["contact-id"],
- "ownerid" => ["owner-id"],
- "authorid" => ["author-id"],
- "uid_received" => ["uid", "received"],
- "uid_commented" => ["uid", "commented"],
- "uid_wall_received" => ["uid", "wall", "received"],
- "private_wall_origin_commented" => ["private", "wall", "origin", "commented"],
- ]
- ],
- "tokens" => [
- "comment" => "OAuth usage",
- "fields" => [
- "id" => ["type" => "varchar(40)", "not null" => "1", "primary" => "1", "comment" => ""],
- "secret" => ["type" => "text", "comment" => ""],
- "client_id" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "relation" => ["clients" => "client_id"]],
- "expires" => ["type" => "int", "not null" => "1", "default" => "0", "comment" => ""],
- "scope" => ["type" => "varchar(200)", "not null" => "1", "default" => "", "comment" => ""],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- ]
- ],
- "user" => [
- "comment" => "The local users",
- "fields" => [
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "parent-uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"],
- "comment" => "The parent user that has full control about this user"],
- "guid" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this user"],
- "username" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name that this user is known by"],
- "password" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "encrypted password"],
- "legacy_password" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Is the password hash double-hashed?"],
- "nickname" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "nick- and user name"],
- "email" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "the users email address"],
- "openid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
- "timezone" => ["type" => "varchar(128)", "not null" => "1", "default" => "", "comment" => "PHP-legal timezone"],
- "language" => ["type" => "varchar(32)", "not null" => "1", "default" => "en", "comment" => "default language"],
- "register_date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "timestamp of registration"],
- "login_date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "timestamp of last login"],
- "default-location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Default for item.location"],
- "allow_location" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 allows to display the location"],
- "theme" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "user theme preference"],
- "pubkey" => ["type" => "text", "comment" => "RSA public key 4096 bit"],
- "prvkey" => ["type" => "text", "comment" => "RSA private key 4096 bit"],
- "spubkey" => ["type" => "text", "comment" => ""],
- "sprvkey" => ["type" => "text", "comment" => ""],
- "verified" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "user is verified through email"],
- "blocked" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 for user is blocked"],
- "blockwall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Prohibit contacts to post to the profile page of the user"],
- "hidewall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Hide profile details from unkown viewers"],
- "blocktags" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Prohibit contacts to tag the post of this user"],
- "unkmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Permit unknown people to send private mails to this user"],
- "cntunkmail" => ["type" => "int unsigned", "not null" => "1", "default" => "10", "comment" => ""],
- "notify-flags" => ["type" => "smallint unsigned", "not null" => "1", "default" => "65535", "comment" => "email notification options"],
- "page-flags" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "page/profile type"],
- "account-type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "prvnets" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "pwdreset" => ["type" => "varchar(255)", "comment" => "Password reset request token"],
- "pwdreset_time" => ["type" => "datetime", "comment" => "Timestamp of the last password reset request"],
- "maxreq" => ["type" => "int unsigned", "not null" => "1", "default" => "10", "comment" => ""],
- "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "account_removed" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if 1 the account is removed"],
- "account_expired" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
- "account_expires_on" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "timestamp when account expires and will be deleted"],
- "expire_notification_sent" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "timestamp of last warning of account expiration"],
- "def_gid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
- "allow_cid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
- "allow_gid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
- "deny_cid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
- "deny_gid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
- "openidserver" => ["type" => "text", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["uid"],
- "nickname" => ["nickname(32)"],
- ]
- ],
- "userd" => [
- "comment" => "Deleted usernames",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
- "username" => ["type" => "varchar(255)", "not null" => "1", "comment" => ""],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "username" => ["username(32)"],
- ]
- ],
- "user-contact" => [
- "comment" => "User specific public contact data",
- "fields" => [
- "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["contact" => "id"], "comment" => "Contact id of the linked public contact"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["user" => "uid"], "comment" => "User id"],
- "blocked" => ["type" => "boolean", "comment" => "Contact is completely blocked for this user"],
- "ignored" => ["type" => "boolean", "comment" => "Posts from this contact are ignored"],
- "collapsed" => ["type" => "boolean", "comment" => "Posts from this contact are collapsed"]
- ],
- "indexes" => [
- "PRIMARY" => ["uid", "cid"]
- ]
- ],
- "user-item" => [
- "comment" => "User specific item data",
- "fields" => [
- "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["item" => "id"], "comment" => "Item id"],
- "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["user" => "uid"], "comment" => "User id"],
- "hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Marker to hide an item from the user"],
- "ignored" => ["type" => "boolean", "comment" => "Ignore this thread if set"]
- ],
- "indexes" => [
- "PRIMARY" => ["uid", "iid"]
- ]
- ],
- "worker-ipc" => [
- "comment" => "Inter process communication between the frontend and the worker",
- "fields" => [
- "key" => ["type" => "int", "not null" => "1", "primary" => "1", "comment" => ""],
- "jobs" => ["type" => "boolean", "comment" => "Flag for outstanding jobs"],
- ],
- "indexes" => [
- "PRIMARY" => ["key"],
- ],
- "engine" => "MEMORY",
- ],
- "workerqueue" => [
- "comment" => "Background tasks queue entries",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "Auto incremented worker task id"],
- "parameter" => ["type" => "mediumtext", "comment" => "Task command"],
- "priority" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "Task priority"],
- "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Creation date"],
- "pid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Process id of the worker"],
- "executed" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Execution date"],
- "next_try" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Next retrial date"],
- "retrial" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Retrial counter"],
- "done" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Marked 1 when the task was done - will be deleted later"],
- ],
- "indexes" => [
- "PRIMARY" => ["id"],
- "done_parameter" => ["done", "parameter(64)"],
- "done_executed" => ["done", "executed"],
- "done_priority_created" => ["done", "priority", "created"],
- "done_priority_next_try" => ["done", "priority", "next_try"],
- "done_pid_next_try" => ["done", "pid", "next_try"],
- "done_pid_priority_created" => ["done", "pid", "priority", "created"]
- ]
- ],
- "storage" => [
- "comment" => "Data stored by Database storage backend",
- "fields" => [
- "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "Auto incremented image data id"],
- "data" => ["type" => "longblob", "not null" => "1", "comment" => "file data"]
- ],
- "indexes" => [
- "PRIMARY" => ["id"]
- ]
- ]
-];
-
+++ /dev/null
-<?php
-
-// CONFIG.PHP
-
-/* This file declares the default values for the base config of Friendica.
- *
- * These configuration values aren't accessible from the admin settings page and custom values must be set in config/local.config.php
- *
- * Please don't edit this file directly as its content may change in the upcoming versions.
- */
-
-return [
- 'database' => [
- // host (String)
- // Hostname or IP address of the database server.
- // Can contain the port number with the syntax "hostname:port".
- 'hostname' => '',
-
- // user (String)
- // Database user name. Please don't use "root".
- 'username' => '',
-
- // pass (String)
- // Database user password. Please don't use empty passwords.
- 'password' => '',
-
- // base (String)
- // Database name.
- 'database' => '',
-
- // charset (String)
- // Database connexion charset. Changing this value will likely corrupt special characters.
- 'charset' => 'utf8mb4',
- ],
- 'config' => [
- // admin_email (Comma-separated list)
- // In order to perform system administration via the admin panel,
- // this must precisely match the email address of the person logged in.
- 'admin_email' => '',
-
- // admin_nickname (String)
- // Nickname of the main admin user, used if there are more than one admin user defined in config => admin_email.
- 'admin_nickname' => '',
-
- // max_import_size (Integer)
- // Maximum body size of DFRN and Mail messages in characters. 0 is unlimited.
- 'max_import_size' => 200000,
-
- // php_path (String)
- // Location of PHP command line processor.
- 'php_path' => 'php',
- ],
- 'system' => [
- // allowed_link_protocols (Array)
- // Allowed protocols in links URLs, add at your own risk. http is always allowed.
- 'allowed_link_protocols' => ['ftp', 'ftps', 'mailto', 'cid', 'gopher'],
-
- // always_show_preview (Boolean)
- // Only show small preview pictures.
- 'always_show_preview' => false,
-
- // archival_days (Integer)
- // Number of days that we try to deliver content before we archive a contact.
- 'archival_days' => 32,
-
- // auth_cookie_lifetime (Integer)
- // Number of days that should pass without any activity before a user who
- // chose "Remember me" when logging in is considered logged out.
- 'auth_cookie_lifetime' => 7,
-
- // block_local_dir (Boolean)
- // Deny public access to the local user directory.
- 'block_local_dir' => false,
-
- // cron_interval (Integer)
- // Minimal period in minutes between two calls of the "Cron" worker job.
- 'cron_interval' => 5,
-
- // cache_driver (database|memcache|memcached|redis)
- // Whether to use Memcache or Memcached or Redis to store temporary cache.
- 'cache_driver' => 'database',
-
- // config_adapter (jit|preload)
- // Allow to switch the configuration adapter to improve performances at the cost of memory consumption.
- 'config_adapter' => 'jit',
-
- // curl_range_bytes (Integer)
- // Maximum number of bytes that should be fetched. Default is 0, which mean "no limit".
- 'curl_range_bytes' => 0,
-
- // crawl_permit_period (Integer)
- // Period in seconds between allowed searches when the number of free searches is reached and "permit_crawling" is activated.
- 'crawl_permit_period' => 60,
-
- // db_log (Path)
- // Name of a logfile to log slow database queries.
- 'db_log' => '',
-
- // db_log_index (Path)
- // Name of a logfile to log queries with bad indexes.
- 'db_log_index' => '',
-
- // db_log_index_watch (Comma-separated list)
- // Watchlist of indexes to watch.
- 'db_log_index_watch' => '',
-
- // db_log_index_blacklist (Comma-separated list)
- // Blacklist of indexes that shouldn't be watched.
- 'db_log_index_blacklist' => '',
-
- // db_loglimit (Integer)
- // If a database call lasts longer than this value in seconds it is logged.
- // Inactive if system => db_log is empty.
- 'db_loglimit' => 10,
-
- // db_loglimit_index (Integer)
- // Number of index rows needed to be logged for indexes on the watchlist. 0 to disable.
- 'db_loglimit_index' => 0,
-
- // db_loglimit_index_high (Integer)
- // Number of index rows to be logged anyway (for any index). 0 to disable.
- 'db_loglimit_index_high' => 0,
-
- // dbclean_expire_conversation (Integer)
- // When DBClean is enabled, any entry in the conversation table will be deleted after this many days.
- // This data is used for ActivityPub, so it shouldn't be lower than the average duration of a discussion.
- 'dbclean_expire_conversation' => 90,
-
- // dbclean-expire-limit (Integer)
- // This defines the number of items that are to be deleted in a single call.
- // Reduce this value when you are getting memory issues.
- 'dbclean-expire-limit' => 1000,
-
- // diaspora_test (Boolean)
- // For development only. Disables the message transfer.
- 'diaspora_test' => false,
-
- // disable_email_validation (Boolean)
- // Disables the check if a mail address is in a valid format and can be resolved via DNS.
- 'disable_email_validation' => false,
-
- // disable_implicit_mentions (Boolean) since 2019.03
- // Implicit mentions are mentions in the body of replies that are redundant in a thread-enabled system like Friendica.
- // This config key disables the gathering of implicit mentions in incoming and outgoing posts.
- // Also disables the default automatic removal of implicit mentions from the body of incoming posts.
- // Also disables the default automatic addition of implicit mentions in the body of outgoing posts.
- // Disabling implicit mentions also affects the "explicit_mentions" additional feature by limiting it
- // to the replied-to post author mention in the comment boxes.
- 'disable_implicit_mentions' => false,
-
- // disable_url_validation (Boolean)
- // Disables the DNS lookup of an URL.
- 'disable_url_validation' => false,
-
- // disable_password_exposed (Boolean)
- // Disable the exposition check against the remote haveibeenpwned API on password change.
- 'disable_password_exposed' => false,
-
- // disable_polling (Boolean)
- // Disable the polling of DFRN and OStatus contacts through onepoll.php.
- 'disable_polling' => false,
-
- // dlogfile (Path)
- // location of the developer log file.
- 'dlogfile' => '',
-
- // dlogip (String)
- // restricts develop log writes to requests originating from this IP address.
- 'dlogip' => '',
-
- // free_crawls (Integer)
- // Number of "free" searches when system => permit_crawling is enabled.
- 'free_crawls' => 10,
-
- // frontend_worker_timeout (Integer)
- // Value in minutes after we think that a frontend task was killed by the webserver.
- 'frontend_worker_timeout' => 10,
-
- // groupedit_image_limit (Integer)
- // Number of contacts at which the group editor should switch from display the profile pictures of the contacts to only display the names.
- // This can alternatively be set on a per account basis in the pconfig table.
- 'groupedit_image_limit' => 400,
-
- // hsts (Boolean)
- // Enables the sending of HTTP Strict Transport Security headers.
- 'hsts' => false,
-
- // ignore_cache (Boolean)
- // For development only. Disables the item cache.
- 'ignore_cache' => false,
-
- // instances_social_key (String)
- // Key to the API of https://instances.social which retrieves data about mastodon servers.
- // See https://instances.social/api/token to get an API key.
- 'instances_social_key' => '',
-
- // ipv4_resolve (Boolean)
- // Resolve IPV4 addresses only. Don't resolve to IPV6.
- 'ipv4_resolve' => false,
-
- // invitation_only (Boolean)
- // If set true registration is only possible after a current member of the node has send an invitation.
- 'invitation_only' => false,
-
- // like_no_comment (Boolean)
- // Don't update the "commented" value of an item when it is liked.
- 'like_no_comment' => false,
-
- // local_block (Boolean)
- // Used in conjunction with "block_public".
- 'local_block' => false,
-
- // local_search (Boolean)
- // Blocks search for users who are not logged in to prevent crawlers from blocking your system.
- 'local_search' => false,
-
- // local_tags (Boolean)
- // If activated, all hashtags will point to the local server.
- 'local_tags' => false,
-
- // logger_config (String)
- // Sets the logging adapter of Friendica globally (monolog, syslog, stream)
- 'logger_config' => 'stream',
-
- // max_batch_queue (Integer)
- // Maximum number of batched queue items for a single contact before subsequent messages are discarded.
- 'max_batch_queue' => 1000,
-
- // max_connections (Integer)
- // The maximum number of database connections which can be in use before the worker process is deferred to its next interval.
- // When the system can't detect the maximum numbers of connection then this value can be used. Use 0 for auto-detection.
- 'max_connections' => 0,
-
- // max_connections_level (Integer 0-100)
- // The maximum percentage of connections that are allowed to let the worker start.
- 'max_connections_level' => 75,
-
- // max_contact_queue (Integer)
- // Maximum number of queue items for a single contact before subsequent messages are discarded.
- 'max_contact_queue' => 500,
-
- // max_image_length (Integer)
- // An alternate way of limiting picture upload sizes.
- // Specify the maximum pixel length that pictures are allowed to be (for non-square pictures, it will apply to the longest side).
- // Pictures longer than this length will be resized to be this length (on the longest side, the other side will be scaled appropriately).
- // If you don't want to set a maximum length, set to -1.
- 'max_image_length' => -1,
-
- // max_processes_backend (Integer)
- // Maximum number of concurrent database processes for background tasks.
- 'max_processes_backend' => 5,
-
- // max_processes_frontend (Integer)
- // Maximum number of concurrent database processes for foreground tasks.
- 'max_processes_frontend' => 20,
-
- // maximagesize (Integer)
- // Maximum size in bytes of an uploaded photo.
- 'maximagesize' => 800000,
-
- // memcache_host (String)
- // Host name of the memcache daemon.
- 'memcache_host' => '127.0.0.1',
-
- // memcache_port (Integer)
- // Port number of the memcache daemon.
- 'memcache_port' => 11211,
-
- // memcached_hosts (Array)
- // Array of Memcached servers info [host, port(, weight)], see Memcached::addServers.
- 'memcached_hosts' => [
- ['127.0.0.1', '11211'],
- ],
-
- // min_poll_interval (Integer)
- // minimal distance in minutes between two polls for a contact. Reasonable values are between 1 and 59.
- 'min_poll_interval' => 1,
-
- // no_count (Boolean)
- // Don't do count calculations (currently only when showing photo albums).
- 'no_count' => false,
-
- // no_oembed (Boolean)
- // Don't use OEmbed to fetch more information about a link.
- 'no_oembed' => false,
-
- // no_smilies (Boolean)
- // Don't show smilies.
- 'no_smilies' => false,
-
- // no_view_full_size (Boolean)
- // Don't add the link "View full size" under a resized image.
- 'no_view_full_size' => false,
-
- // optimize_items (Boolean)
- // Triggers an SQL command to optimize the item table before expiring items.
- 'optimize_items' => false,
-
- // paranoia (Boolean)
- // Log out users if their IP address changed.
- 'paranoia' => false,
-
- // permit_crawling (Boolean)
- // Restricts the search for not logged in users to one search per minute.
- 'permit_crawling' => false,
-
- // pidfile (Path)
- // Daemon pid file path. For example: pidfile = /path/to/daemon.pid
- 'pidfile' => '',
-
- // png_quality (Integer)
- // Sets the ImageMagick compression level for PNG images. Values ranges from 0 (uncompressed) to 9 (most compressed).
- 'png_quality' => 8,
-
- // profiler (Boolean)
- // Enable internal timings to help optimize code. Needed for "rendertime" addon.
- 'profiler' => false,
-
- // proxy_cache_time (Integer)
- // Period in seconds after which the cache is cleared.
- 'proxy_cache_time' => 86400,
-
- // pushpoll_frequency (Integer)
- // Frequency of contact poll for subhub contact using the DFRM or OStatus network.
- // Available values:
- // - 5 = every month
- // - 4 = every week
- // - 3 = every day
- // - 2 = twice a day
- // - 1 = every hour
- // - 0 = every minute
- 'pushpoll_frequency' => 3,
-
- // queue_no_dead_check (Boolean)
- // Ignore if the target contact or server seems to be dead during queue delivery.
- 'queue_no_dead_check' => false,
-
- // redis_host (String)
- // Host name of the redis daemon.
- 'redis_host' => '127.0.0.1',
-
- // redis_port (String)
- // Port number of the redis daemon.
- 'redis_port' => 6379,
-
- // redis_db (Integer)
- // The sub-database of redis (0 - 15 possible sub-databases)
- 'redis_db' => 0,
-
- // redis_password (String)
- // The authentication password for the redis database
- 'redis_password' => null,
-
- // session_handler (database|cache|native)
- // Whether to use Cache to store session data or to use PHP native session storage.
- 'session_handler' => 'database',
-
- // remove_multiplicated_lines (Boolean)
- // If enabled, multiple linefeeds in items are stripped to a single one.
- 'remove_multiplicated_lines' => false,
-
- // sendmail_params (Boolean)
- // Normal sendmail command parameters will be added when the PHP mail() function is called for sending e-mails.
- // This ensures the Sender Email address setting is applied to the message envelope rather than the host's default address.
- // Set to false if your non-sendmail agent is incompatible, or to restore old behavior of using the host address.
- 'sendmail_params' => true,
-
- // show_global_community_hint (Boolean)
- // When the global community page is enabled, use this option to display a hint above the stream, that this is a collection of all public top-level postings that arrive on your node.
- 'show_global_community_hint' => false,
-
- // show_unsupported_addons (Boolean)
- // Show all addons including the unsupported ones.
- 'show_unsupported_addons' => false,
-
- // show_unsupported_themes (Boolean)
- // Show all themes including the unsupported ones.
- 'show_unsupported_themes' => false,
-
- // throttle_limit_day (Integer)
- // Maximum number of posts that a user can send per day with the API. 0 to disable daily throttling.
- 'throttle_limit_day' => 0,
-
- // throttle_limit_week (Integer)
- // Maximum number of posts that a user can send per week with the API. 0 to disable weekly throttling.
- 'throttle_limit_week' => 0,
-
- // throttle_limit_month (Integer)
- // Maximum number of posts that a user can send per month with the API. 0 to disable monthly throttling.
- 'throttle_limit_month' => 0,
-
- // username_min_length (Integer)
- // The minimum character length a username can be.
- // This length is check once the username has been trimmed and multiple spaces have been collapsed into one.
- // Minimum for this config value is 1. Maximum is 64 as the resulting profile URL mustn't be longer than 255 chars.
- 'username_min_length' => 3,
-
- // username_max_length (Integer)
- // The maximum character length a username can be.
- // This length is check once the username has been trimmed and multiple spaces have been collapsed into one.
- // Minimum for this config value is 1. Maximum is 64 as the resulting profile URL mustn't be longer than 255 chars.
- 'username_max_length' => 48,
-
- // worker_cooldown (Integer)
- // Cooldown period in seconds after each worker function call.
- 'worker_cooldown' => 0,
-
- // worker_debug (Boolean)
- // If enabled, it prints out the number of running processes split by priority.
- 'worker_debug' => false,
-
- // worker_fetch_limit (Integer)
- // Number of worker tasks that are fetched in a single query.
- 'worker_fetch_limit' => 1,
-
- // worker_jpm (Boolean)
- // If enabled, it prints out the jobs per minute.
- 'worker_jpm' => false,
-
- // worker_jpm_range (String)
- // List of minutes for the jobs per minute (JPM) calculation
- 'worker_jpm_range' => '1, 10, 60',
-
- // worker_load_exponent (Integer)
- // Default 3, which allows only 25% of the maximum worker queues when server load reaches around 37% of maximum load.
- // For a linear response where 25% of worker queues are allowed at 75% of maximum load, set this to 1.
- // Setting 0 would allow maximum worker queues at all times, which is not recommended.
- 'worker_load_exponent' => 3,
-
- // xrd_timeout (Integer)
- // Timeout in seconds for fetching the XRD links.
- 'xrd_timeout' => 20,
- ],
- 'experimental' => [
- // exp_themes (Boolean)
- // Show experimental themes in user settings.
- 'exp_themes' => false,
- ],
- 'theme' => [
- // hide_eventlist (Boolean)
- // Don't show the birthdays and events on the profile and network page.
- 'hide_eventlist' => false,
- ],
- 'jabber' => [
- // debug (Boolean)
- // Enable debug level for the jabber account synchronisation.
- 'debug' => false,
- // lockpath (Path)
- // Must be writable by the ejabberd process. if set then it will prevent the running of multiple processes.
- 'lockpath' => '',
- ],
- 'debug' => [
- // ap_inbox_log (Boolean)
- // Logs every call to /inbox as a JSON file in Friendica's temporary directory
- 'ap_inbox_log' => false,
-
- // total_ap_delivery (Boolean)
- // Deliver via AP to every possible receiver and we suppress the delivery to these contacts with other protocols
- 'total_ap_delivery' => false,
- ]
-];
*
* Then set the following for your MySQL installation
*
- * If you're unsure about what any of the config keys below do, please check the config/defaults.config.php file for
+ * If you're unsure about what any of the config keys below do, please check the static/defaults.config.php file for
* detailed documentation of their data type and behavior.
*/
+++ /dev/null
-<?php
-
-// SETTINGS.PHP
-
-/* This file declares the default values for the admin settings of Friendica.
- *
- * These values will be overridden by the admin settings page.
- *
- * Please don't edit this file directly as its content may change in the upcoming versions.
- */
-
-return [
- 'config' => [
- // info (String)
- // Plaintext description of this node, used in the /friendica module.
- 'info' => '',
-
- // register_policy (Constant)
- // Your choices are OPEN, APPROVE, or CLOSED.
- // Be certain to create your own personal account before setting CLOSED.
- // APPROVE requires you set system.admin_email to the email address of an
- // already registered person who can authorize and/or approve/deny the request.
- 'register_policy' => \Friendica\Module\Register::CLOSED,
-
- // register_text (String)
- // Will be displayed prominently on the registration page.
- 'register_text' => '',
-
- // sitename (String)
- // Displayed server name.
- 'sitename' => 'Friendica Social Network',
- ],
- 'system' => [
- // account_abandon_days (Integer)
- // Will not waste system resources polling external sites for abandonded accounts.
- // Enter 0 for no time limit.
- 'account_abandon_days' => 0,
-
- // addon (Comma-separated list)
- // Manual list of addons which are enabled on this system.
- 'addon' => '',
-
- // allowed_themes (Comma-separated list)
- // Themes users can change to in their settings.
- 'allowed_themes' => 'quattro,vier,duepuntozero,smoothly',
-
- // debugging (boolean)
- // Enable/Disable Debugging (logging)
- 'debugging' => false,
-
- // default_timezone (String)
- // Choose a default timezone. See https://secure.php.net/manual/en/timezones.php
- // It only applies to timestamps for anonymous viewers.
- 'default_timezone' => 'UTC',
-
- // directory (String)
- // URL of the global directory.
- 'directory' => 'https://dir.friendica.social',
-
- // forbidden_nicknames (Comma-separated list)
- // Prevents users from registering the specified nicknames on this node.
- // Default value comprises classic role names from RFC 2142.
- 'forbidden_nicknames' => 'info, marketing, sales, support, abuse, noc, security, postmaster, hostmaster, usenet, news, webmaster, www, uucp, ftp, root, sysop',
-
- // jpeg_quality (Integer)
- // Sets the ImageMagick quality level for JPEG images. Values ranges from 50 (awful) to 100 (near perfect).
- 'jpeg_quality' => 100,
-
- // language (String)
- // System default languague, inluding admin-created user default language.
- // Two-letters ISO 639-1 code.
- 'language' => 'en',
-
- // logfile (String)
- // The logfile for storing logs.
- // Can be a full path or a relative path to the Friendica home directory
- 'logfile' => 'log/friendica.log',
-
- // loglevel (String)
- // The loglevel for all logs.
- // Has to be one of these values: emergency, alert, critical, error, warning, notice, info, debug
- 'loglevel' => 'notice',
-
- // max_image_length (Integer)
- // An alternate way of limiting picture upload sizes.
- // Specify the maximum pixel length that pictures are allowed to be (for non-square pictures, it will apply to the longest side).
- // Pictures longer than this length will be resized to be this length (on the longest side, the other side will be scaled appropriately).
- // If you don't want to set a maximum length, set to -1.
- 'max_image_length' => -1,
-
- // maximagesize (Integer)
- // Maximum size in bytes of an uploaded photo.
- 'maximagesize' => 800000,
-
- // no_regfullname (Boolean)
- // Allow pseudonyms (true) or enforce a space between first name and last name in Full name, as an anti spam measure (false).
- 'no_regfullname' => true,
-
- // optimize_max_tablesize (Integer)
- // Maximum table size (in MB) for the automatic optimization.
- // -1 to disable automatic optimization.
- // 0 to use internal default (100MB)
- 'optimize_max_tablesize' => -1,
-
- // maxloadavg (Integer)
- // Maximum system load before delivery and poll processes are deferred.
- 'maxloadavg' => 20,
-
- // rino_encrypt (Integer)
- // Server-to-server private message encryption (RINO).
- // Encryption will only be provided if this setting is set to a non zero value on both servers.
- // Set to 0 to disable, 2 to enable, 1 is deprecated but won't need mcrypt.
- 'rino_encrypt' => 2,
-
- // temppath (String)
- // Custom temporary file directory
- 'temppath' => '',
-
- // theme (String)
- // System theme name.
- 'theme' => 'vier',
-
- // url (String)
- // The fully-qualified URL of this Friendica node.
- // Used by the worker in a non-HTTP execution environment.
- 'url' => '',
- ],
-
- // Used in the admin settings to lock certain features
- 'featurelock' => [
- ],
-];
### Configuration location
-The `config` directory holds key configuration files:
+The `config` directory holds key configuration files and can have different config files.
+All of them have to end with `.config.php` and must not include `-sample` in their name.
-- `defaults.config.php` holds the default values for all the configuration keys that can only be set in `local.config.php`.
-- `settings.config.php` holds the default values for some configuration keys that are set through the admin settings page.
+Some examples of common known configuration files:
- `local.config.php` holds the current node custom configuration.
- `addon.config.php` is optional and holds the custom configuration for specific addons.
Addons can define their own default configuration values in `addon/[addon]/config/[addon].config.php` which is loaded when the addon is activated.
+### Static Configuration location
+
+The `static` directory holds the codebase default configurations files.
+They must not be changed by users, because they can get changed from release to release.
+
+Currently, the following configurations are included:
+- `defaults.config.php` holds the default values for all the configuration keys that can only be set in `local.config.php`.
+- `settings.config.php` holds the default values for some configuration keys that are set through the admin settings page.
+
#### Migrating from .htconfig.php to config/local.config.php
The legacy `.htconfig.php` configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release.
**Attention:** Please be warned that you shouldn't use one of these values without the knowledge what it could trigger.
Especially don't do that with undocumented values.
-These configurations keys and their default value are listed in `config/defaults.config.php` and should be overwritten in `config/local.config.php`.
+These configurations keys and their default value are listed in `static/defaults.config.php` and should be overwritten in `config/local.config.php`.
## Administrator Options
use Friendica\Model\Profile;
use Friendica\Network\HTTPException;
use Friendica\Util\BaseURL;
-use Friendica\Util\Config\ConfigFileLoader;
+use Friendica\Util\ConfigFileLoader;
use Friendica\Util\HTTPSignature;
use Friendica\Util\Profiler;
use Friendica\Util\Strings;
$this->getMode()->determine($this->getBasePath());
if ($this->getMode()->has(App\Mode::DBAVAILABLE)) {
- $loader = new ConfigFileLoader($this->getBasePath(), $this->getMode());
- $this->config->getCache()->load($loader->loadCoreConfig('addon'), true);
-
$this->profiler->update(
$this->config->get('system', 'profiler', false),
$this->config->get('rendertime', 'callstack', false));
use Friendica\Core\Theme;
use Friendica\Util\BasePath;
use Friendica\Util\BaseURL;
-use Friendica\Util\Config\ConfigFileLoader;
+use Friendica\Util\ConfigFileLoader;
use RuntimeException;
class AutomaticInstallation extends Console
/**
* @brief Loads all configuration values of family into a cached storage.
*
- * All configuration values of the system are stored in the cache ( @see IConfigCache )
+ * All configuration values of the system are stored in the cache ( @see ConfigCache )
*
* @param string $cat The category of the configuration value
*
*
* Get a particular config value from the given category ($cat)
* and the $key from a cached storage either from the $this->configAdapter
- * (@see IConfigAdapter ) or from the $this->configCache (@see IConfigCache ).
+ * (@see IConfigAdapter ) or from the $this->configCache (@see ConfigCache ).
*
* @param string $cat The category of the configuration value
* @param string $key The configuration key to query
* Loads the database structure definition from the config/dbstructure.config.php file.
* On first pass, defines DB_UPDATE_VERSION constant.
*
- * @see config/dbstructure.config.php
+ * @see static/dbstructure.config.php
* @param boolean $with_addons_structure Whether to tack on addons additional tables
* @param string $basePath The base path of this application
* @return array
{
if (!self::$definition) {
- $filename = $basePath . '/config/dbstructure.config.php';
+ $filename = $basePath . '/static/dbstructure.config.php';
if (!is_readable($filename)) {
- throw new Exception('Missing database structure config file config/dbstructure.config.php');
+ throw new Exception('Missing database structure config file static/dbstructure.config.php');
}
$definition = require $filename;
if (!$definition) {
- throw new Exception('Corrupted database structure config file config/dbstructure.config.php');
+ throw new Exception('Corrupted database structure config file static/dbstructure.config.php');
}
self::$definition = $definition;
use Friendica\Core;
use Friendica\Core\Config;
use Friendica\Core\Config\Cache;
+use Friendica\Util\ConfigFileLoader;
use Friendica\Model\Config\Config as ConfigModel;
use Friendica\Model\Config\PConfig as PConfigModel;
-use Friendica\Util\Config\ConfigFileLoader;
class ConfigFactory
{
use Friendica\Factory;
use Friendica\Util\BasePath;
use Friendica\Util\BaseURL;
-use Friendica\Util\Config;
+use Friendica\Util\ConfigFileLoader;
class DependencyFactory
{
$basePath = BasePath::create($directory, $_SERVER);
$mode = new App\Mode($basePath);
$router = new App\Router();
- $configLoader = new Config\ConfigFileLoader($basePath, $mode);
+ $configLoader = new ConfigFileLoader($basePath, $mode);
$configCache = Factory\ConfigFactory::createCache($configLoader);
$profiler = Factory\ProfilerFactory::create($configCache);
$database = Factory\DBFactory::init($configCache, $profiler, $_SERVER);
use Friendica\Database\DBStructure;
use Friendica\Model\Register;
use Friendica\Module\BaseAdminModule;
-use Friendica\Util\Config\ConfigFileLoader;
+use Friendica\Util\ConfigFileLoader;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Network;
+++ /dev/null
-<?php
-
-namespace Friendica\Util\Config;
-
-use Friendica\App;
-use Friendica\Core\Addon;
-use Friendica\Core\Config\Cache\ConfigCache;
-
-/**
- * The ConfigFileLoader loads config-files and stores them in a ConfigCache ( @see ConfigCache )
- *
- * It is capable of loading the following config files:
- * - *.config.php (current)
- * - *.ini.php (deprecated)
- * - *.htconfig.php (deprecated)
- */
-class ConfigFileLoader extends ConfigFileManager
-{
- /**
- * @var App\Mode
- */
- private $appMode;
-
- public function __construct($baseDir, App\Mode $mode)
- {
- parent::__construct($baseDir);
- $this->appMode = $mode;
- }
-
- /**
- * Load the configuration files into an configuration cache
- *
- * First loads the default value for all the configuration keys, then the legacy configuration files, then the
- * expected local.config.php
- *
- * @param ConfigCache $config The config cache to load to
- * @param bool $raw Setup the raw config format
- *
- * @throws \Exception
- */
- public function setupCache(ConfigCache $config, $raw = false)
- {
- $config->load($this->loadCoreConfig('defaults'));
- $config->load($this->loadCoreConfig('settings'));
-
- $config->load($this->loadLegacyConfig('htpreconfig'), true);
- $config->load($this->loadLegacyConfig('htconfig'), true);
-
- $config->load($this->loadCoreConfig('local'), true);
-
- // In case of install mode, add the found basepath (because there isn't a basepath set yet
- if (!$raw && ($this->appMode->isInstall() || empty($config->get('system', 'basepath')))) {
- // Setting at least the basepath we know
- $config->set('system', 'basepath', $this->baseDir);
- }
- }
-
- /**
- * Tries to load the specified core-configuration and returns the config array.
- *
- * @param string $name The name of the configuration (default is empty, which means 'local')
- *
- * @return array The config array (empty if no config found)
- *
- * @throws \Exception if the configuration file isn't readable
- */
- public function loadCoreConfig($name = '')
- {
- if (!empty($this->getConfigFullName($name))) {
- return $this->loadConfigFile($this->getConfigFullName($name));
- } elseif (!empty($this->getIniFullName($name))) {
- return $this->loadINIConfigFile($this->getIniFullName($name));
- } else {
- return [];
- }
- }
-
- /**
- * Tries to load the specified addon-configuration and returns the config array.
- *
- * @param string $name The name of the configuration
- *
- * @return array The config array (empty if no config found)
- *
- * @throws \Exception if the configuration file isn't readable
- */
- public function loadAddonConfig($name)
- {
- $filepath = $this->baseDir . DIRECTORY_SEPARATOR . // /var/www/html/
- Addon::DIRECTORY . DIRECTORY_SEPARATOR . // addon/
- $name . DIRECTORY_SEPARATOR . // openstreetmap/
- self::SUBDIRECTORY . DIRECTORY_SEPARATOR . // config/
- $name . ".config.php"; // openstreetmap.config.php
-
- if (file_exists($filepath)) {
- return $this->loadConfigFile($filepath);
- } else {
- return [];
- }
- }
-
- /**
- * Tries to load the legacy config files (.htconfig.php, .htpreconfig.php) and returns the config array.
- *
- * @param string $name The name of the config file (default is empty, which means .htconfig.php)
- *
- * @return array The configuration array (empty if no config found)
- *
- * @deprecated since version 2018.09
- */
- private function loadLegacyConfig($name = '')
- {
- $config = [];
- if (!empty($this->getHtConfigFullName($name))) {
- $a = new \stdClass();
- $a->config = [];
- include $this->getHtConfigFullName($name);
-
- $htConfigCategories = array_keys($a->config);
-
- // map the legacy configuration structure to the current structure
- foreach ($htConfigCategories as $htConfigCategory) {
- if (is_array($a->config[$htConfigCategory])) {
- $keys = array_keys($a->config[$htConfigCategory]);
-
- foreach ($keys as $key) {
- $config[$htConfigCategory][$key] = $a->config[$htConfigCategory][$key];
- }
- } else {
- $config['config'][$htConfigCategory] = $a->config[$htConfigCategory];
- }
- }
-
- unset($a);
-
- if (isset($db_host)) {
- $config['database']['hostname'] = $db_host;
- unset($db_host);
- }
- if (isset($db_user)) {
- $config['database']['username'] = $db_user;
- unset($db_user);
- }
- if (isset($db_pass)) {
- $config['database']['password'] = $db_pass;
- unset($db_pass);
- }
- if (isset($db_data)) {
- $config['database']['database'] = $db_data;
- unset($db_data);
- }
- if (isset($config['system']['db_charset'])) {
- $config['database']['charset'] = $config['system']['db_charset'];
- }
- if (isset($pidfile)) {
- $config['system']['pidfile'] = $pidfile;
- unset($pidfile);
- }
- if (isset($default_timezone)) {
- $config['system']['default_timezone'] = $default_timezone;
- unset($default_timezone);
- }
- if (isset($lang)) {
- $config['system']['language'] = $lang;
- unset($lang);
- }
- }
-
- return $config;
- }
-
- /**
- * Tries to load the specified legacy configuration file and returns the config array.
- *
- * @deprecated since version 2018.12
- * @param string $filepath
- *
- * @return array The configuration array
- * @throws \Exception
- */
- private function loadINIConfigFile($filepath)
- {
- $contents = include($filepath);
-
- $config = parse_ini_string($contents, true, INI_SCANNER_TYPED);
-
- if ($config === false) {
- throw new \Exception('Error parsing INI config file ' . $filepath);
- }
-
- return $config;
- }
-
- /**
- * Tries to load the specified configuration file and returns the config array.
- *
- * The config format is PHP array and the template for configuration files is the following:
- *
- * <?php return [
- * 'section' => [
- * 'key' => 'value',
- * ],
- * ];
- *
- * @param string $filepath The filepath of the
- * @return array The config array0
- *
- * @throws \Exception if the config cannot get loaded.
- */
- private function loadConfigFile($filepath)
- {
- $config = include($filepath);
-
- if (!is_array($config)) {
- throw new \Exception('Error loading config file ' . $filepath);
- }
-
- return $config;
- }
-}
+++ /dev/null
-<?php
-
-namespace Friendica\Util\Config;
-
-/**
- * An abstract class in case of handling with config files
- */
-abstract class ConfigFileManager
-{
- /**
- * The Sub directory of the config-files
- * @var string
- */
- const SUBDIRECTORY = 'config';
-
- /**
- * The default name of the user defined config file
- * @var string
- */
- const CONFIG_LOCAL = 'local';
-
- /**
- * The default name of the user defined ini file
- * @var string
- */
- const CONFIG_INI = 'local';
-
- /**
- * The default name of the user defined legacy config file
- * @var string
- */
- const CONFIG_HTCONFIG = 'htconfig';
-
- protected $baseDir;
- protected $configDir;
-
- /**
- * @param string $baseDir The base directory of Friendica
- */
- public function __construct($baseDir)
- {
- $this->baseDir = $baseDir;
- $this->configDir = $baseDir . DIRECTORY_SEPARATOR . self::SUBDIRECTORY;
- }
-
- /**
- * Gets the full name (including the path) for a *.config.php (default is local.config.php)
- *
- * @param string $name The config name (default is empty, which means local.config.php)
- *
- * @return string The full name or empty if not found
- */
- protected function getConfigFullName($name = '')
- {
- $name = !empty($name) ? $name : self::CONFIG_LOCAL;
-
- $fullName = $this->configDir . DIRECTORY_SEPARATOR . $name . '.config.php';
- return file_exists($fullName) ? $fullName : '';
- }
-
- /**
- * Gets the full name (including the path) for a *.ini.php (default is local.ini.php)
- *
- * @param string $name The config name (default is empty, which means local.ini.php)
- *
- * @return string The full name or empty if not found
- */
- protected function getIniFullName($name = '')
- {
- $name = !empty($name) ? $name : self::CONFIG_INI;
-
- $fullName = $this->configDir . DIRECTORY_SEPARATOR . $name . '.ini.php';
- return file_exists($fullName) ? $fullName : '';
- }
-
- /**
- * Gets the full name (including the path) for a .*.php (default is .htconfig.php)
- *
- * @param string $name The config name (default is empty, which means .htconfig.php)
- *
- * @return string The full name or empty if not found
- */
- protected function getHtConfigFullName($name = '')
- {
- $name = !empty($name) ? $name : self::CONFIG_HTCONFIG;
-
- $fullName = $this->baseDir . DIRECTORY_SEPARATOR . '.' . $name . '.php';
- return file_exists($fullName) ? $fullName : '';
- }
-}
--- /dev/null
+<?php
+
+namespace Friendica\Util;
+
+use Exception;
+use Friendica\App;
+use Friendica\Core\Addon;
+use Friendica\Core\Config\Cache\ConfigCache;
+
+/**
+ * The ConfigFileLoader loads config-files and stores them in a ConfigCache ( @see ConfigCache )
+ *
+ * It is capable of loading the following config files:
+ * - *.config.php (current)
+ * - *.ini.php (deprecated)
+ * - *.htconfig.php (deprecated)
+ */
+class ConfigFileLoader
+{
+ /**
+ * The Sub directory of the config-files
+ *
+ * @var string
+ */
+ const CONFIG_DIR = 'config';
+
+ /**
+ * The Sub directory of the static config-files
+ *
+ * @var string
+ */
+ const STATIC_DIR = 'static';
+
+ /**
+ * The default name of the user defined ini file
+ *
+ * @var string
+ */
+ const CONFIG_INI = 'local';
+
+ /**
+ * The default name of the user defined legacy config file
+ *
+ * @var string
+ */
+ const CONFIG_HTCONFIG = 'htconfig';
+
+ /**
+ * The sample string inside the configs, which shouldn't get loaded
+ *
+ * @var string
+ */
+ const SAMPLE_END = '-sample';
+
+ /**
+ * @var App\Mode
+ */
+ private $appMode;
+ /**
+ * @var string
+ */
+ private $baseDir;
+ /**
+ * @var string
+ */
+ private $configDir;
+ /**
+ * @var string
+ */
+ private $staticDir;
+
+ public function __construct($baseDir, App\Mode $mode)
+ {
+ $this->baseDir = $baseDir;
+ $this->configDir = $baseDir . DIRECTORY_SEPARATOR . self::CONFIG_DIR;
+ $this->staticDir = $baseDir . DIRECTORY_SEPARATOR . self::STATIC_DIR;
+ $this->appMode = $mode;
+ }
+
+ /**
+ * Load the configuration files into an configuration cache
+ *
+ * First loads the default value for all the configuration keys, then the legacy configuration files, then the
+ * expected local.config.php
+ *
+ * @param ConfigCache $config The config cache to load to
+ * @param bool $raw Setup the raw config format
+ *
+ * @throws Exception
+ */
+ public function setupCache(ConfigCache $config, $raw = false)
+ {
+ // Load static config files first, the order is important
+ $config->load($this->loadStaticConfig('defaults'));
+ $config->load($this->loadStaticConfig('settings'));
+
+ // try to load the legacy config first
+ $config->load($this->loadLegacyConfig('htpreconfig'), true);
+ $config->load($this->loadLegacyConfig('htconfig'), true);
+
+ // Now load every other config you find inside the 'config/' directory
+ $this->loadCoreConfig($config);
+
+ // In case of install mode, add the found basepath (because there isn't a basepath set yet
+ if (!$raw && ($this->appMode->isInstall() || empty($config->get('system', 'basepath')))) {
+ // Setting at least the basepath we know
+ $config->set('system', 'basepath', $this->baseDir);
+ }
+ }
+
+ /**
+ * Tries to load the static core-configuration and returns the config array.
+ *
+ * @param string $name The name of the configuration
+ *
+ * @return array The config array (empty if no config found)
+ *
+ * @throws Exception if the configuration file isn't readable
+ */
+ private function loadStaticConfig($name)
+ {
+ $configName = $this->staticDir . DIRECTORY_SEPARATOR . $name . '.config.php';
+ $iniName = $this->staticDir . DIRECTORY_SEPARATOR . $name . '.ini.php';
+
+ if (file_exists($configName)) {
+ return $this->loadConfigFile($configName);
+ } elseif (file_exists($iniName)) {
+ return $this->loadINIConfigFile($iniName);
+ } else {
+ return [];
+ }
+ }
+
+ /**
+ * Tries to load the specified core-configuration into the config cache.
+ *
+ * @param ConfigCache $config The Config cache
+ *
+ * @return array The config array (empty if no config found)
+ *
+ * @throws Exception if the configuration file isn't readable
+ */
+ private function loadCoreConfig(ConfigCache $config)
+ {
+ // try to load legacy ini-files first
+ foreach ($this->getConfigFiles(true) as $configFile) {
+ $config->load($this->loadINIConfigFile($configFile), true);
+ }
+
+ // try to load supported config at last to overwrite it
+ foreach ($this->getConfigFiles() as $configFile) {
+ $config->load($this->loadConfigFile($configFile), true);
+ }
+
+ return [];
+ }
+
+ /**
+ * Tries to load the specified addon-configuration and returns the config array.
+ *
+ * @param string $name The name of the configuration
+ *
+ * @return array The config array (empty if no config found)
+ *
+ * @throws Exception if the configuration file isn't readable
+ */
+ public function loadAddonConfig($name)
+ {
+ $filepath = $this->baseDir . DIRECTORY_SEPARATOR . // /var/www/html/
+ Addon::DIRECTORY . DIRECTORY_SEPARATOR . // addon/
+ $name . DIRECTORY_SEPARATOR . // openstreetmap/
+ self::CONFIG_DIR . DIRECTORY_SEPARATOR . // config/
+ $name . ".config.php"; // openstreetmap.config.php
+
+ if (file_exists($filepath)) {
+ return $this->loadConfigFile($filepath);
+ } else {
+ return [];
+ }
+ }
+
+ /**
+ * Get the config files of the config-directory
+ *
+ * @param bool $ini True, if scan for ini-files instead of config files
+ *
+ * @return array
+ */
+ private function getConfigFiles(bool $ini = false)
+ {
+ $files = scandir($this->configDir);
+ $found = array();
+
+ $filePattern = ($ini ? '*.ini.php' : '*.config.php');
+
+ // Don't load sample files
+ $sampleEnd = self::SAMPLE_END . ($ini ? '.ini.php' : '.config.php');
+
+ foreach ($files as $filename) {
+ if (fnmatch($filePattern, $filename) && substr_compare($filename, $sampleEnd, -strlen($sampleEnd))) {
+ $found[] = $this->configDir . '/' . $filename;
+ }
+ }
+
+ return $found;
+ }
+
+ /**
+ * Tries to load the legacy config files (.htconfig.php, .htpreconfig.php) and returns the config array.
+ *
+ * @param string $name The name of the config file (default is empty, which means .htconfig.php)
+ *
+ * @return array The configuration array (empty if no config found)
+ *
+ * @deprecated since version 2018.09
+ */
+ private function loadLegacyConfig($name = '')
+ {
+ $name = !empty($name) ? $name : self::CONFIG_HTCONFIG;
+ $fullName = $this->baseDir . DIRECTORY_SEPARATOR . '.' . $name . '.php';
+
+ $config = [];
+ if (file_exists($fullName)) {
+ $a = new \stdClass();
+ $a->config = [];
+ include $fullName;
+
+ $htConfigCategories = array_keys($a->config);
+
+ // map the legacy configuration structure to the current structure
+ foreach ($htConfigCategories as $htConfigCategory) {
+ if (is_array($a->config[$htConfigCategory])) {
+ $keys = array_keys($a->config[$htConfigCategory]);
+
+ foreach ($keys as $key) {
+ $config[$htConfigCategory][$key] = $a->config[$htConfigCategory][$key];
+ }
+ } else {
+ $config['config'][$htConfigCategory] = $a->config[$htConfigCategory];
+ }
+ }
+
+ unset($a);
+
+ if (isset($db_host)) {
+ $config['database']['hostname'] = $db_host;
+ unset($db_host);
+ }
+ if (isset($db_user)) {
+ $config['database']['username'] = $db_user;
+ unset($db_user);
+ }
+ if (isset($db_pass)) {
+ $config['database']['password'] = $db_pass;
+ unset($db_pass);
+ }
+ if (isset($db_data)) {
+ $config['database']['database'] = $db_data;
+ unset($db_data);
+ }
+ if (isset($config['system']['db_charset'])) {
+ $config['database']['charset'] = $config['system']['db_charset'];
+ }
+ if (isset($pidfile)) {
+ $config['system']['pidfile'] = $pidfile;
+ unset($pidfile);
+ }
+ if (isset($default_timezone)) {
+ $config['system']['default_timezone'] = $default_timezone;
+ unset($default_timezone);
+ }
+ if (isset($lang)) {
+ $config['system']['language'] = $lang;
+ unset($lang);
+ }
+ }
+
+ return $config;
+ }
+
+ /**
+ * Tries to load the specified legacy configuration file and returns the config array.
+ *
+ * @param string $filepath
+ *
+ * @return array The configuration array
+ * @throws Exception
+ * @deprecated since version 2018.12
+ */
+ private function loadINIConfigFile($filepath)
+ {
+ $contents = include($filepath);
+
+ $config = parse_ini_string($contents, true, INI_SCANNER_TYPED);
+
+ if ($config === false) {
+ throw new Exception('Error parsing INI config file ' . $filepath);
+ }
+
+ return $config;
+ }
+
+ /**
+ * Tries to load the specified configuration file and returns the config array.
+ *
+ * The config format is PHP array and the template for configuration files is the following:
+ *
+ * <?php return [
+ * 'section' => [
+ * 'key' => 'value',
+ * ],
+ * ];
+ *
+ * @param string $filepath The filepath of the
+ *
+ * @return array The config array0
+ *
+ * @throws Exception if the config cannot get loaded.
+ */
+ private function loadConfigFile($filepath)
+ {
+ $config = include($filepath);
+
+ if (!is_array($config)) {
+ throw new Exception('Error loading config file ' . $filepath);
+ }
+
+ return $config;
+ }
+}
--- /dev/null
+<?php
+
+/* Main database structure configuration file.
+ *
+ * Here are described all the tables, fields and indexes Friendica needs to work.
+ *
+ * Syntax (braces indicate optionale values):
+ * "<table name>" => [
+ * "comment" => "Description of the table",
+ * "fields" => [
+ * "<field name>" => [
+ * "type" => "<field type>{(<field size>)} <unsigned>",
+ * "not null" => 0|1,
+ * {"extra" => "auto_increment",}
+ * {"default" => "<default value>",}
+ * {"default" => NULL_DATE,} (for datetime fields)
+ * {"primary" => "1",}
+ * {"relation" => ["<foreign key table name>" => "<foreign key field name>"],}
+ * "comment" => "Description of the fields"
+ * ],
+ * ...
+ * ],
+ * "indexes" => [
+ * "PRIMARY" => ["<primary key field name>", ...],
+ * "<index name>" => [{"UNIQUE",} "<field name>{(<key size>)}", ...]
+ * ...
+ * ],
+ * ],
+ *
+ * If you need to make any change, make sure to increment the DB_UPDATE_VERSION constant value below.
+ *
+ */
+
+use Friendica\Database\DBA;
+
+if (!defined('DB_UPDATE_VERSION')) {
+ define('DB_UPDATE_VERSION', 1318);
+}
+
+return [
+ "2fa_recovery_codes" => [
+ "comment" => "Two-factor authentication recovery codes",
+ "fields" => [
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "primary" => "1", "relation" => ["user" => "uid"], "comment" => "User ID"],
+ "code" => ["type" => "varchar(50)", "not null" => "1", "primary" => "1", "comment" => "Recovery code string"],
+ "generated" => ["type" => "datetime", "not null" => "1", "comment" => "Datetime the code was generated"],
+ "used" => ["type" => "datetime", "comment" => "Datetime the code was used"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["uid", "code"]
+ ]
+ ],
+ "addon" => [
+ "comment" => "registered addons",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
+ "name" => ["type" => "varchar(50)", "not null" => "1", "default" => "", "comment" => "addon base (file)name"],
+ "version" => ["type" => "varchar(50)", "not null" => "1", "default" => "", "comment" => "currently unused"],
+ "installed" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "currently always 1"],
+ "hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "currently unused"],
+ "timestamp" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "file timestamp to check for reloads"],
+ "plugin_admin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 = has admin config, 0 = has no admin config"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "name" => ["UNIQUE", "name"],
+ ]
+ ],
+ "apcontact" => [
+ "comment" => "ActivityPub compatible contacts - used in the ActivityPub implementation",
+ "fields" => [
+ "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "URL of the contact"],
+ "uuid" => ["type" => "varchar(255)", "comment" => ""],
+ "type" => ["type" => "varchar(20)", "not null" => "1", "comment" => ""],
+ "following" => ["type" => "varchar(255)", "comment" => ""],
+ "followers" => ["type" => "varchar(255)", "comment" => ""],
+ "inbox" => ["type" => "varchar(255)", "not null" => "1", "comment" => ""],
+ "outbox" => ["type" => "varchar(255)", "comment" => ""],
+ "sharedinbox" => ["type" => "varchar(255)", "comment" => ""],
+ "manually-approve" => ["type" => "boolean", "comment" => ""],
+ "nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "name" => ["type" => "varchar(255)", "comment" => ""],
+ "about" => ["type" => "text", "comment" => ""],
+ "photo" => ["type" => "varchar(255)", "comment" => ""],
+ "addr" => ["type" => "varchar(255)", "comment" => ""],
+ "alias" => ["type" => "varchar(255)", "comment" => ""],
+ "pubkey" => ["type" => "text", "comment" => ""],
+ "baseurl" => ["type" => "varchar(255)", "comment" => "baseurl of the ap contact"],
+ "generator" => ["type" => "varchar(255)", "comment" => "Name of the contact's system"],
+ "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["url"],
+ "addr" => ["addr(32)"],
+ "alias" => ["alias(190)"],
+ "url" => ["followers(190)"]
+ ]
+ ],
+ "attach" => [
+ "comment" => "file attachments",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "generated index"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
+ "hash" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => "hash"],
+ "filename" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "filename of original"],
+ "filetype" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => "mimetype"],
+ "filesize" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "size in bytes"],
+ "data" => ["type" => "longblob", "not null" => "1", "comment" => "file data"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation time"],
+ "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "last edit time"],
+ "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>"],
+ "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
+ "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
+ "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
+ "backend-class" => ["type" => "tinytext", "comment" => "Storage backend class"],
+ "backend-ref" => ["type" => "text", "comment" => "Storage backend data reference"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "auth_codes" => [
+ "comment" => "OAuth usage",
+ "fields" => [
+ "id" => ["type" => "varchar(40)", "not null" => "1", "primary" => "1", "comment" => ""],
+ "client_id" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "relation" => ["clients" => "client_id"],
+ "comment" => ""],
+ "redirect_uri" => ["type" => "varchar(200)", "not null" => "1", "default" => "", "comment" => ""],
+ "expires" => ["type" => "int", "not null" => "1", "default" => "0", "comment" => ""],
+ "scope" => ["type" => "varchar(250)", "not null" => "1", "default" => "", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "cache" => [
+ "comment" => "Stores temporary data",
+ "fields" => [
+ "k" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "cache key"],
+ "v" => ["type" => "mediumtext", "comment" => "cached serialized value"],
+ "expires" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of cache expiration"],
+ "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of cache insertion"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["k"],
+ "k_expires" => ["k", "expires"],
+ ]
+ ],
+ "challenge" => [
+ "comment" => "",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "challenge" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "dfrn-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "type" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "last_update" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "clients" => [
+ "comment" => "OAuth usage",
+ "fields" => [
+ "client_id" => ["type" => "varchar(20)", "not null" => "1", "primary" => "1", "comment" => ""],
+ "pw" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "comment" => ""],
+ "redirect_uri" => ["type" => "varchar(200)", "not null" => "1", "default" => "", "comment" => ""],
+ "name" => ["type" => "text", "comment" => ""],
+ "icon" => ["type" => "text", "comment" => ""],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["client_id"],
+ ]
+ ],
+ "config" => [
+ "comment" => "main configuration storage",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
+ "cat" => ["type" => "varbinary(50)", "not null" => "1", "default" => "", "comment" => ""],
+ "k" => ["type" => "varbinary(50)", "not null" => "1", "default" => "", "comment" => ""],
+ "v" => ["type" => "mediumtext", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "cat_k" => ["UNIQUE", "cat", "k"],
+ ]
+ ],
+ "contact" => [
+ "comment" => "contact table",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "updated" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => "Date of last contact update"],
+ "self" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 if the contact is the user him/her self"],
+ "remote_self" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "rel" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "The kind of the relation between the user and the contact"],
+ "duplex" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Network of the contact"],
+ "protocol" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Protocol of the contact"],
+ "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name that this contact is known by"],
+ "nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Nick- and user name of the contact"],
+ "location" => ["type" => "varchar(255)", "default" => "", "comment" => ""],
+ "about" => ["type" => "text", "comment" => ""],
+ "keywords" => ["type" => "text", "comment" => "public keywords (interests) of the contact"],
+ "gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
+ "xmpp" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "attag" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "avatar" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "photo" => ["type" => "varchar(255)", "default" => "", "comment" => "Link to the profile photo of the contact"],
+ "thumb" => ["type" => "varchar(255)", "default" => "", "comment" => "Link to the profile photo (thumb size)"],
+ "micro" => ["type" => "varchar(255)", "default" => "", "comment" => "Link to the profile photo (micro size)"],
+ "site-pubkey" => ["type" => "text", "comment" => ""],
+ "issued-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "dfrn-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "nurl" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "addr" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "alias" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "pubkey" => ["type" => "text", "comment" => "RSA public key 4096 bit"],
+ "prvkey" => ["type" => "text", "comment" => "RSA private key 4096 bit"],
+ "batch" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "request" => ["type" => "varchar(255)", "comment" => ""],
+ "notify" => ["type" => "varchar(255)", "comment" => ""],
+ "poll" => ["type" => "varchar(255)", "comment" => ""],
+ "confirm" => ["type" => "varchar(255)", "comment" => ""],
+ "poco" => ["type" => "varchar(255)", "comment" => ""],
+ "aes_allow" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "ret-aes" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "usehub" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "subhub" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "hub-verify" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "last-update" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last try to update the contact info"],
+ "success_update" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last successful contact update"],
+ "failure_update" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last failed update"],
+ "name-date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "uri-date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "avatar-date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "term-date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "last-item" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "date of the last post"],
+ "priority" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "blocked" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => "Node-wide block status"],
+ "block_reason" => ["type" => "text", "comment" => "Node-wide block reason"],
+ "readonly" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "posts of the contact are readonly"],
+ "writable" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "forum" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "contact is a forum"],
+ "prv" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "contact is a private group"],
+ "contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""],
+ "hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "archive" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "pending" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""],
+ "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Contact has been deleted"],
+ "rating" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""],
+ "unsearchable" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Contact prefers to not be searchable"],
+ "sensitive" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Contact posts sensitive content"],
+ "baseurl" => ["type" => "varchar(255)", "default" => "", "comment" => "baseurl of the contact"],
+ "reason" => ["type" => "text", "comment" => ""],
+ "closeness" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "99", "comment" => ""],
+ "info" => ["type" => "mediumtext", "comment" => ""],
+ "profile-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "bdyear" => ["type" => "varchar(4)", "not null" => "1", "default" => "", "comment" => ""],
+ "bd" => ["type" => "date", "not null" => "1", "default" => DBA::NULL_DATE, "comment" => ""],
+ "notify_new_posts" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "fetch_further_information" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "ffi_keyword_blacklist" => ["type" => "text", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid_name" => ["uid", "name(190)"],
+ "self_uid" => ["self", "uid"],
+ "alias_uid" => ["alias(32)", "uid"],
+ "pending_uid" => ["pending", "uid"],
+ "blocked_uid" => ["blocked", "uid"],
+ "uid_rel_network_poll" => ["uid", "rel", "network", "poll(64)", "archive"],
+ "uid_network_batch" => ["uid", "network", "batch(64)"],
+ "addr_uid" => ["addr(32)", "uid"],
+ "nurl_uid" => ["nurl(32)", "uid"],
+ "nick_uid" => ["nick(32)", "uid"],
+ "dfrn-id" => ["dfrn-id(64)"],
+ "issued-id" => ["issued-id(64)"],
+ ]
+ ],
+ "conv" => [
+ "comment" => "private messages",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this conversation"],
+ "recips" => ["type" => "text", "comment" => "sender_handle;recipient_handle"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
+ "creator" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "handle of creator"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation timestamp"],
+ "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "edited timestamp"],
+ "subject" => ["type" => "text", "comment" => "subject of initial message"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid" => ["uid"],
+ ]
+ ],
+ "conversation" => [
+ "comment" => "Raw data and structure information for messages",
+ "fields" => [
+ "item-uri" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "Original URI of the item - unrelated to the table with the same name"],
+ "reply-to-uri" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => "URI to which this item is a reply"],
+ "conversation-uri" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => "GNU Social conversation URI"],
+ "conversation-href" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => "GNU Social conversation link"],
+ "protocol" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "255", "comment" => "The protocol of the item"],
+ "source" => ["type" => "mediumtext", "comment" => "Original source"],
+ "received" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Receiving date"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["item-uri"],
+ "conversation-uri" => ["conversation-uri"],
+ "received" => ["received"],
+ ]
+ ],
+ "diaspora-interaction" => [
+ "comment" => "Signed Diaspora Interaction",
+ "fields" => [
+ "uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
+ "interaction" => ["type" => "mediumtext", "comment" => "The Diaspora interaction"]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["uri-id"]
+ ]
+ ],
+ "event" => [
+ "comment" => "Events",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
+ "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact_id (ID of the contact in contact table)"],
+ "uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation time"],
+ "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "last edit time"],
+ "start" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "event start time"],
+ "finish" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "event end time"],
+ "summary" => ["type" => "text", "comment" => "short description or title of the event"],
+ "desc" => ["type" => "text", "comment" => "event description"],
+ "location" => ["type" => "text", "comment" => "event location"],
+ "type" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "comment" => "event or birthday"],
+ "nofinish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if event does have no end this is 1"],
+ "adjust" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => "adjust to timezone of the recipient (0 or 1)"],
+ "ignore" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "0 or 1"],
+ "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>'"],
+ "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
+ "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
+ "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid_start" => ["uid", "start"],
+ ]
+ ],
+ "fcontact" => [
+ "comment" => "Diaspora compatible contacts - used in the Diaspora implementation",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "unique id"],
+ "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "request" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "addr" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "batch" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "notify" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "poll" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "confirm" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "priority" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""],
+ "alias" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "pubkey" => ["type" => "text", "comment" => ""],
+ "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "addr" => ["addr(32)"],
+ "url" => ["UNIQUE", "url(190)"],
+ ]
+ ],
+ "fsuggest" => [
+ "comment" => "friend suggestion stuff",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
+ "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "request" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "note" => ["type" => "text", "comment" => ""],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "gcign" => [
+ "comment" => "contacts ignored by friend suggestions",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Local User id"],
+ "gcid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["gcontact" => "id"], "comment" => "gcontact.id of ignored contact"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid" => ["uid"],
+ "gcid" => ["gcid"],
+ ]
+ ],
+ "gcontact" => [
+ "comment" => "global contacts",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name that this contact is known by"],
+ "nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Nick- and user name of the contact"],
+ "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Link to the contacts profile page"],
+ "nurl" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Link to the profile photo"],
+ "connect" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "updated" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "last_contact" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "last_failure" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "archive_date" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "archived" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "about" => ["type" => "text", "comment" => ""],
+ "keywords" => ["type" => "text", "comment" => "puplic keywords (interests)"],
+ "gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
+ "birthday" => ["type" => "varchar(32)", "not null" => "1", "default" => DBA::NULL_DATE, "comment" => ""],
+ "community" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 if contact is forum account"],
+ "contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "-1", "comment" => ""],
+ "hide" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 = should be hidden from search"],
+ "nsfw" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 = contact posts nsfw content"],
+ "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "social network protocol"],
+ "addr" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "notify" => ["type" => "varchar(255)", "comment" => ""],
+ "alias" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "generation" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "server_url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "baseurl of the contacts server"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "nurl" => ["UNIQUE", "nurl(190)"],
+ "name" => ["name(64)"],
+ "nick" => ["nick(32)"],
+ "addr" => ["addr(64)"],
+ "hide_network_updated" => ["hide", "network", "updated"],
+ "updated" => ["updated"],
+ ]
+ ],
+ "glink" => [
+ "comment" => "'friends of friends' linkages derived from poco",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "gcid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["gcontact" => "id"], "comment" => ""],
+ "zcid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["gcontact" => "id"], "comment" => ""],
+ "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "cid_uid_gcid_zcid" => ["UNIQUE", "cid", "uid", "gcid", "zcid"],
+ "gcid" => ["gcid"],
+ ]
+ ],
+ "group" => [
+ "comment" => "privacy groups, group info",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
+ "visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 indicates the member list is not private"],
+ "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 indicates the group has been deleted"],
+ "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "human readable name of group"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid" => ["uid"],
+ ]
+ ],
+ "group_member" => [
+ "comment" => "privacy groups, member info",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "gid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["group" => "id"], "comment" => "groups.id of the associated group"],
+ "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id of the member assigned to the associated group"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "contactid" => ["contact-id"],
+ "gid_contactid" => ["UNIQUE", "gid", "contact-id"],
+ ]
+ ],
+ "gserver" => [
+ "comment" => "Global servers",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "nurl" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "version" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "site_name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "info" => ["type" => "text", "comment" => ""],
+ "register_policy" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""],
+ "registered-users" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Number of registered users"],
+ "poco" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "noscrape" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""],
+ "platform" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "relay-subscribe" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Has the server subscribed to the relay system"],
+ "relay-scope" => ["type" => "varchar(10)", "not null" => "1", "default" => "", "comment" => "The scope of messages that the server wants to get"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "last_poco_query" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "last_contact" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "last_failure" => ["type" => "datetime", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "nurl" => ["UNIQUE", "nurl(190)"],
+ ]
+ ],
+ "gserver-tag" => [
+ "comment" => "Tags that the server has subscribed",
+ "fields" => [
+ "gserver-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["gserver" => "id"], "primary" => "1",
+ "comment" => "The id of the gserver"],
+ "tag" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "primary" => "1", "comment" => "Tag that the server has subscribed"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["gserver-id", "tag"],
+ "tag" => ["tag"],
+ ]
+ ],
+ "hook" => [
+ "comment" => "addon hook registry",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "hook" => ["type" => "varbinary(100)", "not null" => "1", "default" => "", "comment" => "name of hook"],
+ "file" => ["type" => "varbinary(200)", "not null" => "1", "default" => "", "comment" => "relative filename of hook handler"],
+ "function" => ["type" => "varbinary(200)", "not null" => "1", "default" => "", "comment" => "function name of hook handler"],
+ "priority" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => "not yet implemented - can be used to sort conflicts in hook handling by calling handlers in priority order"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "hook_file_function" => ["UNIQUE", "hook", "file", "function"],
+ ]
+ ],
+ "inbox-status" => [
+ "comment" => "Status of ActivityPub inboxes",
+ "fields" => [
+ "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "URL of the inbox"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Creation date of this entry"],
+ "success" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last successful delivery"],
+ "failure" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of the last failed delivery"],
+ "previous" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Previous delivery date"],
+ "archive" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Is the inbox archived?"],
+ "shared" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Is it a shared inbox?"]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["url"]
+ ]
+ ],
+ "intro" => [
+ "comment" => "",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "fid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["fcontact" => "id"], "comment" => ""],
+ "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
+ "knowyou" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "duplex" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "note" => ["type" => "text", "comment" => ""],
+ "hash" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "datetime" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "blocked" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""],
+ "ignore" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "item" => [
+ "comment" => "Structure for all posts",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => ["thread" => "iid"]],
+ "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this item"],
+ "uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
+ "uri-hash" => ["type" => "varchar(80)", "not null" => "1", "default" => "", "comment" => "RIPEMD-128 hash from uri"],
+ "parent" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => "item.id of the parent to this item if it is a reply of some form; otherwise this must be set to the id of this item"],
+ "parent-uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "uri of the parent to this item"],
+ "parent-uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table that contains the parent uri"],
+ "thr-parent" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "If the parent of this item is not the top-level item in the conversation, the uri of the immediate parent; otherwise set to parent-uri"],
+ "thr-parent-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table that contains the thread parent uri"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Creation timestamp."],
+ "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of last edit (default is created)"],
+ "commented" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of last comment/reply to this item"],
+ "received" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime"],
+ "changed" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date that something in the conversation changed, indicating clients should fetch the conversation again"],
+ "gravity" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Network from where the item comes from"],
+ "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Link to the contact table with uid=0 of the owner of this item"],
+ "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Link to the contact table with uid=0 of the author of this item"],
+ "icid" => ["type" => "int unsigned", "relation" => ["item-content" => "id"], "comment" => "Id of the item-content table entry that contains the whole item content"],
+ "iaid" => ["type" => "int unsigned", "relation" => ["item-activity" => "id"], "comment" => "Id of the item-activity table entry that contains the activity data"],
+ "extid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "post-type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "Post type (personal note, bookmark, ...)"],
+ "global" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "private" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "distribution is restricted"],
+ "visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "moderated" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been deleted"],
+ // User specific fields. Eventually they will move to user-item
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner id which owns this copy of the item"],
+ "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id"],
+ "wall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "This item was posted to the wall of uid"],
+ "origin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item originated at this site"],
+ "pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "starred" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been favourited"],
+ "unseen" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => "item has not been seen"],
+ "mention" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "The owner of this item was mentioned in it"],
+ "forum_mode" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "psid" => ["type" => "int unsigned", "relation" => ["permissionset" => "id"], "comment" => "ID of the permission set of this post"],
+ // It has to be decided whether these fields belong to the user or the structure
+ "resource-id" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => "Used to link other tables to items, it identifies the linked resource (e.g. photo) and if set must also set resource_type"],
+ "event-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["event" => "id"], "comment" => "Used to link to the event.id"],
+ // Could possibly be replaced by the "attach" table?
+ "attach" => ["type" => "mediumtext", "comment" => "JSON structure representing attachments to this item"],
+ // Deprecated fields. Will be removed in upcoming versions
+ "allow_cid" => ["type" => "mediumtext", "comment" => "Deprecated"],
+ "allow_gid" => ["type" => "mediumtext", "comment" => "Deprecated"],
+ "deny_cid" => ["type" => "mediumtext", "comment" => "Deprecated"],
+ "deny_gid" => ["type" => "mediumtext", "comment" => "Deprecated"],
+ "postopts" => ["type" => "text", "comment" => "Deprecated"],
+ "inform" => ["type" => "mediumtext", "comment" => "Deprecated"],
+ "type" => ["type" => "varchar(20)", "comment" => "Deprecated"],
+ "bookmark" => ["type" => "boolean", "comment" => "Deprecated"],
+ "file" => ["type" => "mediumtext", "comment" => "Deprecated"],
+ "location" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "coord" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "tag" => ["type" => "mediumtext", "comment" => "Deprecated"],
+ "plink" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "title" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "content-warning" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "body" => ["type" => "mediumtext", "comment" => "Deprecated"],
+ "app" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "verb" => ["type" => "varchar(100)", "comment" => "Deprecated"],
+ "object-type" => ["type" => "varchar(100)", "comment" => "Deprecated"],
+ "object" => ["type" => "text", "comment" => "Deprecated"],
+ "target-type" => ["type" => "varchar(100)", "comment" => "Deprecated"],
+ "target" => ["type" => "text", "comment" => "Deprecated"],
+ "author-name" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "author-link" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "author-avatar" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "owner-name" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "owner-link" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "owner-avatar" => ["type" => "varchar(255)", "comment" => "Deprecated"],
+ "rendered-hash" => ["type" => "varchar(32)", "comment" => "Deprecated"],
+ "rendered-html" => ["type" => "mediumtext", "comment" => "Deprecated"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "guid" => ["guid(191)"],
+ "uri" => ["uri(191)"],
+ "parent" => ["parent"],
+ "parent-uri" => ["parent-uri(191)"],
+ "extid" => ["extid(191)"],
+ "uid_id" => ["uid", "id"],
+ "uid_contactid_id" => ["uid", "contact-id", "id"],
+ "uid_received" => ["uid", "received"],
+ "uid_commented" => ["uid", "commented"],
+ "uid_unseen_contactid" => ["uid", "unseen", "contact-id"],
+ "uid_network_received" => ["uid", "network", "received"],
+ "uid_network_commented" => ["uid", "network", "commented"],
+ "uid_thrparent" => ["uid", "thr-parent(190)"],
+ "uid_parenturi" => ["uid", "parent-uri(190)"],
+ "uid_contactid_received" => ["uid", "contact-id", "received"],
+ "authorid_received" => ["author-id", "received"],
+ "ownerid" => ["owner-id"],
+ "contact-id" => ["contact-id"],
+ "uid_uri" => ["uid", "uri(190)"],
+ "resource-id" => ["resource-id"],
+ "deleted_changed" => ["deleted", "changed"],
+ "uid_wall_changed" => ["uid", "wall", "changed"],
+ "uid_eventid" => ["uid", "event-id"],
+ "icid" => ["icid"],
+ "iaid" => ["iaid"],
+ "psid_wall" => ["psid", "wall"],
+ ]
+ ],
+ "item-activity" => [
+ "comment" => "Activities for items",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => ["thread" => "iid"]],
+ "uri" => ["type" => "varchar(255)", "comment" => ""],
+ "uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
+ "uri-hash" => ["type" => "varchar(80)", "not null" => "1", "default" => "", "comment" => "RIPEMD-128 hash from uri"],
+ "activity" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uri-hash" => ["UNIQUE", "uri-hash"],
+ "uri" => ["uri(191)"],
+ "uri-id" => ["uri-id"]
+ ]
+ ],
+ "item-content" => [
+ "comment" => "Content for all posts",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => ["thread" => "iid"]],
+ "uri" => ["type" => "varchar(255)", "comment" => ""],
+ "uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
+ "uri-plink-hash" => ["type" => "varchar(80)", "not null" => "1", "default" => "", "comment" => "RIPEMD-128 hash from uri"],
+ "title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "item title"],
+ "content-warning" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "body" => ["type" => "mediumtext", "comment" => "item body content"],
+ "location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "text location where this item originated"],
+ "coord" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "longitude/latitude pair representing location where this item originated"],
+ "language" => ["type" => "text", "comment" => "Language information about this post"],
+ "app" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "application which generated this item"],
+ "rendered-hash" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
+ "rendered-html" => ["type" => "mediumtext", "comment" => "item.body converted to html"],
+ "object-type" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => "ActivityStreams object type"],
+ "object" => ["type" => "text", "comment" => "JSON encoded object structure unless it is an implied object (normal post)"],
+ "target-type" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => "ActivityStreams target type if applicable (URI)"],
+ "target" => ["type" => "text", "comment" => "JSON encoded target structure if used"],
+ "plink" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "permalink or URL to a displayable copy of the message at its source"],
+ "verb" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => "ActivityStreams verb"]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uri-plink-hash" => ["UNIQUE", "uri-plink-hash"],
+ "uri" => ["uri(191)"],
+ "uri-id" => ["uri-id"]
+ ]
+ ],
+ "item-delivery-data" => [
+ "comment" => "Delivery data for items",
+ "fields" => [
+ "iid" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "relation" => ["item" => "id"], "comment" => "Item id"],
+ "postopts" => ["type" => "text", "comment" => "External post connectors add their network name to this comma-separated string to identify that they should be delivered to these networks during delivery"],
+ "inform" => ["type" => "mediumtext", "comment" => "Additional receivers of the linked item"],
+ "queue_count" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Initial number of delivery recipients, used as item.delivery_queue_count"],
+ "queue_done" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries, used as item.delivery_queue_done"],
+ "activitypub" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries via ActivityPub"],
+ "dfrn" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries via DFRN"],
+ "legacy_dfrn" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries via legacy DFRN"],
+ "diaspora" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries via Diaspora"],
+ "ostatus" => ["type" => "mediumint", "not null" => "1", "default" => "0", "comment" => "Number of successful deliveries via OStatus"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["iid"],
+ ]
+ ],
+ "item-uri" => [
+ "comment" => "URI and GUID for items",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"],
+ "uri" => ["type" => "varbinary(255)", "not null" => "1", "comment" => "URI of an item"],
+ "guid" => ["type" => "varbinary(255)", "comment" => "A unique identifier for an item"]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uri" => ["UNIQUE", "uri"],
+ "guid" => ["guid"]
+ ]
+ ],
+ "locks" => [
+ "comment" => "",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "name" => ["type" => "varchar(128)", "not null" => "1", "default" => "", "comment" => ""],
+ "locked" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "pid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Process ID"],
+ "expires" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of cache expiration"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "name_expires" => ["name", "expires"]
+ ]
+ ],
+ "mail" => [
+ "comment" => "private messages",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
+ "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this private message"],
+ "from-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "name of the sender"],
+ "from-photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "contact photo link of the sender"],
+ "from-url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "profile linke of the sender"],
+ "contact-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "relation" => ["contact" => "id"], "comment" => "contact.id"],
+ "convid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["conv" => "id"], "comment" => "conv.id"],
+ "title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "body" => ["type" => "mediumtext", "comment" => ""],
+ "seen" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if message visited it is 1"],
+ "reply" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "replied" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "unknown" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if sender not in the contact table this is 1"],
+ "uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "parent-uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation time of the private message"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid_seen" => ["uid", "seen"],
+ "convid" => ["convid"],
+ "uri" => ["uri(64)"],
+ "parent-uri" => ["parent-uri(64)"],
+ "contactid" => ["contact-id(32)"],
+ ]
+ ],
+ "mailacct" => [
+ "comment" => "Mail account data for fetching mails",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "server" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "port" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "ssltype" => ["type" => "varchar(16)", "not null" => "1", "default" => "", "comment" => ""],
+ "mailbox" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "user" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "pass" => ["type" => "text", "comment" => ""],
+ "reply_to" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "action" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "movetofolder" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "last_check" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "manage" => [
+ "comment" => "table of accounts that can manage each other",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "mid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid_mid" => ["UNIQUE", "uid", "mid"],
+ ]
+ ],
+ "notify" => [
+ "comment" => "notifications",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "hash" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => ""],
+ "type" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "msg" => ["type" => "mediumtext", "comment" => ""],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
+ "link" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => "item.id"],
+ "parent" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => ""],
+ "seen" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "verb" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => ""],
+ "otype" => ["type" => "varchar(10)", "not null" => "1", "default" => "", "comment" => ""],
+ "name_cache" => ["type" => "tinytext", "comment" => "Cached bbcode parsing of name"],
+ "msg_cache" => ["type" => "mediumtext", "comment" => "Cached bbcode parsing of msg"]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "hash_uid" => ["hash", "uid"],
+ "seen_uid_date" => ["seen", "uid", "date"],
+ "uid_date" => ["uid", "date"],
+ "uid_type_link" => ["uid", "type", "link(190)"],
+ ]
+ ],
+ "notify-threads" => [
+ "comment" => "",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "notify-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["notify" => "id"], "comment" => ""],
+ "master-parent-item" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"],
+ "comment" => ""],
+ "parent-item" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "receiver-uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"],
+ "comment" => "User id"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "oembed" => [
+ "comment" => "cache for OEmbed queries",
+ "fields" => [
+ "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "page url"],
+ "maxwidth" => ["type" => "mediumint unsigned", "not null" => "1", "primary" => "1", "comment" => "Maximum width passed to Oembed"],
+ "content" => ["type" => "mediumtext", "comment" => "OEmbed data of the page"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of creation"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["url", "maxwidth"],
+ "created" => ["created"],
+ ]
+ ],
+ "openwebauth-token" => [
+ "comment" => "Store OpenWebAuth token to verify contacts",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "type" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => "Verify type"],
+ "token" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "A generated token"],
+ "meta" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of creation"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "parsed_url" => [
+ "comment" => "cache for 'parse_url' queries",
+ "fields" => [
+ "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "page url"],
+ "guessing" => ["type" => "boolean", "not null" => "1", "default" => "0", "primary" => "1", "comment" => "is the 'guessing' mode active?"],
+ "oembed" => ["type" => "boolean", "not null" => "1", "default" => "0", "primary" => "1", "comment" => "is the data the result of oembed?"],
+ "content" => ["type" => "mediumtext", "comment" => "page data"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of creation"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["url", "guessing", "oembed"],
+ "created" => ["created"],
+ ]
+ ],
+ "participation" => [
+ "comment" => "Storage for participation messages from Diaspora",
+ "fields" => [
+ "iid" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "relation" => ["item" => "id"], "comment" => ""],
+ "server" => ["type" => "varchar(60)", "not null" => "1", "primary" => "1", "comment" => ""],
+ "cid" => ["type" => "int unsigned", "not null" => "1", "relation" => ["contact" => "id"], "comment" => ""],
+ "fid" => ["type" => "int unsigned", "not null" => "1", "relation" => ["fcontact" => "id"], "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["iid", "server"],
+ "cid" => ["cid"],
+ "fid" => ["fid"]
+ ]
+ ],
+ "pconfig" => [
+ "comment" => "personal (per user) configuration storage",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "cat" => ["type" => "varbinary(50)", "not null" => "1", "default" => "", "comment" => ""],
+ "k" => ["type" => "varbinary(100)", "not null" => "1", "default" => "", "comment" => ""],
+ "v" => ["type" => "mediumtext", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid_cat_k" => ["UNIQUE", "uid", "cat", "k"],
+ ]
+ ],
+ "permissionset" => [
+ "comment" => "",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner id of this permission set"],
+ "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>'"],
+ "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
+ "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
+ "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid_allow_cid_allow_gid_deny_cid_deny_gid" => ["allow_cid(50)", "allow_gid(30)", "deny_cid(50)", "deny_gid(30)"],
+ ]
+ ],
+ "photo" => [
+ "comment" => "photo storage",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
+ "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id"],
+ "guid" => ["type" => "char(16)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this photo"],
+ "resource-id" => ["type" => "char(32)", "not null" => "1", "default" => "", "comment" => ""],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation date"],
+ "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "last edited date"],
+ "title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "desc" => ["type" => "text", "comment" => ""],
+ "album" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "The name of the album to which the photo belongs"],
+ "filename" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "type" => ["type" => "varchar(30)", "not null" => "1", "default" => "image/jpeg"],
+ "height" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "width" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "datasize" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "data" => ["type" => "mediumblob", "not null" => "1", "comment" => ""],
+ "scale" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "profile" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>'"],
+ "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
+ "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
+ "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
+ "backend-class" => ["type" => "tinytext", "comment" => "Storage backend class"],
+ "backend-ref" => ["type" => "text", "comment" => "Storage backend data reference"],
+ "updated" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "contactid" => ["contact-id"],
+ "uid_contactid" => ["uid", "contact-id"],
+ "uid_profile" => ["uid", "profile"],
+ "uid_album_scale_created" => ["uid", "album(32)", "scale", "created"],
+ "uid_album_resource-id_created" => ["uid", "album(32)", "resource-id", "created"],
+ "resource-id" => ["resource-id"],
+ ]
+ ],
+ "poll" => [
+ "comment" => "Currently unused table for storing poll results",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "q0" => ["type" => "text", "comment" => ""],
+ "q1" => ["type" => "text", "comment" => ""],
+ "q2" => ["type" => "text", "comment" => ""],
+ "q3" => ["type" => "text", "comment" => ""],
+ "q4" => ["type" => "text", "comment" => ""],
+ "q5" => ["type" => "text", "comment" => ""],
+ "q6" => ["type" => "text", "comment" => ""],
+ "q7" => ["type" => "text", "comment" => ""],
+ "q8" => ["type" => "text", "comment" => ""],
+ "q9" => ["type" => "text", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid" => ["uid"],
+ ]
+ ],
+ "poll_result" => [
+ "comment" => "data for polls - currently unused",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "poll_id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["poll" => "id"]],
+ "choice" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "poll_id" => ["poll_id"],
+ ]
+ ],
+ "process" => [
+ "comment" => "Currently running system processes",
+ "fields" => [
+ "pid" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "comment" => ""],
+ "command" => ["type" => "varbinary(32)", "not null" => "1", "default" => "", "comment" => ""],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["pid"],
+ "command" => ["command"],
+ ]
+ ],
+ "profile" => [
+ "comment" => "user profiles data",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
+ "profile-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name of the profile"],
+ "is-default" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Mark this profile as default profile"],
+ "hide-friends" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Hide friend list from viewers of this profile"],
+ "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "pdesc" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Title or description"],
+ "dob" => ["type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00", "comment" => "Day of birth"],
+ "address" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "locality" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "region" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "postal-code" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
+ "country-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "hometown" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
+ "marital" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "with" => ["type" => "text", "comment" => ""],
+ "howlong" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "sexual" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "politic" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "religion" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "pub_keywords" => ["type" => "text", "comment" => ""],
+ "prv_keywords" => ["type" => "text", "comment" => ""],
+ "likes" => ["type" => "text", "comment" => ""],
+ "dislikes" => ["type" => "text", "comment" => ""],
+ "about" => ["type" => "text", "comment" => ""],
+ "summary" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "music" => ["type" => "text", "comment" => ""],
+ "book" => ["type" => "text", "comment" => ""],
+ "tv" => ["type" => "text", "comment" => ""],
+ "film" => ["type" => "text", "comment" => ""],
+ "interest" => ["type" => "text", "comment" => ""],
+ "romance" => ["type" => "text", "comment" => ""],
+ "work" => ["type" => "text", "comment" => ""],
+ "education" => ["type" => "text", "comment" => ""],
+ "contact" => ["type" => "text", "comment" => ""],
+ "homepage" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "xmpp" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "thumb" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "publish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "publish default profile in local directory"],
+ "net-publish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "publish profile in global directory"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid_is-default" => ["uid", "is-default"],
+ "pub_keywords" => ["FULLTEXT", "pub_keywords"],
+ ]
+ ],
+ "profile_check" => [
+ "comment" => "DFRN remote auth use",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id"],
+ "dfrn_id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "sec" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "push_subscriber" => [
+ "comment" => "Used for OStatus: Contains feed subscribers",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "callback_url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "topic" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "nickname" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "push" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Retrial counter"],
+ "last_update" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of last successful trial"],
+ "next_try" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Next retrial date"],
+ "renewed" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date of last subscription renewal"],
+ "secret" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "next_try" => ["next_try"],
+ ]
+ ],
+ "register" => [
+ "comment" => "registrations requiring admin approval",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "hash" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "password" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "language" => ["type" => "varchar(16)", "not null" => "1", "default" => "", "comment" => ""],
+ "note" => ["type" => "text", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "search" => [
+ "comment" => "",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "term" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "uid" => ["uid"],
+ ]
+ ],
+ "session" => [
+ "comment" => "web session storage",
+ "fields" => [
+ "id" => ["type" => "bigint unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "sid" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "data" => ["type" => "text", "comment" => ""],
+ "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "sid" => ["sid(64)"],
+ "expire" => ["expire"],
+ ]
+ ],
+ "sign" => [
+ "comment" => "Diaspora signatures",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => "item.id"],
+ "signed_text" => ["type" => "mediumtext", "comment" => ""],
+ "signature" => ["type" => "text", "comment" => ""],
+ "signer" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "iid" => ["UNIQUE", "iid"],
+ ]
+ ],
+ "term" => [
+ "comment" => "item taxonomy (categories, tags, etc.) table",
+ "fields" => [
+ "tid" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
+ "oid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => ""],
+ "otype" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "term" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "received" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "global" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["tid"],
+ "term_type" => ["term(64)", "type"],
+ "oid_otype_type_term" => ["oid", "otype", "type", "term(32)"],
+ "uid_otype_type_term_global_created" => ["uid", "otype", "type", "term(32)", "global", "created"],
+ "uid_otype_type_url" => ["uid", "otype", "type", "url(64)"],
+ "guid" => ["guid(64)"],
+ ]
+ ],
+ "thread" => [
+ "comment" => "Thread related data",
+ "fields" => [
+ "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["item" => "id"],
+ "comment" => "sequential ID"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
+ "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Item owner"],
+ "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Item author"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "commented" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "received" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "changed" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
+ "wall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "private" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "moderated" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "starred" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "ignored" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "post-type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "Post type (personal note, bookmark, ...)"],
+ "unseen" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""],
+ "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "origin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "forum_mode" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "mention" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""],
+ "bookmark" => ["type" => "boolean", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["iid"],
+ "uid_network_commented" => ["uid", "network", "commented"],
+ "uid_network_received" => ["uid", "network", "received"],
+ "uid_contactid_commented" => ["uid", "contact-id", "commented"],
+ "uid_contactid_received" => ["uid", "contact-id", "received"],
+ "contactid" => ["contact-id"],
+ "ownerid" => ["owner-id"],
+ "authorid" => ["author-id"],
+ "uid_received" => ["uid", "received"],
+ "uid_commented" => ["uid", "commented"],
+ "uid_wall_received" => ["uid", "wall", "received"],
+ "private_wall_origin_commented" => ["private", "wall", "origin", "commented"],
+ ]
+ ],
+ "tokens" => [
+ "comment" => "OAuth usage",
+ "fields" => [
+ "id" => ["type" => "varchar(40)", "not null" => "1", "primary" => "1", "comment" => ""],
+ "secret" => ["type" => "text", "comment" => ""],
+ "client_id" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "relation" => ["clients" => "client_id"]],
+ "expires" => ["type" => "int", "not null" => "1", "default" => "0", "comment" => ""],
+ "scope" => ["type" => "varchar(200)", "not null" => "1", "default" => "", "comment" => ""],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ ]
+ ],
+ "user" => [
+ "comment" => "The local users",
+ "fields" => [
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "parent-uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"],
+ "comment" => "The parent user that has full control about this user"],
+ "guid" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this user"],
+ "username" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name that this user is known by"],
+ "password" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "encrypted password"],
+ "legacy_password" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Is the password hash double-hashed?"],
+ "nickname" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "nick- and user name"],
+ "email" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "the users email address"],
+ "openid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+ "timezone" => ["type" => "varchar(128)", "not null" => "1", "default" => "", "comment" => "PHP-legal timezone"],
+ "language" => ["type" => "varchar(32)", "not null" => "1", "default" => "en", "comment" => "default language"],
+ "register_date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "timestamp of registration"],
+ "login_date" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "timestamp of last login"],
+ "default-location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Default for item.location"],
+ "allow_location" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 allows to display the location"],
+ "theme" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "user theme preference"],
+ "pubkey" => ["type" => "text", "comment" => "RSA public key 4096 bit"],
+ "prvkey" => ["type" => "text", "comment" => "RSA private key 4096 bit"],
+ "spubkey" => ["type" => "text", "comment" => ""],
+ "sprvkey" => ["type" => "text", "comment" => ""],
+ "verified" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "user is verified through email"],
+ "blocked" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 for user is blocked"],
+ "blockwall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Prohibit contacts to post to the profile page of the user"],
+ "hidewall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Hide profile details from unkown viewers"],
+ "blocktags" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Prohibit contacts to tag the post of this user"],
+ "unkmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Permit unknown people to send private mails to this user"],
+ "cntunkmail" => ["type" => "int unsigned", "not null" => "1", "default" => "10", "comment" => ""],
+ "notify-flags" => ["type" => "smallint unsigned", "not null" => "1", "default" => "65535", "comment" => "email notification options"],
+ "page-flags" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "page/profile type"],
+ "account-type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "prvnets" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "pwdreset" => ["type" => "varchar(255)", "comment" => "Password reset request token"],
+ "pwdreset_time" => ["type" => "datetime", "comment" => "Timestamp of the last password reset request"],
+ "maxreq" => ["type" => "int unsigned", "not null" => "1", "default" => "10", "comment" => ""],
+ "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "account_removed" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if 1 the account is removed"],
+ "account_expired" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
+ "account_expires_on" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "timestamp when account expires and will be deleted"],
+ "expire_notification_sent" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "timestamp of last warning of account expiration"],
+ "def_gid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
+ "allow_cid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
+ "allow_gid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
+ "deny_cid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
+ "deny_gid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
+ "openidserver" => ["type" => "text", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["uid"],
+ "nickname" => ["nickname(32)"],
+ ]
+ ],
+ "userd" => [
+ "comment" => "Deleted usernames",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
+ "username" => ["type" => "varchar(255)", "not null" => "1", "comment" => ""],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "username" => ["username(32)"],
+ ]
+ ],
+ "user-contact" => [
+ "comment" => "User specific public contact data",
+ "fields" => [
+ "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["contact" => "id"], "comment" => "Contact id of the linked public contact"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "blocked" => ["type" => "boolean", "comment" => "Contact is completely blocked for this user"],
+ "ignored" => ["type" => "boolean", "comment" => "Posts from this contact are ignored"],
+ "collapsed" => ["type" => "boolean", "comment" => "Posts from this contact are collapsed"]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["uid", "cid"]
+ ]
+ ],
+ "user-item" => [
+ "comment" => "User specific item data",
+ "fields" => [
+ "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["item" => "id"], "comment" => "Item id"],
+ "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["user" => "uid"], "comment" => "User id"],
+ "hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Marker to hide an item from the user"],
+ "ignored" => ["type" => "boolean", "comment" => "Ignore this thread if set"]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["uid", "iid"]
+ ]
+ ],
+ "worker-ipc" => [
+ "comment" => "Inter process communication between the frontend and the worker",
+ "fields" => [
+ "key" => ["type" => "int", "not null" => "1", "primary" => "1", "comment" => ""],
+ "jobs" => ["type" => "boolean", "comment" => "Flag for outstanding jobs"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["key"],
+ ],
+ "engine" => "MEMORY",
+ ],
+ "workerqueue" => [
+ "comment" => "Background tasks queue entries",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "Auto incremented worker task id"],
+ "parameter" => ["type" => "mediumtext", "comment" => "Task command"],
+ "priority" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "Task priority"],
+ "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Creation date"],
+ "pid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Process id of the worker"],
+ "executed" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Execution date"],
+ "next_try" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Next retrial date"],
+ "retrial" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Retrial counter"],
+ "done" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Marked 1 when the task was done - will be deleted later"],
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"],
+ "done_parameter" => ["done", "parameter(64)"],
+ "done_executed" => ["done", "executed"],
+ "done_priority_created" => ["done", "priority", "created"],
+ "done_priority_next_try" => ["done", "priority", "next_try"],
+ "done_pid_next_try" => ["done", "pid", "next_try"],
+ "done_pid_priority_created" => ["done", "pid", "priority", "created"]
+ ]
+ ],
+ "storage" => [
+ "comment" => "Data stored by Database storage backend",
+ "fields" => [
+ "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "Auto incremented image data id"],
+ "data" => ["type" => "longblob", "not null" => "1", "comment" => "file data"]
+ ],
+ "indexes" => [
+ "PRIMARY" => ["id"]
+ ]
+ ]
+];
+
--- /dev/null
+<?php
+
+// CONFIG.PHP
+
+/* This file declares the default values for the base config of Friendica.
+ *
+ * These configuration values aren't accessible from the admin settings page and custom values must be set in config/local.config.php
+ *
+ * Please don't edit this file directly as its content may change in the upcoming versions.
+ */
+
+return [
+ 'database' => [
+ // host (String)
+ // Hostname or IP address of the database server.
+ // Can contain the port number with the syntax "hostname:port".
+ 'hostname' => '',
+
+ // user (String)
+ // Database user name. Please don't use "root".
+ 'username' => '',
+
+ // pass (String)
+ // Database user password. Please don't use empty passwords.
+ 'password' => '',
+
+ // base (String)
+ // Database name.
+ 'database' => '',
+
+ // charset (String)
+ // Database connexion charset. Changing this value will likely corrupt special characters.
+ 'charset' => 'utf8mb4',
+ ],
+ 'config' => [
+ // admin_email (Comma-separated list)
+ // In order to perform system administration via the admin panel,
+ // this must precisely match the email address of the person logged in.
+ 'admin_email' => '',
+
+ // admin_nickname (String)
+ // Nickname of the main admin user, used if there are more than one admin user defined in config => admin_email.
+ 'admin_nickname' => '',
+
+ // max_import_size (Integer)
+ // Maximum body size of DFRN and Mail messages in characters. 0 is unlimited.
+ 'max_import_size' => 200000,
+
+ // php_path (String)
+ // Location of PHP command line processor.
+ 'php_path' => 'php',
+ ],
+ 'system' => [
+ // allowed_link_protocols (Array)
+ // Allowed protocols in links URLs, add at your own risk. http is always allowed.
+ 'allowed_link_protocols' => ['ftp', 'ftps', 'mailto', 'cid', 'gopher'],
+
+ // always_show_preview (Boolean)
+ // Only show small preview pictures.
+ 'always_show_preview' => false,
+
+ // archival_days (Integer)
+ // Number of days that we try to deliver content before we archive a contact.
+ 'archival_days' => 32,
+
+ // auth_cookie_lifetime (Integer)
+ // Number of days that should pass without any activity before a user who
+ // chose "Remember me" when logging in is considered logged out.
+ 'auth_cookie_lifetime' => 7,
+
+ // block_local_dir (Boolean)
+ // Deny public access to the local user directory.
+ 'block_local_dir' => false,
+
+ // cron_interval (Integer)
+ // Minimal period in minutes between two calls of the "Cron" worker job.
+ 'cron_interval' => 5,
+
+ // cache_driver (database|memcache|memcached|redis)
+ // Whether to use Memcache or Memcached or Redis to store temporary cache.
+ 'cache_driver' => 'database',
+
+ // config_adapter (jit|preload)
+ // Allow to switch the configuration adapter to improve performances at the cost of memory consumption.
+ 'config_adapter' => 'jit',
+
+ // curl_range_bytes (Integer)
+ // Maximum number of bytes that should be fetched. Default is 0, which mean "no limit".
+ 'curl_range_bytes' => 0,
+
+ // crawl_permit_period (Integer)
+ // Period in seconds between allowed searches when the number of free searches is reached and "permit_crawling" is activated.
+ 'crawl_permit_period' => 60,
+
+ // db_log (Path)
+ // Name of a logfile to log slow database queries.
+ 'db_log' => '',
+
+ // db_log_index (Path)
+ // Name of a logfile to log queries with bad indexes.
+ 'db_log_index' => '',
+
+ // db_log_index_watch (Comma-separated list)
+ // Watchlist of indexes to watch.
+ 'db_log_index_watch' => '',
+
+ // db_log_index_blacklist (Comma-separated list)
+ // Blacklist of indexes that shouldn't be watched.
+ 'db_log_index_blacklist' => '',
+
+ // db_loglimit (Integer)
+ // If a database call lasts longer than this value in seconds it is logged.
+ // Inactive if system => db_log is empty.
+ 'db_loglimit' => 10,
+
+ // db_loglimit_index (Integer)
+ // Number of index rows needed to be logged for indexes on the watchlist. 0 to disable.
+ 'db_loglimit_index' => 0,
+
+ // db_loglimit_index_high (Integer)
+ // Number of index rows to be logged anyway (for any index). 0 to disable.
+ 'db_loglimit_index_high' => 0,
+
+ // dbclean_expire_conversation (Integer)
+ // When DBClean is enabled, any entry in the conversation table will be deleted after this many days.
+ // This data is used for ActivityPub, so it shouldn't be lower than the average duration of a discussion.
+ 'dbclean_expire_conversation' => 90,
+
+ // dbclean-expire-limit (Integer)
+ // This defines the number of items that are to be deleted in a single call.
+ // Reduce this value when you are getting memory issues.
+ 'dbclean-expire-limit' => 1000,
+
+ // diaspora_test (Boolean)
+ // For development only. Disables the message transfer.
+ 'diaspora_test' => false,
+
+ // disable_email_validation (Boolean)
+ // Disables the check if a mail address is in a valid format and can be resolved via DNS.
+ 'disable_email_validation' => false,
+
+ // disable_implicit_mentions (Boolean) since 2019.03
+ // Implicit mentions are mentions in the body of replies that are redundant in a thread-enabled system like Friendica.
+ // This config key disables the gathering of implicit mentions in incoming and outgoing posts.
+ // Also disables the default automatic removal of implicit mentions from the body of incoming posts.
+ // Also disables the default automatic addition of implicit mentions in the body of outgoing posts.
+ // Disabling implicit mentions also affects the "explicit_mentions" additional feature by limiting it
+ // to the replied-to post author mention in the comment boxes.
+ 'disable_implicit_mentions' => false,
+
+ // disable_url_validation (Boolean)
+ // Disables the DNS lookup of an URL.
+ 'disable_url_validation' => false,
+
+ // disable_password_exposed (Boolean)
+ // Disable the exposition check against the remote haveibeenpwned API on password change.
+ 'disable_password_exposed' => false,
+
+ // disable_polling (Boolean)
+ // Disable the polling of DFRN and OStatus contacts through onepoll.php.
+ 'disable_polling' => false,
+
+ // dlogfile (Path)
+ // location of the developer log file.
+ 'dlogfile' => '',
+
+ // dlogip (String)
+ // restricts develop log writes to requests originating from this IP address.
+ 'dlogip' => '',
+
+ // free_crawls (Integer)
+ // Number of "free" searches when system => permit_crawling is enabled.
+ 'free_crawls' => 10,
+
+ // frontend_worker_timeout (Integer)
+ // Value in minutes after we think that a frontend task was killed by the webserver.
+ 'frontend_worker_timeout' => 10,
+
+ // groupedit_image_limit (Integer)
+ // Number of contacts at which the group editor should switch from display the profile pictures of the contacts to only display the names.
+ // This can alternatively be set on a per account basis in the pconfig table.
+ 'groupedit_image_limit' => 400,
+
+ // hsts (Boolean)
+ // Enables the sending of HTTP Strict Transport Security headers.
+ 'hsts' => false,
+
+ // ignore_cache (Boolean)
+ // For development only. Disables the item cache.
+ 'ignore_cache' => false,
+
+ // instances_social_key (String)
+ // Key to the API of https://instances.social which retrieves data about mastodon servers.
+ // See https://instances.social/api/token to get an API key.
+ 'instances_social_key' => '',
+
+ // ipv4_resolve (Boolean)
+ // Resolve IPV4 addresses only. Don't resolve to IPV6.
+ 'ipv4_resolve' => false,
+
+ // invitation_only (Boolean)
+ // If set true registration is only possible after a current member of the node has send an invitation.
+ 'invitation_only' => false,
+
+ // like_no_comment (Boolean)
+ // Don't update the "commented" value of an item when it is liked.
+ 'like_no_comment' => false,
+
+ // local_block (Boolean)
+ // Used in conjunction with "block_public".
+ 'local_block' => false,
+
+ // local_search (Boolean)
+ // Blocks search for users who are not logged in to prevent crawlers from blocking your system.
+ 'local_search' => false,
+
+ // local_tags (Boolean)
+ // If activated, all hashtags will point to the local server.
+ 'local_tags' => false,
+
+ // logger_config (String)
+ // Sets the logging adapter of Friendica globally (monolog, syslog, stream)
+ 'logger_config' => 'stream',
+
+ // max_batch_queue (Integer)
+ // Maximum number of batched queue items for a single contact before subsequent messages are discarded.
+ 'max_batch_queue' => 1000,
+
+ // max_connections (Integer)
+ // The maximum number of database connections which can be in use before the worker process is deferred to its next interval.
+ // When the system can't detect the maximum numbers of connection then this value can be used. Use 0 for auto-detection.
+ 'max_connections' => 0,
+
+ // max_connections_level (Integer 0-100)
+ // The maximum percentage of connections that are allowed to let the worker start.
+ 'max_connections_level' => 75,
+
+ // max_contact_queue (Integer)
+ // Maximum number of queue items for a single contact before subsequent messages are discarded.
+ 'max_contact_queue' => 500,
+
+ // max_image_length (Integer)
+ // An alternate way of limiting picture upload sizes.
+ // Specify the maximum pixel length that pictures are allowed to be (for non-square pictures, it will apply to the longest side).
+ // Pictures longer than this length will be resized to be this length (on the longest side, the other side will be scaled appropriately).
+ // If you don't want to set a maximum length, set to -1.
+ 'max_image_length' => -1,
+
+ // max_processes_backend (Integer)
+ // Maximum number of concurrent database processes for background tasks.
+ 'max_processes_backend' => 5,
+
+ // max_processes_frontend (Integer)
+ // Maximum number of concurrent database processes for foreground tasks.
+ 'max_processes_frontend' => 20,
+
+ // maximagesize (Integer)
+ // Maximum size in bytes of an uploaded photo.
+ 'maximagesize' => 800000,
+
+ // memcache_host (String)
+ // Host name of the memcache daemon.
+ 'memcache_host' => '127.0.0.1',
+
+ // memcache_port (Integer)
+ // Port number of the memcache daemon.
+ 'memcache_port' => 11211,
+
+ // memcached_hosts (Array)
+ // Array of Memcached servers info [host, port(, weight)], see Memcached::addServers.
+ 'memcached_hosts' => [
+ ['127.0.0.1', '11211'],
+ ],
+
+ // min_poll_interval (Integer)
+ // minimal distance in minutes between two polls for a contact. Reasonable values are between 1 and 59.
+ 'min_poll_interval' => 1,
+
+ // no_count (Boolean)
+ // Don't do count calculations (currently only when showing photo albums).
+ 'no_count' => false,
+
+ // no_oembed (Boolean)
+ // Don't use OEmbed to fetch more information about a link.
+ 'no_oembed' => false,
+
+ // no_smilies (Boolean)
+ // Don't show smilies.
+ 'no_smilies' => false,
+
+ // no_view_full_size (Boolean)
+ // Don't add the link "View full size" under a resized image.
+ 'no_view_full_size' => false,
+
+ // optimize_items (Boolean)
+ // Triggers an SQL command to optimize the item table before expiring items.
+ 'optimize_items' => false,
+
+ // paranoia (Boolean)
+ // Log out users if their IP address changed.
+ 'paranoia' => false,
+
+ // permit_crawling (Boolean)
+ // Restricts the search for not logged in users to one search per minute.
+ 'permit_crawling' => false,
+
+ // pidfile (Path)
+ // Daemon pid file path. For example: pidfile = /path/to/daemon.pid
+ 'pidfile' => '',
+
+ // png_quality (Integer)
+ // Sets the ImageMagick compression level for PNG images. Values ranges from 0 (uncompressed) to 9 (most compressed).
+ 'png_quality' => 8,
+
+ // profiler (Boolean)
+ // Enable internal timings to help optimize code. Needed for "rendertime" addon.
+ 'profiler' => false,
+
+ // proxy_cache_time (Integer)
+ // Period in seconds after which the cache is cleared.
+ 'proxy_cache_time' => 86400,
+
+ // pushpoll_frequency (Integer)
+ // Frequency of contact poll for subhub contact using the DFRM or OStatus network.
+ // Available values:
+ // - 5 = every month
+ // - 4 = every week
+ // - 3 = every day
+ // - 2 = twice a day
+ // - 1 = every hour
+ // - 0 = every minute
+ 'pushpoll_frequency' => 3,
+
+ // queue_no_dead_check (Boolean)
+ // Ignore if the target contact or server seems to be dead during queue delivery.
+ 'queue_no_dead_check' => false,
+
+ // redis_host (String)
+ // Host name of the redis daemon.
+ 'redis_host' => '127.0.0.1',
+
+ // redis_port (String)
+ // Port number of the redis daemon.
+ 'redis_port' => 6379,
+
+ // redis_db (Integer)
+ // The sub-database of redis (0 - 15 possible sub-databases)
+ 'redis_db' => 0,
+
+ // redis_password (String)
+ // The authentication password for the redis database
+ 'redis_password' => null,
+
+ // session_handler (database|cache|native)
+ // Whether to use Cache to store session data or to use PHP native session storage.
+ 'session_handler' => 'database',
+
+ // remove_multiplicated_lines (Boolean)
+ // If enabled, multiple linefeeds in items are stripped to a single one.
+ 'remove_multiplicated_lines' => false,
+
+ // sendmail_params (Boolean)
+ // Normal sendmail command parameters will be added when the PHP mail() function is called for sending e-mails.
+ // This ensures the Sender Email address setting is applied to the message envelope rather than the host's default address.
+ // Set to false if your non-sendmail agent is incompatible, or to restore old behavior of using the host address.
+ 'sendmail_params' => true,
+
+ // show_global_community_hint (Boolean)
+ // When the global community page is enabled, use this option to display a hint above the stream, that this is a collection of all public top-level postings that arrive on your node.
+ 'show_global_community_hint' => false,
+
+ // show_unsupported_addons (Boolean)
+ // Show all addons including the unsupported ones.
+ 'show_unsupported_addons' => false,
+
+ // show_unsupported_themes (Boolean)
+ // Show all themes including the unsupported ones.
+ 'show_unsupported_themes' => false,
+
+ // throttle_limit_day (Integer)
+ // Maximum number of posts that a user can send per day with the API. 0 to disable daily throttling.
+ 'throttle_limit_day' => 0,
+
+ // throttle_limit_week (Integer)
+ // Maximum number of posts that a user can send per week with the API. 0 to disable weekly throttling.
+ 'throttle_limit_week' => 0,
+
+ // throttle_limit_month (Integer)
+ // Maximum number of posts that a user can send per month with the API. 0 to disable monthly throttling.
+ 'throttle_limit_month' => 0,
+
+ // username_min_length (Integer)
+ // The minimum character length a username can be.
+ // This length is check once the username has been trimmed and multiple spaces have been collapsed into one.
+ // Minimum for this config value is 1. Maximum is 64 as the resulting profile URL mustn't be longer than 255 chars.
+ 'username_min_length' => 3,
+
+ // username_max_length (Integer)
+ // The maximum character length a username can be.
+ // This length is check once the username has been trimmed and multiple spaces have been collapsed into one.
+ // Minimum for this config value is 1. Maximum is 64 as the resulting profile URL mustn't be longer than 255 chars.
+ 'username_max_length' => 48,
+
+ // worker_cooldown (Integer)
+ // Cooldown period in seconds after each worker function call.
+ 'worker_cooldown' => 0,
+
+ // worker_debug (Boolean)
+ // If enabled, it prints out the number of running processes split by priority.
+ 'worker_debug' => false,
+
+ // worker_fetch_limit (Integer)
+ // Number of worker tasks that are fetched in a single query.
+ 'worker_fetch_limit' => 1,
+
+ // worker_jpm (Boolean)
+ // If enabled, it prints out the jobs per minute.
+ 'worker_jpm' => false,
+
+ // worker_jpm_range (String)
+ // List of minutes for the jobs per minute (JPM) calculation
+ 'worker_jpm_range' => '1, 10, 60',
+
+ // worker_load_exponent (Integer)
+ // Default 3, which allows only 25% of the maximum worker queues when server load reaches around 37% of maximum load.
+ // For a linear response where 25% of worker queues are allowed at 75% of maximum load, set this to 1.
+ // Setting 0 would allow maximum worker queues at all times, which is not recommended.
+ 'worker_load_exponent' => 3,
+
+ // xrd_timeout (Integer)
+ // Timeout in seconds for fetching the XRD links.
+ 'xrd_timeout' => 20,
+ ],
+ 'experimental' => [
+ // exp_themes (Boolean)
+ // Show experimental themes in user settings.
+ 'exp_themes' => false,
+ ],
+ 'theme' => [
+ // hide_eventlist (Boolean)
+ // Don't show the birthdays and events on the profile and network page.
+ 'hide_eventlist' => false,
+ ],
+ 'jabber' => [
+ // debug (Boolean)
+ // Enable debug level for the jabber account synchronisation.
+ 'debug' => false,
+ // lockpath (Path)
+ // Must be writable by the ejabberd process. if set then it will prevent the running of multiple processes.
+ 'lockpath' => '',
+ ],
+ 'debug' => [
+ // ap_inbox_log (Boolean)
+ // Logs every call to /inbox as a JSON file in Friendica's temporary directory
+ 'ap_inbox_log' => false,
+
+ // total_ap_delivery (Boolean)
+ // Deliver via AP to every possible receiver and we suppress the delivery to these contacts with other protocols
+ 'total_ap_delivery' => false,
+ ]
+];
--- /dev/null
+<?php
+
+// SETTINGS.PHP
+
+/* This file declares the default values for the admin settings of Friendica.
+ *
+ * These values will be overridden by the admin settings page.
+ *
+ * Please don't edit this file directly as its content may change in the upcoming versions.
+ */
+
+return [
+ 'config' => [
+ // info (String)
+ // Plaintext description of this node, used in the /friendica module.
+ 'info' => '',
+
+ // register_policy (Constant)
+ // Your choices are OPEN, APPROVE, or CLOSED.
+ // Be certain to create your own personal account before setting CLOSED.
+ // APPROVE requires you set system.admin_email to the email address of an
+ // already registered person who can authorize and/or approve/deny the request.
+ 'register_policy' => \Friendica\Module\Register::CLOSED,
+
+ // register_text (String)
+ // Will be displayed prominently on the registration page.
+ 'register_text' => '',
+
+ // sitename (String)
+ // Displayed server name.
+ 'sitename' => 'Friendica Social Network',
+ ],
+ 'system' => [
+ // account_abandon_days (Integer)
+ // Will not waste system resources polling external sites for abandonded accounts.
+ // Enter 0 for no time limit.
+ 'account_abandon_days' => 0,
+
+ // addon (Comma-separated list)
+ // Manual list of addons which are enabled on this system.
+ 'addon' => '',
+
+ // allowed_themes (Comma-separated list)
+ // Themes users can change to in their settings.
+ 'allowed_themes' => 'quattro,vier,duepuntozero,smoothly',
+
+ // debugging (boolean)
+ // Enable/Disable Debugging (logging)
+ 'debugging' => false,
+
+ // default_timezone (String)
+ // Choose a default timezone. See https://secure.php.net/manual/en/timezones.php
+ // It only applies to timestamps for anonymous viewers.
+ 'default_timezone' => 'UTC',
+
+ // directory (String)
+ // URL of the global directory.
+ 'directory' => 'https://dir.friendica.social',
+
+ // forbidden_nicknames (Comma-separated list)
+ // Prevents users from registering the specified nicknames on this node.
+ // Default value comprises classic role names from RFC 2142.
+ 'forbidden_nicknames' => 'info, marketing, sales, support, abuse, noc, security, postmaster, hostmaster, usenet, news, webmaster, www, uucp, ftp, root, sysop',
+
+ // jpeg_quality (Integer)
+ // Sets the ImageMagick quality level for JPEG images. Values ranges from 50 (awful) to 100 (near perfect).
+ 'jpeg_quality' => 100,
+
+ // language (String)
+ // System default languague, inluding admin-created user default language.
+ // Two-letters ISO 639-1 code.
+ 'language' => 'en',
+
+ // logfile (String)
+ // The logfile for storing logs.
+ // Can be a full path or a relative path to the Friendica home directory
+ 'logfile' => 'log/friendica.log',
+
+ // loglevel (String)
+ // The loglevel for all logs.
+ // Has to be one of these values: emergency, alert, critical, error, warning, notice, info, debug
+ 'loglevel' => 'notice',
+
+ // max_image_length (Integer)
+ // An alternate way of limiting picture upload sizes.
+ // Specify the maximum pixel length that pictures are allowed to be (for non-square pictures, it will apply to the longest side).
+ // Pictures longer than this length will be resized to be this length (on the longest side, the other side will be scaled appropriately).
+ // If you don't want to set a maximum length, set to -1.
+ 'max_image_length' => -1,
+
+ // maximagesize (Integer)
+ // Maximum size in bytes of an uploaded photo.
+ 'maximagesize' => 800000,
+
+ // no_regfullname (Boolean)
+ // Allow pseudonyms (true) or enforce a space between first name and last name in Full name, as an anti spam measure (false).
+ 'no_regfullname' => true,
+
+ // optimize_max_tablesize (Integer)
+ // Maximum table size (in MB) for the automatic optimization.
+ // -1 to disable automatic optimization.
+ // 0 to use internal default (100MB)
+ 'optimize_max_tablesize' => -1,
+
+ // maxloadavg (Integer)
+ // Maximum system load before delivery and poll processes are deferred.
+ 'maxloadavg' => 20,
+
+ // rino_encrypt (Integer)
+ // Server-to-server private message encryption (RINO).
+ // Encryption will only be provided if this setting is set to a non zero value on both servers.
+ // Set to 0 to disable, 2 to enable, 1 is deprecated but won't need mcrypt.
+ 'rino_encrypt' => 2,
+
+ // temppath (String)
+ // Custom temporary file directory
+ 'temppath' => '',
+
+ // theme (String)
+ // System theme name.
+ 'theme' => 'vier',
+
+ // url (String)
+ // The fully-qualified URL of this Friendica node.
+ // Used by the worker in a non-HTTP execution environment.
+ 'url' => '',
+ ],
+
+ // Used in the admin settings to lock certain features
+ 'featurelock' => [
+ ],
+];
namespace Friendica\Test;
use Friendica\App\Mode;
-use Friendica\App\Router;
use Friendica\Core\Config\Cache\ConfigCache;
use Friendica\Database\Database;
use Friendica\Factory\ConfigFactory;
use Friendica\Factory\DBFactory;
use Friendica\Factory\ProfilerFactory;
use Friendica\Util\BasePath;
-use Friendica\Util\Config\ConfigFileLoader;
+use Friendica\Util\ConfigFileLoader;
use Friendica\Util\Profiler;
use PHPUnit\DbUnit\DataSet\YamlDataSet;
use PHPUnit\DbUnit\TestCaseTrait;
$structure = [
'config' => [],
'bin' => [],
- 'test' => []
+ 'static' => [],
+ 'test' => [],
];
// create a virtual directory and copy all needed files and folders to it
$this->root = vfsStream::setup('friendica', 0777, $structure);
- $this->setConfigFile('defaults.config.php');
- $this->setConfigFile('settings.config.php');
+ $this->setConfigFile('defaults.config.php', true);
+ $this->setConfigFile('settings.config.php', true);
$this->setConfigFile('local.config.php');
- $this->setConfigFile('dbstructure.config.php');
}
/**
* Copying a config file from the file system to the Virtual File System
*
* @param string $filename The filename of the config file
+ * @param bool $static True, if the folder `static` instead of `config` should be used
*/
- protected function setConfigFile($filename)
+ protected function setConfigFile($filename, bool $static = false)
{
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
'..' . DIRECTORY_SEPARATOR .
- 'config' . DIRECTORY_SEPARATOR .
+ ($static ? 'static' : 'config') . DIRECTORY_SEPARATOR .
$filename;
if (file_exists($file)) {
vfsStream::newFile($filename)
- ->at($this->root->getChild('config'))
+ ->at($this->root->getChild(($static ? 'static' : 'config')))
->setContent(file_get_contents($file));
}
}
* Delets a config file from the Virtual File System
*
* @param string $filename The filename of the config file
+ * @param bool $static True, if the folder `static` instead of `config` should be used
*/
- protected function delConfigFile($filename)
+ protected function delConfigFile($filename, bool $static = false)
{
- if ($this->root->hasChild('config/' . $filename)) {
- $this->root->getChild('config')->removeChild($filename);
+ if ($this->root->hasChild(($static ? 'static' : 'config') . '/' . $filename)) {
+ $this->root->getChild(($static ? 'static' : 'config'))->removeChild($filename);
}
}
}
--- /dev/null
+<?php
+
+/**
+ * A test file for local configuration
+ *
+ */
+
+return [
+ 'database' => [
+ 'hostname' => 'testhost',
+ 'username' => 'testuser',
+ 'password' => 'testpw',
+ 'database' => 'testdb',
+ 'charset' => 'utf8mb4',
+ ],
+
+ 'config' => [
+ 'admin_email' => 'admin@test.it',
+ 'sitename' => 'Friendica Social Network',
+ 'register_policy' => \Friendica\Module\Register::OPEN,
+ 'register_text' => '',
+ ],
+ 'system' => [
+ 'default_timezone' => 'UTC',
+ 'language' => 'en',
+ 'theme' => 'frio',
+ ],
+];
--- /dev/null
+<?php
+/**
+ * A test local ini file
+ */
+
+return <<<INI
+
+[database]
+hostname = testhost
+username = testuser
+password = testpw
+database = testdb
+
+[system]
+theme = frio
+
+[config]
+admin_email = admin@test.it
+INI;
--- /dev/null
+<?php
+
+/**
+ * A test file for local configuration
+ *
+ */
+
+return [
+ 'database' => [
+ 'hostname' => 'testhost',
+ 'username' => 'testuser',
+ 'password' => 'testpw',
+ 'database' => 'testdb',
+ 'charset' => 'utf8mb4',
+ ],
+
+ 'config' => [
+ 'admin_email' => 'admin@overwritten.local',
+ 'sitename' => 'Friendica Social Network',
+ 'register_policy' => \Friendica\Module\Register::OPEN,
+ 'register_text' => '',
+ ],
+ 'system' => [
+ 'default_timezone' => 'UTC',
+ 'language' => 'en',
+ 'theme' => 'frio',
+ 'newKey' => 'newValue',
+ ],
+];
--- /dev/null
+<?php
+/**
+ * A test local ini file
+ */
+
+return <<<INI
+
+[database]
+hostname = testhost
+username = testuser
+password = testpw
+database = testdb
+
+[system]
+theme = changed
+newKey = newValue
+
+[config]
+admin_email = admin@overwritten.local
+INI;
+++ /dev/null
-<?php
-
-/**
- * A test file for local configuration
- *
- */
-
-return [
- 'database' => [
- 'hostname' => 'testhost',
- 'username' => 'testuser',
- 'password' => 'testpw',
- 'database' => 'testdb',
- 'charset' => 'utf8mb4',
- ],
-
- 'config' => [
- 'admin_email' => 'admin@test.it',
- 'sitename' => 'Friendica Social Network',
- 'register_policy' => \Friendica\Module\Register::OPEN,
- 'register_text' => '',
- ],
- 'system' => [
- 'default_timezone' => 'UTC',
- 'language' => 'en',
- 'theme' => 'frio',
- ],
-];
+++ /dev/null
-<?php
-/**
- * A test local ini file
- */
-
-return <<<INI
-
-[database]
-hostname = testhost
-username = testuser
-password = testpw
-database = testdb
-
-[system]
-theme = frio
-
-[config]
-admin_email = admin@test.it
-INI;
use Friendica\Factory;
use Friendica\Network\HTTPException;
use Friendica\Util\BaseURL;
+use Friendica\Util\ConfigFileLoader;
use Monolog\Handler\TestHandler;
require_once __DIR__ . '/../../include/api.php';
// Local configuration
-// If you're unsure about what any of the config keys below do, please check the config/defaults.config.php for detailed
+// If you're unsure about what any of the config keys below do, please check the static/defaults.config.php for detailed
// documentation of their data type and behavior.
return [
use Friendica\Core\Config\Cache\ConfigCache;
use Friendica\Test\MockedTest;
use Friendica\Test\Util\VFSTrait;
-use Friendica\Util\Config\ConfigFileLoader;
+use Friendica\Util\ConfigFileLoader;
use Mockery\MockInterface;
use org\bovigo\vfs\vfsStream;
'..' . DIRECTORY_SEPARATOR .
'datasets' . DIRECTORY_SEPARATOR .
'config' . DIRECTORY_SEPARATOR .
- 'local.config.php';
+ 'A.config.php';
vfsStream::newFile('local.config.php')
->at($this->root->getChild('config'))
'..' . DIRECTORY_SEPARATOR .
'datasets' . DIRECTORY_SEPARATOR .
'config' . DIRECTORY_SEPARATOR .
- 'local.ini.php';
+ 'A.ini.php';
vfsStream::newFile('local.ini.php')
->at($this->root->getChild('config'))
'..' . DIRECTORY_SEPARATOR .
'datasets' . DIRECTORY_SEPARATOR .
'config' . DIRECTORY_SEPARATOR .
- 'local.config.php';
+ 'A.config.php';
vfsStream::newFile('test.config.php')
->at($this->root->getChild('addon')->getChild('test')->getChild('config'))
$this->assertEquals('admin@test.it', $conf['config']['admin_email']);
}
+
+ /**
+ * test loading multiple config files - the last config should work
+ */
+ public function testLoadMultipleConfigs()
+ {
+ $this->delConfigFile('local.config.php');
+
+ $fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR .
+ '..' . DIRECTORY_SEPARATOR .
+ '..' . DIRECTORY_SEPARATOR .
+ 'datasets' . DIRECTORY_SEPARATOR .
+ 'config' . DIRECTORY_SEPARATOR;
+
+ vfsStream::newFile('A.config.php')
+ ->at($this->root->getChild('config'))
+ ->setContent(file_get_contents($fileDir . 'A.config.php'));
+ vfsStream::newFile('B.config.php')
+ ->at($this->root->getChild('config'))
+ ->setContent(file_get_contents($fileDir . 'B.config.php'));
+
+ $configFileLoader = new ConfigFileLoader($this->root->url(), $this->mode);
+ $configCache = new ConfigCache();
+
+ $configFileLoader->setupCache($configCache);
+
+ $this->assertEquals('admin@overwritten.local', $configCache->get('config', 'admin_email'));
+ $this->assertEquals('newValue', $configCache->get('system', 'newKey'));
+ }
+
+ /**
+ * test loading multiple config files - the last config should work (INI-version)
+ */
+ public function testLoadMultipleInis()
+ {
+ $this->delConfigFile('local.config.php');
+
+ $fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR .
+ '..' . DIRECTORY_SEPARATOR .
+ '..' . DIRECTORY_SEPARATOR .
+ 'datasets' . DIRECTORY_SEPARATOR .
+ 'config' . DIRECTORY_SEPARATOR;
+
+ vfsStream::newFile('A.ini.php')
+ ->at($this->root->getChild('config'))
+ ->setContent(file_get_contents($fileDir . 'A.ini.php'));
+ vfsStream::newFile('B.ini.php')
+ ->at($this->root->getChild('config'))
+ ->setContent(file_get_contents($fileDir . 'B.ini.php'));
+
+ $configFileLoader = new ConfigFileLoader($this->root->url(), $this->mode);
+ $configCache = new ConfigCache();
+
+ $configFileLoader->setupCache($configCache);
+
+ $this->assertEquals('admin@overwritten.local', $configCache->get('config', 'admin_email'));
+ $this->assertEquals('newValue', $configCache->get('system', 'newKey'));
+ }
+
+ /**
+ * Test that sample-files (e.g. local-sample.config.php) is never loaded
+ */
+ public function testNotLoadingSamples()
+ {
+ $this->delConfigFile('local.config.php');
+
+ $fileDir = dirname(__DIR__) . DIRECTORY_SEPARATOR .
+ '..' . DIRECTORY_SEPARATOR .
+ '..' . DIRECTORY_SEPARATOR .
+ 'datasets' . DIRECTORY_SEPARATOR .
+ 'config' . DIRECTORY_SEPARATOR;
+
+ vfsStream::newFile('A.ini.php')
+ ->at($this->root->getChild('config'))
+ ->setContent(file_get_contents($fileDir . 'A.ini.php'));
+ vfsStream::newFile('B-sample.ini.php')
+ ->at($this->root->getChild('config'))
+ ->setContent(file_get_contents($fileDir . 'B.ini.php'));
+
+ $configFileLoader = new ConfigFileLoader($this->root->url(), $this->mode);
+ $configCache = new ConfigCache();
+
+ $configFileLoader->setupCache($configCache);
+
+ $this->assertEquals('admin@test.it', $configCache->get('config', 'admin_email'));
+ $this->assertEmpty($configCache->get('system', 'NewKey'));
+ }
}
* This function is responsible for doing post update changes to the data
* (not the structure) in the database.
*
- * Database structure changes are done in config/dbstructure.config.php
+ * Database structure changes are done in static/dbstructure.config.php
*
* If there is a need for a post process to a structure change, update this file
* by adding a new function at the end with the number of the new DB_UPDATE_VERSION.
* You are currently on version 4711 and you are preparing changes that demand an update script.
*
* 1. Create a function "update_4712()" here in the update.php
- * 2. Apply the needed structural changes in config/dbStructure.php
- * 3. Set DB_UPDATE_VERSION in config/dbstructure.config.php to 4712.
+ * 2. Apply the needed structural changes in static/dbStructure.php
+ * 3. Set DB_UPDATE_VERSION in static/dbstructure.config.php to 4712.
*
* If you need to run a script before the database update, name the function "pre_update_4712()"
*/
// Local configuration
-// If you're unsure about what any of the config keys below do, please check the config/defaults.config.php for detailed
+// If you're unsure about what any of the config keys below do, please check the static/defaults.config.php for detailed
// documentation of their data type and behavior.
return [