2014-04-28 17:55:47 -04:00
< ? php
2017-12-01 18:13:39 -05:00
/**
2017-12-14 16:14:02 -05:00
* @ file src / Database / DBStructure . php
2017-12-01 18:13:39 -05:00
*/
2017-12-14 16:14:02 -05:00
namespace Friendica\Database ;
2018-07-19 22:15:21 -04:00
use Exception ;
use Friendica\Core\Addon ;
2017-04-30 00:01:26 -04:00
use Friendica\Core\Config ;
2018-01-21 11:38:01 -05:00
use Friendica\Core\L10n ;
2018-07-21 08:25:11 -04:00
use Friendica\Util\DateTimeFormat ;
2017-03-19 18:58:35 -04:00
2018-01-22 09:54:13 -05:00
require_once 'boot.php' ;
2017-12-17 15:24:57 -05:00
require_once 'include/dba.php' ;
require_once 'include/enotify.php' ;
2018-01-22 09:54:13 -05:00
require_once 'include/text.php' ;
2014-09-07 11:28:38 -04:00
2017-12-14 16:14:02 -05:00
/**
* @ brief This class contain functions for the database management
*
* This class contains functions that doesn ' t need to know if pdo , mysqli or whatever is used .
2017-04-22 17:36:01 -04:00
*/
2018-01-22 09:54:13 -05:00
class DBStructure
{
2017-12-14 16:14:02 -05:00
/*
* Converts all tables from MyISAM to InnoDB
*/
public static function convertToInnoDB () {
$r = q ( " SELECT `TABLE_NAME` FROM `information_schema`.`tables` WHERE `engine` = 'MyISAM' AND `table_schema` = '%s' " ,
2018-07-20 22:00:16 -04:00
dbesc ( DBA :: databaseName ()));
2017-12-14 16:14:02 -05:00
2018-07-21 08:46:04 -04:00
if ( ! DBA :: isResult ( $r )) {
2018-01-22 09:54:13 -05:00
echo L10n :: t ( 'There are no tables on MyISAM.' ) . " \n " ;
2017-12-14 16:14:02 -05:00
return ;
}
2017-04-22 17:36:01 -04:00
2017-12-14 16:14:02 -05:00
foreach ( $r AS $table ) {
$sql = sprintf ( " ALTER TABLE `%s` engine=InnoDB; " , dbesc ( $table [ 'TABLE_NAME' ]));
echo $sql . " \n " ;
2018-07-20 08:19:26 -04:00
$result = DBA :: e ( $sql );
2018-07-21 08:46:04 -04:00
if ( ! DBA :: isResult ( $result )) {
2017-12-14 16:14:02 -05:00
self :: printUpdateError ( $sql );
}
}
2017-04-22 17:36:01 -04:00
}
2017-12-14 16:14:02 -05:00
/*
* send the email and do what is needed to do on update fails
*
* @ param update_id ( int ) number of failed update
* @ param error_message ( str ) error message
*/
public static function updateFail ( $update_id , $error_message ) {
$a = get_app ();
//send the administrators an e-mail
2018-07-07 17:46:30 -04:00
$admin_mail_list = " ' " . implode ( " ',' " , array_map ( 'dbesc' , explode ( " , " , str_replace ( " " , " " , Config :: get ( 'config' , 'admin_email' ))))) . " ' " ;
2017-12-14 16:14:02 -05:00
$adminlist = q ( " SELECT uid, language, email FROM user WHERE email IN (%s) " ,
$admin_mail_list
);
// No valid result?
2018-07-21 08:46:04 -04:00
if ( ! DBA :: isResult ( $adminlist )) {
2018-07-22 14:07:44 -04:00
logger ( sprintf ( 'Cannot notify administrators about update_id=%d, error_message=%s' , $update_id , $error_message ), LOGGER_INFO );
2017-04-22 17:36:01 -04:00
2017-12-14 16:14:02 -05:00
// Don't continue
return ;
2017-04-22 17:36:01 -04:00
}
2017-12-14 16:14:02 -05:00
// every admin could had different language
foreach ( $adminlist as $admin ) {
$lang = (( $admin [ 'language' ]) ? $admin [ 'language' ] : 'en' );
2018-01-21 11:38:01 -05:00
L10n :: pushLang ( $lang );
2017-12-14 16:14:02 -05:00
2018-01-22 09:54:13 -05:00
$preamble = deindent ( L10n :: t ( "
2017-12-14 16:14:02 -05:00
The friendica developers released update % s recently ,
but when I tried to install it , something went terribly wrong .
This needs to be fixed soon and I can ' t do it alone . Please contact a
friendica developer if you can not help me on your own . My database might be invalid . " ));
2018-01-22 09:54:13 -05:00
$body = L10n :: t ( " The error message is \n [pre]%s[/pre] " );
2017-12-14 16:14:02 -05:00
$preamble = sprintf ( $preamble , $update_id );
$body = sprintf ( $body , $error_message );
2018-01-15 08:05:12 -05:00
notification ([
2017-12-14 16:14:02 -05:00
'type' => SYSTEM_EMAIL ,
'to_email' => $admin [ 'email' ],
'preamble' => $preamble ,
'body' => $body ,
2018-01-15 08:05:12 -05:00
'language' => $lang ]
2017-12-14 16:14:02 -05:00
);
}
2016-09-19 16:13:33 -04:00
2017-12-14 16:14:02 -05:00
//try the logger
logger ( " CRITICAL: Database structure update failed: " . $error_message );
2014-09-07 08:23:03 -04:00
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
private static function tableStructure ( $table ) {
$structures = q ( " DESCRIBE `%s` " , $table );
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
$full_columns = q ( " SHOW FULL COLUMNS FROM `%s` " , $table );
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
$indexes = q ( " SHOW INDEX FROM `%s` " , $table );
2017-04-14 03:58:56 -04:00
2017-12-14 16:14:02 -05:00
$table_status = q ( " SHOW TABLE STATUS WHERE `name` = '%s' " , $table );
2014-04-28 17:55:47 -04:00
2018-07-21 08:46:04 -04:00
if ( DBA :: isResult ( $table_status )) {
2017-12-14 16:14:02 -05:00
$table_status = $table_status [ 0 ];
} else {
2018-01-15 08:05:12 -05:00
$table_status = [];
2017-12-14 16:14:02 -05:00
}
2017-04-14 03:58:56 -04:00
2018-01-15 08:05:12 -05:00
$fielddata = [];
$indexdata = [];
2017-04-14 03:58:56 -04:00
2018-07-21 08:46:04 -04:00
if ( DBA :: isResult ( $indexes )) {
2017-12-14 16:14:02 -05:00
foreach ( $indexes AS $index ) {
if ( $index [ 'Key_name' ] != 'PRIMARY' && $index [ 'Non_unique' ] == '0' && ! isset ( $indexdata [ $index [ " Key_name " ]])) {
2018-01-15 08:05:12 -05:00
$indexdata [ $index [ " Key_name " ]] = [ 'UNIQUE' ];
2017-12-14 16:14:02 -05:00
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
$column = $index [ " Column_name " ];
2016-10-01 23:29:30 -04:00
2017-12-14 16:14:02 -05:00
if ( $index [ " Sub_part " ] != " " ) {
$column .= " ( " . $index [ " Sub_part " ] . " ) " ;
}
2017-10-25 00:44:45 -04:00
2017-12-14 16:14:02 -05:00
$indexdata [ $index [ " Key_name " ]][] = $column ;
2016-12-22 10:50:40 -05:00
}
2014-04-28 17:55:47 -04:00
}
2018-07-21 08:46:04 -04:00
if ( DBA :: isResult ( $structures )) {
2017-12-14 16:14:02 -05:00
foreach ( $structures AS $field ) {
2018-01-14 10:13:00 -05:00
// Replace the default size values so that we don't have to define them
2018-02-20 02:40:21 -05:00
$search = [ 'tinyint(1)' , 'tinyint(3) unsigned' , 'tinyint(4)' , 'smallint(5) unsigned' , 'smallint(6)' , 'mediumint(8) unsigned' , 'mediumint(9)' , 'bigint(20)' , 'int(10) unsigned' , 'int(11)' ];
$replace = [ 'boolean' , 'tinyint unsigned' , 'tinyint' , 'smallint unsigned' , 'smallint' , 'mediumint unsigned' , 'mediumint' , 'bigint' , 'int unsigned' , 'int' ];
2018-01-14 10:13:00 -05:00
$field [ " Type " ] = str_replace ( $search , $replace , $field [ " Type " ]);
2017-12-14 16:14:02 -05:00
$fielddata [ $field [ " Field " ]][ " type " ] = $field [ " Type " ];
if ( $field [ " Null " ] == " NO " ) {
$fielddata [ $field [ " Field " ]][ " not null " ] = true ;
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
if ( isset ( $field [ " Default " ])) {
$fielddata [ $field [ " Field " ]][ " default " ] = $field [ " Default " ];
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
if ( $field [ " Extra " ] != " " ) {
$fielddata [ $field [ " Field " ]][ " extra " ] = $field [ " Extra " ];
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
if ( $field [ " Key " ] == " PRI " ) {
$fielddata [ $field [ " Field " ]][ " primary " ] = true ;
}
2016-12-22 10:50:40 -05:00
}
2014-04-28 17:55:47 -04:00
}
2018-07-21 08:46:04 -04:00
if ( DBA :: isResult ( $full_columns )) {
2017-12-14 16:14:02 -05:00
foreach ( $full_columns AS $column ) {
$fielddata [ $column [ " Field " ]][ " Collation " ] = $column [ " Collation " ];
2018-01-14 10:13:00 -05:00
$fielddata [ $column [ " Field " ]][ " comment " ] = $column [ " Comment " ];
2017-12-14 16:14:02 -05:00
}
2017-04-14 03:58:56 -04:00
}
2018-01-15 08:05:12 -05:00
return [ " fields " => $fielddata , " indexes " => $indexdata , " table_status " => $table_status ];
2014-04-28 17:55:47 -04:00
}
2017-04-16 09:21:49 -04:00
2017-12-14 17:22:44 -05:00
public static function printStructure () {
$database = self :: definition ();
2017-12-14 16:14:02 -05:00
echo " -- ------------------------------------------ \n " ;
echo " -- " . FRIENDICA_PLATFORM . " " . FRIENDICA_VERSION . " ( " . FRIENDICA_CODENAME , " ) \n " ;
echo " -- DB_UPDATE_VERSION " . DB_UPDATE_VERSION . " \n " ;
echo " -- ------------------------------------------ \n \n \n " ;
foreach ( $database AS $name => $structure ) {
echo " -- \n " ;
echo " -- TABLE $name\n " ;
echo " -- \n " ;
2018-06-02 01:03:23 -04:00
self :: createTable ( $name , $structure , true , false );
2017-12-14 16:14:02 -05:00
echo " \n " ;
}
2016-12-22 10:50:40 -05:00
}
2016-10-02 09:52:52 -04:00
2017-12-14 16:14:02 -05:00
/**
* @ brief Print out database error messages
*
* @ param string $message Message to be added to the error message
*
* @ return string Error message
*/
private static function printUpdateError ( $message ) {
2018-01-23 21:59:16 -05:00
echo L10n :: t ( " \n Error %d occurred during database update: \n %s \n " ,
2018-07-20 08:19:26 -04:00
DBA :: errorNo (), DBA :: errorMessage ());
2017-12-14 16:14:02 -05:00
2018-01-22 09:54:13 -05:00
return L10n :: t ( 'Errors encountered performing database changes: ' ) . $message . EOL ;
2017-12-14 16:14:02 -05:00
}
2014-04-28 17:55:47 -04:00
2018-01-04 19:42:48 -05:00
/**
* Updates DB structure and returns eventual errors messages
*
* @ param bool $verbose
* @ param bool $action Whether to actually apply the update
2018-03-17 05:42:29 -04:00
* @ param bool $install Is this the initial update during the installation ?
2018-01-04 19:42:48 -05:00
* @ param array $tables An array of the database tables
* @ param array $definition An array of the definition tables
* @ return string Empty string if the update is successful , error messages otherwise
*/
2018-03-17 05:04:38 -04:00
public static function update ( $verbose , $action , $install = false , array $tables = null , array $definition = null ) {
if ( $action && ! $install ) {
2017-12-14 16:14:02 -05:00
Config :: set ( 'system' , 'maintenance' , 1 );
2018-07-21 08:25:11 -04:00
Config :: set ( 'system' , 'maintenance_reason' , L10n :: t ( '%s: Database update' , DateTimeFormat :: utcNow () . ' ' . date ( 'e' )));
2017-12-14 16:14:02 -05:00
}
2014-09-03 18:58:52 -04:00
2018-01-04 19:42:48 -05:00
$errors = '' ;
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
logger ( 'updating structure' , LOGGER_DEBUG );
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
// Get the current structure
2018-01-15 08:05:12 -05:00
$database = [];
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
if ( is_null ( $tables )) {
$tables = q ( " SHOW TABLES " );
2017-04-14 03:58:56 -04:00
}
2014-04-28 17:55:47 -04:00
2018-07-21 08:46:04 -04:00
if ( DBA :: isResult ( $tables )) {
2017-12-14 16:14:02 -05:00
foreach ( $tables AS $table ) {
$table = current ( $table );
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
logger ( sprintf ( 'updating structure for table %s ...' , $table ), LOGGER_DEBUG );
$database [ $table ] = self :: tableStructure ( $table );
2015-12-03 10:39:20 -05:00
}
2017-12-14 16:14:02 -05:00
}
// Get the definition
if ( is_null ( $definition )) {
$definition = self :: definition ();
}
// MySQL >= 5.7.4 doesn't support the IGNORE keyword in ALTER TABLE statements
2018-07-20 22:04:43 -04:00
if (( version_compare ( DBA :: serverInfo (), '5.7.4' ) >= 0 ) &&
! ( strpos ( DBA :: serverInfo (), 'MariaDB' ) !== false )) {
2017-12-14 16:14:02 -05:00
$ignore = '' ;
2014-06-15 04:47:20 -04:00
} else {
2017-12-14 16:14:02 -05:00
$ignore = ' IGNORE' ;
}
// Compare it
foreach ( $definition AS $name => $structure ) {
2018-02-14 00:05:00 -05:00
$is_new_table = false ;
2017-12-14 16:14:02 -05:00
$group_by = " " ;
$sql3 = " " ;
2018-02-14 00:05:00 -05:00
$is_unique = false ;
$temp_name = $name ;
2017-12-14 16:14:02 -05:00
if ( ! isset ( $database [ $name ])) {
2018-06-02 01:03:23 -04:00
$r = self :: createTable ( $name , $structure , $verbose , $action );
2018-07-21 08:46:04 -04:00
if ( ! DBA :: isResult ( $r )) {
2017-12-14 16:14:02 -05:00
$errors .= self :: printUpdateError ( $name );
2017-01-15 18:30:43 -05:00
}
2018-02-14 00:05:00 -05:00
$is_new_table = true ;
2017-12-14 16:14:02 -05:00
} else {
foreach ( $structure [ " indexes " ] AS $indexname => $fieldnames ) {
if ( isset ( $database [ $name ][ " indexes " ][ $indexname ])) {
$current_index_definition = implode ( " , " , $database [ $name ][ " indexes " ][ $indexname ]);
} else {
$current_index_definition = " __NOT_SET__ " ;
}
$new_index_definition = implode ( " , " , $fieldnames );
if ( $current_index_definition != $new_index_definition ) {
if ( $fieldnames [ 0 ] == " UNIQUE " ) {
$is_unique = true ;
if ( $ignore == " " ) {
$temp_name = " temp- " . $name ;
}
2017-01-29 12:31:20 -05:00
}
2017-01-15 18:30:43 -05:00
}
}
2017-12-14 16:14:02 -05:00
/*
* Drop the index if it isn ' t present in the definition
* or the definition differ from current status
* and index name doesn ' t start with " local_ "
*/
foreach ( $database [ $name ][ " indexes " ] as $indexname => $fieldnames ) {
$current_index_definition = implode ( " , " , $fieldnames );
if ( isset ( $structure [ " indexes " ][ $indexname ])) {
$new_index_definition = implode ( " , " , $structure [ " indexes " ][ $indexname ]);
2016-12-22 10:50:40 -05:00
} else {
2017-12-14 16:14:02 -05:00
$new_index_definition = " __NOT_SET__ " ;
2016-12-22 10:50:40 -05:00
}
2017-12-14 16:14:02 -05:00
if ( $current_index_definition != $new_index_definition && substr ( $indexname , 0 , 6 ) != 'local_' ) {
$sql2 = self :: dropIndex ( $indexname );
if ( $sql3 == " " ) {
$sql3 = " ALTER " . $ignore . " TABLE ` " . $temp_name . " ` " . $sql2 ;
} else {
$sql3 .= " , " . $sql2 ;
}
2016-12-22 10:50:40 -05:00
}
2017-12-14 16:14:02 -05:00
}
// Compare the field structure field by field
foreach ( $structure [ " fields " ] AS $fieldname => $parameters ) {
if ( ! isset ( $database [ $name ][ " fields " ][ $fieldname ])) {
$sql2 = self :: addTableField ( $fieldname , $parameters );
2016-12-22 10:50:40 -05:00
if ( $sql3 == " " ) {
2017-02-26 03:36:05 -05:00
$sql3 = " ALTER " . $ignore . " TABLE ` " . $temp_name . " ` " . $sql2 ;
2016-12-22 10:50:40 -05:00
} else {
2014-06-03 18:44:58 -04:00
$sql3 .= " , " . $sql2 ;
2016-12-22 10:50:40 -05:00
}
2017-12-14 16:14:02 -05:00
} else {
// Compare the field definition
$field_definition = $database [ $name ][ " fields " ][ $fieldname ];
// Remove the relation data that is used for the referential integrity
unset ( $parameters [ 'relation' ]);
// We change the collation after the indexes had been changed.
// This is done to avoid index length problems.
// So here we always ensure that there is no need to change it.
unset ( $parameters [ 'Collation' ]);
unset ( $field_definition [ 'Collation' ]);
2018-01-14 10:13:00 -05:00
// Only update the comment when it is defined
if ( ! isset ( $parameters [ 'comment' ])) {
$parameters [ 'comment' ] = " " ;
}
2018-07-20 21:59:17 -04:00
$current_field_definition = DBA :: cleanQuery ( implode ( " , " , $field_definition ));
$new_field_definition = DBA :: cleanQuery ( implode ( " , " , $parameters ));
2017-12-14 16:14:02 -05:00
if ( $current_field_definition != $new_field_definition ) {
$sql2 = self :: modifyTableField ( $fieldname , $parameters );
if ( $sql3 == " " ) {
$sql3 = " ALTER " . $ignore . " TABLE ` " . $temp_name . " ` " . $sql2 ;
} else {
$sql3 .= " , " . $sql2 ;
}
}
2014-06-03 18:44:58 -04:00
}
2014-04-28 17:55:47 -04:00
}
}
2017-12-14 16:14:02 -05:00
/*
* Create the index if the index don ' t exists in database
* or the definition differ from the current status .
* Don ' t create keys if table is new
*/
if ( ! $is_new_table ) {
foreach ( $structure [ " indexes " ] AS $indexname => $fieldnames ) {
if ( isset ( $database [ $name ][ " indexes " ][ $indexname ])) {
$current_index_definition = implode ( " , " , $database [ $name ][ " indexes " ][ $indexname ]);
} else {
$current_index_definition = " __NOT_SET__ " ;
}
$new_index_definition = implode ( " , " , $fieldnames );
if ( $current_index_definition != $new_index_definition ) {
$sql2 = self :: createIndex ( $indexname , $fieldnames );
2017-01-29 12:31:20 -05:00
2017-12-14 16:14:02 -05:00
// Fetch the "group by" fields for unique indexes
if ( $fieldnames [ 0 ] == " UNIQUE " ) {
$group_by = self :: groupBy ( $indexname , $fieldnames );
}
if ( $sql2 != " " ) {
if ( $sql3 == " " ) {
$sql3 = " ALTER " . $ignore . " TABLE ` " . $temp_name . " ` " . $sql2 ;
} else {
$sql3 .= " , " . $sql2 ;
}
}
2017-01-29 12:31:20 -05:00
}
2017-12-14 16:14:02 -05:00
}
2018-01-14 10:13:00 -05:00
if ( isset ( $database [ $name ][ " table_status " ][ " Comment " ])) {
if ( $database [ $name ][ " table_status " ][ " Comment " ] != $structure [ 'comment' ]) {
$sql2 = " COMMENT = ' " . dbesc ( $structure [ 'comment' ]) . " ' " ;
if ( $sql3 == " " ) {
$sql3 = " ALTER " . $ignore . " TABLE ` " . $temp_name . " ` " . $sql2 ;
} else {
$sql3 .= " , " . $sql2 ;
}
}
}
2018-06-02 01:03:23 -04:00
if ( isset ( $database [ $name ][ " table_status " ][ " Engine " ]) && isset ( $structure [ 'engine' ])) {
if ( $database [ $name ][ " table_status " ][ " Engine " ] != $structure [ 'engine' ]) {
$sql2 = " ENGINE = ' " . dbesc ( $structure [ 'engine' ]) . " ' " ;
if ( $sql3 == " " ) {
$sql3 = " ALTER " . $ignore . " TABLE ` " . $temp_name . " ` " . $sql2 ;
} else {
$sql3 .= " , " . $sql2 ;
}
}
}
2017-12-14 16:14:02 -05:00
if ( isset ( $database [ $name ][ " table_status " ][ " Collation " ])) {
if ( $database [ $name ][ " table_status " ][ " Collation " ] != 'utf8mb4_general_ci' ) {
$sql2 = " DEFAULT COLLATE utf8mb4_general_ci " ;
2017-04-14 03:58:56 -04:00
if ( $sql3 == " " ) {
2017-01-15 18:30:43 -05:00
$sql3 = " ALTER " . $ignore . " TABLE ` " . $temp_name . " ` " . $sql2 ;
2017-04-14 03:58:56 -04:00
} else {
2015-12-08 04:35:08 -05:00
$sql3 .= " , " . $sql2 ;
2017-04-14 03:58:56 -04:00
}
}
}
2017-12-14 16:14:02 -05:00
if ( $sql3 != " " ) {
$sql3 .= " ; " ;
}
// Now have a look at the field collations
// Compare the field structure field by field
foreach ( $structure [ " fields " ] AS $fieldname => $parameters ) {
// Compare the field definition
2018-07-10 08:27:56 -04:00
$field_definition = defaults ( $database [ $name ][ " fields " ], $fieldname , [ 'Collation' => '' ]);
2017-04-14 03:58:56 -04:00
2017-12-14 16:14:02 -05:00
// Define the default collation if not given
2018-07-02 22:42:15 -04:00
if ( ! isset ( $parameters [ 'Collation' ]) && ! empty ( $field_definition [ 'Collation' ])) {
2017-12-14 16:14:02 -05:00
$parameters [ 'Collation' ] = 'utf8mb4_general_ci' ;
2017-04-14 03:58:56 -04:00
} else {
2017-12-14 16:14:02 -05:00
$parameters [ 'Collation' ] = null ;
}
if ( $field_definition [ 'Collation' ] != $parameters [ 'Collation' ]) {
$sql2 = self :: modifyTableField ( $fieldname , $parameters );
if (( $sql3 == " " ) || ( substr ( $sql3 , - 2 , 2 ) == " ; " )) {
$sql3 .= " ALTER " . $ignore . " TABLE ` " . $temp_name . " ` " . $sql2 ;
} else {
$sql3 .= " , " . $sql2 ;
}
2015-12-08 04:35:08 -05:00
}
2014-06-15 04:47:20 -04:00
}
2014-06-03 18:44:58 -04:00
}
2017-04-20 01:24:08 -04:00
if ( $sql3 != " " ) {
2017-12-14 16:14:02 -05:00
if ( substr ( $sql3 , - 2 , 2 ) != " ; " ) {
$sql3 .= " ; " ;
2017-04-20 01:24:08 -04:00
}
2017-12-14 16:14:02 -05:00
$field_list = '' ;
if ( $is_unique && $ignore == '' ) {
foreach ( $database [ $name ][ " fields " ] AS $fieldname => $parameters ) {
$field_list .= 'ANY_VALUE(`' . $fieldname . '`),' ;
2017-04-20 01:24:08 -04:00
}
2017-12-14 16:14:02 -05:00
$field_list = rtrim ( $field_list , ',' );
2017-04-20 01:24:08 -04:00
}
2017-12-14 16:14:02 -05:00
if ( $verbose ) {
// Ensure index conversion to unique removes duplicates
if ( $is_unique && ( $temp_name != $name )) {
if ( $ignore != " " ) {
echo " SET session old_alter_table=1; \n " ;
} else {
echo " DROP TABLE IF EXISTS ` " . $temp_name . " `; \n " ;
echo " CREATE TABLE ` " . $temp_name . " ` LIKE ` " . $name . " `; \n " ;
}
2017-01-29 12:31:20 -05:00
}
2017-01-15 18:30:43 -05:00
2017-12-14 16:14:02 -05:00
echo $sql3 . " \n " ;
2014-06-03 18:44:58 -04:00
2017-12-14 16:14:02 -05:00
if ( $is_unique && ( $temp_name != $name )) {
if ( $ignore != " " ) {
echo " SET session old_alter_table=0; \n " ;
} else {
2018-07-20 21:58:30 -04:00
echo " INSERT INTO ` " . $temp_name . " ` SELECT " . DBA :: anyValueFallback ( $field_list ) . " FROM ` " . $name . " ` " . $group_by . " ; \n " ;
2017-12-14 16:14:02 -05:00
echo " DROP TABLE ` " . $name . " `; \n " ;
echo " RENAME TABLE ` " . $temp_name . " ` TO ` " . $name . " `; \n " ;
}
2017-01-29 12:31:20 -05:00
}
2017-01-15 18:30:43 -05:00
}
2017-12-14 16:14:02 -05:00
if ( $action ) {
2018-03-17 05:04:38 -04:00
if ( ! $install ) {
2018-07-21 08:25:11 -04:00
Config :: set ( 'system' , 'maintenance_reason' , L10n :: t ( '%s: updating %s table.' , DateTimeFormat :: utcNow () . ' ' . date ( 'e' ), $name ));
2018-03-17 05:04:38 -04:00
}
2017-10-21 10:29:55 -04:00
2017-12-14 16:14:02 -05:00
// Ensure index conversion to unique removes duplicates
if ( $is_unique && ( $temp_name != $name )) {
if ( $ignore != " " ) {
2018-07-20 08:19:26 -04:00
DBA :: e ( " SET session old_alter_table=1; " );
2017-12-14 16:14:02 -05:00
} else {
2018-07-20 08:19:26 -04:00
$r = DBA :: e ( " DROP TABLE IF EXISTS ` " . $temp_name . " `; " );
2018-07-21 08:46:04 -04:00
if ( ! DBA :: isResult ( $r )) {
2017-12-14 16:14:02 -05:00
$errors .= self :: printUpdateError ( $sql3 );
return $errors ;
}
2018-07-20 08:19:26 -04:00
$r = DBA :: e ( " CREATE TABLE ` " . $temp_name . " ` LIKE ` " . $name . " `; " );
2018-07-21 08:46:04 -04:00
if ( ! DBA :: isResult ( $r )) {
2017-12-14 16:14:02 -05:00
$errors .= self :: printUpdateError ( $sql3 );
return $errors ;
}
2017-01-29 12:31:20 -05:00
}
}
2017-01-15 18:30:43 -05:00
2018-07-20 08:19:26 -04:00
$r = DBA :: e ( $sql3 );
2018-07-21 08:46:04 -04:00
if ( ! DBA :: isResult ( $r )) {
2017-12-14 16:14:02 -05:00
$errors .= self :: printUpdateError ( $sql3 );
}
if ( $is_unique && ( $temp_name != $name )) {
if ( $ignore != " " ) {
2018-07-20 08:19:26 -04:00
DBA :: e ( " SET session old_alter_table=0; " );
2017-12-14 16:14:02 -05:00
} else {
2018-07-20 08:19:26 -04:00
$r = DBA :: e ( " INSERT INTO ` " . $temp_name . " ` SELECT " . $field_list . " FROM ` " . $name . " ` " . $group_by . " ; " );
2018-07-21 08:46:04 -04:00
if ( ! DBA :: isResult ( $r )) {
2017-12-14 16:14:02 -05:00
$errors .= self :: printUpdateError ( $sql3 );
return $errors ;
}
2018-07-20 08:19:26 -04:00
$r = DBA :: e ( " DROP TABLE ` " . $name . " `; " );
2018-07-21 08:46:04 -04:00
if ( ! DBA :: isResult ( $r )) {
2017-12-14 16:14:02 -05:00
$errors .= self :: printUpdateError ( $sql3 );
return $errors ;
}
2018-07-20 08:19:26 -04:00
$r = DBA :: e ( " RENAME TABLE ` " . $temp_name . " ` TO ` " . $name . " `; " );
2018-07-21 08:46:04 -04:00
if ( ! DBA :: isResult ( $r )) {
2017-12-14 16:14:02 -05:00
$errors .= self :: printUpdateError ( $sql3 );
return $errors ;
}
2017-01-29 12:31:20 -05:00
}
}
2017-01-15 18:30:43 -05:00
}
2014-06-03 18:44:58 -04:00
}
}
2017-05-28 04:39:41 -04:00
2018-03-17 05:04:38 -04:00
if ( $action && ! $install ) {
2017-12-14 16:14:02 -05:00
Config :: set ( 'system' , 'maintenance' , 0 );
Config :: set ( 'system' , 'maintenance_reason' , '' );
2014-04-28 17:55:47 -04:00
2018-03-17 05:04:38 -04:00
if ( $errors ) {
Config :: set ( 'system' , 'dbupdate' , DB_UPDATE_FAILED );
} else {
Config :: set ( 'system' , 'dbupdate' , DB_UPDATE_SUCCESSFUL );
}
2017-12-14 16:14:02 -05:00
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
return $errors ;
2017-04-14 07:26:47 -04:00
}
2017-12-14 16:14:02 -05:00
private static function FieldCommand ( $parameters , $create = true ) {
$fieldstruct = $parameters [ " type " ];
2014-04-28 17:55:47 -04:00
2018-07-15 14:36:20 -04:00
if ( isset ( $parameters [ " Collation " ])) {
2017-12-14 16:14:02 -05:00
$fieldstruct .= " COLLATE " . $parameters [ " Collation " ];
2015-03-25 05:03:17 -04:00
}
2014-04-28 17:55:47 -04:00
2018-07-15 14:36:20 -04:00
if ( isset ( $parameters [ " not null " ])) {
2017-12-14 16:14:02 -05:00
$fieldstruct .= " NOT NULL " ;
}
2014-04-28 17:55:47 -04:00
2018-07-15 14:36:20 -04:00
if ( isset ( $parameters [ " default " ])) {
2017-12-14 16:14:02 -05:00
if ( strpos ( strtolower ( $parameters [ " type " ]), " int " ) !== false ) {
$fieldstruct .= " DEFAULT " . $parameters [ " default " ];
} else {
$fieldstruct .= " DEFAULT ' " . $parameters [ " default " ] . " ' " ;
}
}
2018-07-15 14:36:20 -04:00
if ( isset ( $parameters [ " extra " ])) {
2017-12-14 16:14:02 -05:00
$fieldstruct .= " " . $parameters [ " extra " ];
}
2014-04-28 17:55:47 -04:00
2018-07-15 14:36:20 -04:00
if ( isset ( $parameters [ " comment " ])) {
2018-01-14 10:13:00 -05:00
$fieldstruct .= " COMMENT ' " . dbesc ( $parameters [ " comment " ]) . " ' " ;
}
2017-12-14 16:14:02 -05:00
/* if (( $parameters [ " primary " ] != " " ) && $create )
$fieldstruct .= " PRIMARY KEY " ; */
2014-06-03 18:44:58 -04:00
2017-12-14 16:14:02 -05:00
return ( $fieldstruct );
}
2014-06-03 18:44:58 -04:00
2018-06-02 01:03:23 -04:00
private static function createTable ( $name , $structure , $verbose , $action ) {
2017-12-14 16:14:02 -05:00
$r = true ;
2015-12-08 04:35:08 -05:00
2018-06-02 01:03:23 -04:00
$engine = " " ;
$comment = " " ;
2018-01-15 08:05:12 -05:00
$sql_rows = [];
$primary_keys = [];
2018-06-02 01:03:23 -04:00
foreach ( $structure [ " fields " ] AS $fieldname => $field ) {
2017-12-14 16:14:02 -05:00
$sql_rows [] = " ` " . dbesc ( $fieldname ) . " ` " . self :: FieldCommand ( $field );
if ( x ( $field , 'primary' ) && $field [ 'primary' ] != '' ) {
$primary_keys [] = $fieldname ;
}
2015-12-03 10:39:20 -05:00
}
2015-03-25 04:47:59 -04:00
2018-07-02 22:42:15 -04:00
if ( ! empty ( $structure [ " indexes " ])) {
2018-06-02 01:03:23 -04:00
foreach ( $structure [ " indexes " ] AS $indexname => $fieldnames ) {
2017-12-14 16:14:02 -05:00
$sql_index = self :: createIndex ( $indexname , $fieldnames , " " );
if ( ! is_null ( $sql_index )) {
$sql_rows [] = $sql_index ;
}
}
2015-03-25 04:47:59 -04:00
}
2014-06-03 18:44:58 -04:00
2018-07-15 14:36:20 -04:00
if ( isset ( $structure [ " engine " ])) {
2018-06-02 01:03:23 -04:00
$engine = " ENGINE= " . $structure [ " engine " ];
}
2018-07-15 14:36:20 -04:00
if ( isset ( $structure [ " comment " ])) {
2018-06-02 01:03:23 -04:00
$comment = " COMMENT=' " . dbesc ( $structure [ " comment " ]) . " ' " ;
}
2017-12-14 16:14:02 -05:00
$sql = implode ( " , \n \t " , $sql_rows );
2014-04-28 17:55:47 -04:00
2018-06-02 01:03:23 -04:00
$sql = sprintf ( " CREATE TABLE IF NOT EXISTS `%s` ( \n \t " , dbesc ( $name )) . $sql .
" \n ) " . $engine . " DEFAULT COLLATE utf8mb4_general_ci " . $comment ;
2017-12-14 16:14:02 -05:00
if ( $verbose ) {
echo $sql . " ; \n " ;
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
if ( $action ) {
2018-07-20 08:19:26 -04:00
$r = DBA :: e ( $sql );
2017-12-14 16:14:02 -05:00
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
return $r ;
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
private static function addTableField ( $fieldname , $parameters ) {
$sql = sprintf ( " ADD `%s` %s " , dbesc ( $fieldname ), self :: FieldCommand ( $parameters ));
return ( $sql );
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
private static function modifyTableField ( $fieldname , $parameters ) {
$sql = sprintf ( " MODIFY `%s` %s " , dbesc ( $fieldname ), self :: FieldCommand ( $parameters , false ));
return ( $sql );
2015-12-08 04:35:08 -05:00
}
2017-12-14 16:14:02 -05:00
private static function dropIndex ( $indexname ) {
$sql = sprintf ( " DROP INDEX `%s` " , dbesc ( $indexname ));
return ( $sql );
2016-10-01 23:29:30 -04:00
}
2017-12-14 16:14:02 -05:00
private static function createIndex ( $indexname , $fieldnames , $method = " ADD " ) {
$method = strtoupper ( trim ( $method ));
if ( $method != " " && $method != " ADD " ) {
2018-07-19 22:15:21 -04:00
throw new Exception ( " Invalid parameter 'method' in self::createIndex(): ' $method ' " );
2017-12-14 16:14:02 -05:00
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
if ( $fieldnames [ 0 ] == " UNIQUE " ) {
array_shift ( $fieldnames );
$method .= ' UNIQUE' ;
2016-12-22 10:50:40 -05:00
}
2014-04-28 17:55:47 -04:00
2017-12-14 16:14:02 -05:00
$names = " " ;
foreach ( $fieldnames AS $fieldname ) {
if ( $names != " " ) {
$names .= " , " ;
}
2016-10-01 04:21:37 -04:00
2017-12-14 16:14:02 -05:00
if ( preg_match ( '|(.+)\((\d+)\)|' , $fieldname , $matches )) {
$names .= " ` " . dbesc ( $matches [ 1 ]) . " `( " . intval ( $matches [ 2 ]) . " ) " ;
} else {
$names .= " ` " . dbesc ( $fieldname ) . " ` " ;
}
}
2015-03-25 04:47:59 -04:00
2017-12-14 16:14:02 -05:00
if ( $indexname == " PRIMARY " ) {
return sprintf ( " %s PRIMARY KEY(%s) " , $method , $names );
}
2014-04-28 17:55:47 -04:00
2017-01-29 12:31:20 -05:00
2017-12-14 16:14:02 -05:00
$sql = sprintf ( " %s INDEX `%s` (%s) " , $method , dbesc ( $indexname ), $names );
return ( $sql );
2017-01-29 12:31:20 -05:00
}
2017-12-14 16:14:02 -05:00
private static function groupBy ( $indexname , $fieldnames ) {
if ( $fieldnames [ 0 ] != " UNIQUE " ) {
return " " ;
}
2017-01-29 12:31:20 -05:00
2017-12-14 16:14:02 -05:00
array_shift ( $fieldnames );
2017-01-29 12:31:20 -05:00
2017-12-14 16:14:02 -05:00
$names = " " ;
foreach ( $fieldnames AS $fieldname ) {
if ( $names != " " ) {
$names .= " , " ;
}
if ( preg_match ( '|(.+)\((\d+)\)|' , $fieldname , $matches )) {
$names .= " ` " . dbesc ( $matches [ 1 ]) . " ` " ;
} else {
$names .= " ` " . dbesc ( $fieldname ) . " ` " ;
}
2017-01-29 12:31:20 -05:00
}
2017-12-14 16:14:02 -05:00
$sql = sprintf ( " GROUP BY %s " , $names );
return $sql ;
}
2014-04-29 07:19:44 -04:00
2018-07-21 08:43:43 -04:00
/**
* Check if a table exists
*
* @ param string $table Table name
*
* @ return boolean Does the table exist ?
*/
public static function existsTable ( $table )
{
if ( empty ( $table )) {
return false ;
}
$table = DBA :: escape ( $table );
$sql = " SHOW TABLES LIKE ' " . $table . " '; " ;
$stmt = DBA :: p ( $sql );
if ( is_bool ( $stmt )) {
$retval = $stmt ;
} else {
2018-07-20 22:05:12 -04:00
$retval = ( DBA :: numRows ( $stmt ) > 0 );
2018-07-21 08:43:43 -04:00
}
DBA :: close ( $stmt );
return $retval ;
}
/**
* Check if the columns of the table exists
*
* @ param string $table Table name
* @ param array $columns Columns to check ( Syntax : [ $col1 , $col2 , .. ] )
*
* @ return boolean Does the table exist ?
*/
public static function existsColumn ( $table , $columns = []) {
if ( empty ( $table )) {
return false ;
}
if ( is_null ( $columns ) || empty ( $columns )) {
return self :: existsTable ( $table );
}
$table = DBA :: escape ( $table );
foreach ( $columns AS $column ) {
$sql = " SHOW COLUMNS FROM ` " . $table . " ` LIKE ' " . $column . " '; " ;
$stmt = DBA :: p ( $sql );
if ( is_bool ( $stmt )) {
$retval = $stmt ;
} else {
2018-07-20 22:05:12 -04:00
$retval = ( DBA :: numRows ( $stmt ) > 0 );
2018-07-21 08:43:43 -04:00
}
DBA :: close ( $stmt );
if ( ! $retval ) {
return false ;
}
}
return true ;
}
const RENAME_COLUMN = 0 ;
const RENAME_PRIMARY_KEY = 1 ;
/**
* Renames columns or the primary key of a table
* @ todo You cannot rename a primary key if " auto increment " is set
*
* @ param string $table Table name
* @ param array $columns Columns Syntax for Rename : [ $old1 => [ $new1 , $type1 ], $old2 => [ $new2 , $type2 ], ... ] )
* Syntax for Primary Key : [ $col1 , $col2 , ... ] )
* @ param int $type The type of renaming ( Default is Column )
*
* @ return boolean Was the renaming successful ?
*
*/
public static function rename ( $table , $columns , $type = self :: RENAME_COLUMN ) {
if ( empty ( $table ) || empty ( $columns )) {
return false ;
}
if ( ! is_array ( $columns )) {
return false ;
}
$table = DBA :: escape ( $table );
$sql = " ALTER TABLE ` " . $table . " ` " ;
switch ( $type ) {
case self :: RENAME_COLUMN :
if ( ! self :: existsColumn ( $table , array_keys ( $columns ))) {
return false ;
}
$sql .= implode ( ',' , array_map (
function ( $to , $from ) {
return " CHANGE ` " . $from . " ` ` " . $to [ 0 ] . " ` " . $to [ 1 ];
},
$columns ,
array_keys ( $columns )
));
break ;
case self :: RENAME_PRIMARY_KEY :
if ( ! self :: existsColumn ( $table , $columns )) {
return false ;
}
$sql .= " DROP PRIMARY KEY, ADD PRIMARY KEY(` " . implode ( '`, `' , $columns ) . " `) " ;
break ;
default :
return false ;
}
$sql .= " ; " ;
$stmt = DBA :: p ( $sql );
if ( is_bool ( $stmt )) {
$retval = $stmt ;
} else {
$retval = true ;
}
DBA :: close ( $stmt );
return $retval ;
}
2017-12-14 16:14:02 -05:00
public static function definition () {
2018-01-15 08:05:12 -05:00
$database = [];
2017-12-14 16:14:02 -05:00
2018-01-15 08:05:12 -05:00
$database [ " addon " ] = [
2018-01-20 08:22:18 -05:00
" comment " => " registered addons " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-20 02:40:21 -05:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" name " => [ " UNIQUE " , " name " ],
]
];
$database [ " attach " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " file attachments " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " => NULL_DATE , " comment " => " creation time " ],
" edited " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " 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 " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
]
];
$database [ " auth_codes " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " OAuth usage " ,
2018-01-15 08:05:12 -05:00
" 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 " ],
]
];
$database [ " cache " ] = [
2018-02-28 23:48:09 -05:00
" comment " => " Stores temporary data " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-28 23:48:09 -05:00
" 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 " => NULL_DATE , " comment " => " datetime of cache expiration " ],
" updated " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " datetime of cache insertion " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " k " ],
2018-02-28 23:48:09 -05:00
" k_expires " => [ " k " , " expires " ],
2018-01-15 08:05:12 -05:00
]
];
$database [ " challenge " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-01-15 08:05:12 -05:00
" challenge " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" dfrn-id " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" expire " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" type " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" last_update " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
]
];
$database [ " clients " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " OAuth usage " ,
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
2018-02-20 02:40:21 -05:00
" uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " user " => " uid " ], " comment " => " User id " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " client_id " ],
]
];
$database [ " config " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " main configuration storage " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-20 02:40:21 -05:00
" 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 " => " " ],
2018-01-15 08:05:12 -05:00
" v " => [ " type " => " mediumtext " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
" cat_k " => [ " UNIQUE " , " cat " , " k " ],
]
];
$database [ " contact " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " contact table " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" self " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " 1 if the contact is the user him/her self " ],
2018-01-15 08:05:12 -05:00
" remote_self " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" rel " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " The kind of the relation between the user and the contact " ],
2018-01-15 08:05:12 -05:00
" duplex " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" network " => [ " type " => " char(4) " , " not null " => " 1 " , " default " => " " , " comment " => " Network 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 " ],
2018-01-15 08:05:12 -05:00
" location " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" about " => [ " type " => " text " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" keywords " => [ " type " => " text " , " comment " => " public keywords (interests) of the contact " ],
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
2018-05-29 04:24:36 -04:00
" 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) " ],
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
2018-05-29 04:24:36 -04:00
" pubkey " => [ " type " => " text " , " comment " => " RSA public key 4096 bit " ],
" prvkey " => [ " type " => " text " , " comment " => " RSA private key 4096 bit " ],
2018-01-15 08:05:12 -05:00
" batch " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" 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 " => " " ],
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
2018-05-29 04:24:36 -04:00
" last-update " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Date of the last try to update the contact info " ],
" success_update " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Date of the last successful contact update " ],
" failure_update " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Date of the last failed update " ],
2018-01-15 08:05:12 -05:00
" name-date " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
" uri-date " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
" avatar-date " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
" term-date " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" last-item " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " date of the last post " ],
2018-02-20 02:40:21 -05:00
" priority " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" blocked " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 1 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" readonly " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " posts of the contact are readonly " ],
2018-01-15 08:05:12 -05:00
" writable " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
" rating " => [ " type " => " tinyint " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
" reason " => [ " type " => " text " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" closeness " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 99 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" info " => [ " type " => " mediumtext " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" profile-id " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" bdyear " => [ " type " => " varchar(4) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" bd " => [ " type " => " date " , " not null " => " 1 " , " default " => " 0001-01-01 " , " comment " => " " ],
" notify_new_posts " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" fetch_further_information " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" 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 " ],
2018-02-19 08:58:04 -05:00
" uid_rel_network_poll " => [ " uid " , " rel " , " network " , " poll(64) " , " archive " ],
" uid_network_batch " => [ " uid " , " network " , " batch(64) " ],
2018-01-15 08:05:12 -05:00
" 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) " ],
]
];
$database [ " conv " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " private messages " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " => NULL_DATE , " comment " => " creation timestamp " ],
" updated " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " edited timestamp " ],
" subject " => [ " type " => " text " , " comment " => " subject of initial message " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uid " => [ " uid " ],
]
];
$database [ " conversation " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Raw data and structure information for messages " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" item-uri " => [ " type " => " varbinary(255) " , " not null " => " 1 " , " primary " => " 1 " , " comment " => " URI of the item " ],
" 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 " => " 0 " , " comment " => " The protocol of the item " ],
" source " => [ " type " => " mediumtext " , " comment " => " Original source " ],
" received " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Receiving date " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " item-uri " ],
" conversation-uri " => [ " conversation-uri " ],
" received " => [ " received " ],
]
];
$database [ " event " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Events " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-01-15 08:05:12 -05:00
" guid " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" 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) " ],
2018-01-15 08:05:12 -05:00
" uri " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " creation time " ],
" edited " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " last edit time " ],
" start " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " event start time " ],
" finish " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " 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 " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uid_start " => [ " uid " , " start " ],
]
];
$database [ " fcontact " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Diaspora compatible contacts - used in the Diaspora implementation " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
2018-02-20 02:40:21 -05:00
" priority " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-02-19 08:58:04 -05:00
" network " => [ " type " => " char(4) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" alias " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" pubkey " => [ " type " => " text " , " comment " => " " ],
" updated " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
" addr " => [ " addr(32) " ],
" url " => [ " UNIQUE " , " url(190) " ],
]
];
$database [ " fsuggest " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " friend suggestion stuff " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-20 02:40:21 -05:00
" 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 " => " " ],
2018-01-15 08:05:12 -05:00
" 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 " => NULL_DATE , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
]
];
$database [ " gcign " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " contacts ignored by friend suggestions " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uid " => [ " uid " ],
" gcid " => [ " gcid " ],
]
];
$database [ " gcontact " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " global contacts " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" nurl " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" photo " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " Link to the profile photo " ],
2018-01-15 08:05:12 -05:00
" connect " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
" updated " => [ " type " => " datetime " , " default " => NULL_DATE , " comment " => " " ],
" last_contact " => [ " type " => " datetime " , " default " => NULL_DATE , " comment " => " " ],
" last_failure " => [ " type " => " datetime " , " default " => NULL_DATE , " comment " => " " ],
" location " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" about " => [ " type " => " text " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" keywords " => [ " type " => " text " , " comment " => " puplic keywords (interests) " ],
2018-01-15 08:05:12 -05:00
" gender " => [ " type " => " varchar(32) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" birthday " => [ " type " => " varchar(32) " , " not null " => " 1 " , " default " => " 0001-01-01 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" community " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " 1 if contact is forum account " ],
2018-01-15 08:05:12 -05:00
" contact-type " => [ " type " => " tinyint " , " not null " => " 1 " , " default " => " -1 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" addr " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" notify " => [ " type " => " varchar(255) " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" alias " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" generation " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" server_url " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " baseurl of the contacts server " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" nurl " => [ " UNIQUE " , " nurl(190) " ],
" name " => [ " name(64) " ],
" nick " => [ " nick(32) " ],
" addr " => [ " addr(64) " ],
2018-02-19 08:58:04 -05:00
" hide_network_updated " => [ " hide " , " network " , " updated " ],
2018-01-15 08:05:12 -05:00
" updated " => [ " updated " ],
]
];
$database [ " glink " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " 'friends of friends' linkages derived from poco " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" 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 " => " " ],
2018-01-15 08:05:12 -05:00
" updated " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
" cid_uid_gcid_zcid " => [ " UNIQUE " , " cid " , " uid " , " gcid " , " zcid " ],
" gcid " => [ " gcid " ],
]
];
$database [ " group " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " privacy groups, group info " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uid " => [ " uid " ],
]
];
$database [ " group_member " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " privacy groups, member info " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-06-11 09:22:08 -04:00
" contact-id " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " contact " => " id " ], " comment " => " contact.id of the member assigned to the associated group " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" contactid " => [ " contact-id " ],
" gid_contactid " => [ " UNIQUE " , " gid " , " contact-id " ],
]
];
$database [ " gserver " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Global servers " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
2018-05-29 04:24:36 -04:00
" registered-users " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Number of registered users " ],
2018-01-15 08:05:12 -05:00
" poco " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" noscrape " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-02-19 08:58:04 -05:00
" network " => [ " type " => " char(4) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" platform " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-03-26 01:44:53 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
" last_poco_query " => [ " type " => " datetime " , " default " => NULL_DATE , " comment " => " " ],
" last_contact " => [ " type " => " datetime " , " default " => NULL_DATE , " comment " => " " ],
" last_failure " => [ " type " => " datetime " , " default " => NULL_DATE , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
" nurl " => [ " UNIQUE " , " nurl(190) " ],
]
];
2018-03-26 01:44:53 -04:00
$database [ " 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 " ],
]
];
2018-01-15 08:05:12 -05:00
$database [ " hook " ] = [
2018-01-20 08:22:18 -05:00
" comment " => " addon hook registry " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
2018-02-19 08:58:04 -05:00
" hook_file_function " => [ " UNIQUE " , " hook " , " file " , " function " ],
2018-01-15 08:05:12 -05:00
]
];
$database [ " intro " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" 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 " => " " ],
2018-01-15 08:05:12 -05:00
" 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 " => NULL_DATE , " comment " => " " ],
" blocked " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 1 " , " comment " => " " ],
" ignore " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
]
];
$database [ " item " ] = [
2018-06-24 10:33:07 -04:00
" comment " => " Structure for all posts " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-20 02:40:21 -05:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " relation " => [ " thread " => " iid " ]],
2018-05-29 04:24:36 -04:00
" guid " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " A unique identifier for this item " ],
2018-01-15 08:05:12 -05:00
" uri " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-07-15 14:36:20 -04:00
" uri-hash " => [ " type " => " varchar(80) " , " not null " => " 1 " , " default " => " " , " comment " => " RIPEMD-128 hash from uri " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
" 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 " ],
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Creation timestamp. " ],
2018-06-01 18:12:35 -04:00
" edited " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Date of last edit (default is created) " ],
2018-05-29 04:24:36 -04:00
" commented " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Date of last comment/reply to this item " ],
" received " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " datetime " ],
" changed " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Date that something in the conversation changed, indicating clients should fetch the conversation again " ],
2018-07-15 14:36:20 -04:00
" 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 " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-06-25 00:56:32 -04:00
" icid " => [ " type " => " int unsigned " , " relation " => [ " item-content " => " id " ], " comment " => " Id of the item-content table entry that contains the whole item content " ],
2018-07-05 18:00:38 -04:00
" iaid " => [ " type " => " int unsigned " , " relation " => [ " item-activity " => " id " ], " comment " => " Id of the item-activity table entry that contains the activity data " ],
2018-07-15 14:36:20 -04:00
" extid " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-07-19 09:52:05 -04:00
" post-type " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Post type (personal note, bookmark, ...) " ],
2018-07-15 14:36:20 -04:00
" global " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" private " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " distribution is restricted " ],
2018-07-15 14:36:20 -04:00
" visible " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
" moderated " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" deleted " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " item has been deleted " ],
2018-07-15 14:36:20 -04:00
// 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 " ],
2018-05-29 04:24:36 -04:00
" origin " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " item originated at this site " ],
2018-07-15 14:36:20 -04:00
" 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 " ],
2018-05-29 04:24:36 -04:00
" mention " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " The owner of this item was mentioned in it " ],
2018-07-15 14:36:20 -04:00
" forum_mode " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-07-19 09:52:05 -04:00
" psid " => [ " type " => " int unsigned " , " relation " => [ " permissionset " => " id " ], " comment " => " ID of the permission set of this post " ],
// These fields will be replaced by the "psid" from above
2018-07-15 14:36:20 -04:00
" 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 " ],
// It is 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 " ],
2018-07-19 09:52:05 -04:00
// Could possibly be replaced by the "attach" table?
2018-07-15 14:36:20 -04:00
" attach " => [ " type " => " mediumtext " , " comment " => " JSON structure representing attachments to this item " ],
// Deprecated fields. Will be removed in upcoming versions
2018-07-19 17:56:52 -04:00
" postopts " => [ " type " => " text " , " comment " => " Deprecated " ],
" inform " => [ " type " => " mediumtext " , " comment " => " Deprecated " ],
2018-07-19 09:52:05 -04:00
" type " => [ " type " => " varchar(20) " , " comment " => " Deprecated " ],
" bookmark " => [ " type " => " boolean " , " comment " => " Deprecated " ],
2018-07-15 14:36:20 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
],
" 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_created " => [ " uid " , " created " ],
2018-02-26 01:59:32 -05:00
" uid_commented " => [ " uid " , " commented " ],
2018-01-15 08:05:12 -05:00
" uid_unseen_contactid " => [ " uid " , " unseen " , " contact-id " ],
2018-02-19 08:58:04 -05:00
" uid_network_received " => [ " uid " , " network " , " received " ],
" uid_network_commented " => [ " uid " , " network " , " commented " ],
2018-01-15 08:05:12 -05:00
" uid_thrparent " => [ " uid " , " thr-parent(190) " ],
" uid_parenturi " => [ " uid " , " parent-uri(190) " ],
" uid_contactid_created " => [ " uid " , " contact-id " , " created " ],
" authorid_created " => [ " author-id " , " created " ],
" ownerid " => [ " owner-id " ],
" uid_uri " => [ " uid " , " uri(190) " ],
2018-02-20 02:40:21 -05:00
" resource-id " => [ " resource-id " ],
2018-01-15 08:05:12 -05:00
" deleted_changed " => [ " deleted " , " changed " ],
" uid_wall_changed " => [ " uid " , " wall " , " changed " ],
" uid_eventid " => [ " uid " , " event-id " ],
2018-06-25 16:23:32 -04:00
" icid " => [ " icid " ],
2018-07-06 02:46:44 -04:00
" iaid " => [ " iaid " ],
2018-07-19 09:52:05 -04:00
" psid " => [ " psid " ],
2018-01-15 08:05:12 -05:00
]
];
2018-07-05 18:00:38 -04:00
$database [ " item-activity " ] = [
" comment " => " Activities for items " ,
" fields " => [
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " relation " => [ " thread " => " iid " ]],
2018-07-15 14:36:20 -04:00
" uri " => [ " type " => " varchar(255) " , " comment " => " " ],
" uri-hash " => [ " type " => " varchar(80) " , " not null " => " 1 " , " default " => " " , " comment " => " RIPEMD-128 hash from uri " ],
2018-07-05 18:00:38 -04:00
" activity " => [ " type " => " smallint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uri-hash " => [ " UNIQUE " , " uri-hash " ],
" uri " => [ " uri(191) " ],
]
];
2018-06-24 10:33:07 -04:00
$database [ " item-content " ] = [
" comment " => " Content for all posts " ,
" fields " => [
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " relation " => [ " thread " => " iid " ]],
2018-07-15 14:36:20 -04:00
" uri " => [ " type " => " varchar(255) " , " comment " => " " ],
" uri-plink-hash " => [ " type " => " varchar(80) " , " not null " => " 1 " , " default " => " " , " comment " => " RIPEMD-128 hash from uri " ],
2018-06-24 10:33:07 -04:00
" 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 " ],
2018-06-30 01:18:43 -04:00
" language " => [ " type " => " text " , " comment " => " Language information about this post " ],
2018-06-24 10:33:07 -04:00
" 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 " ],
2018-06-27 15:37:13 -04:00
" verb " => [ " type " => " varchar(100) " , " not null " => " 1 " , " default " => " " , " comment " => " ActivityStreams verb " ],
2018-06-24 10:33:07 -04:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uri-plink-hash " => [ " UNIQUE " , " uri-plink-hash " ],
" uri " => [ " uri(191) " ],
]
];
2018-07-19 17:56:52 -04:00
$database [ " 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 " ],
],
" indexes " => [
" PRIMARY " => [ " iid " ],
]
];
2018-01-15 08:05:12 -05:00
$database [ " locks " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-01-15 08:05:12 -05:00
" name " => [ " type " => " varchar(128) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" locked " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" pid " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Process ID " ],
2018-07-04 17:37:22 -04:00
" expires " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " datetime of cache expiration " ],
],
2018-01-15 08:05:12 -05:00
" indexes " => [
" PRIMARY " => [ " id " ],
2018-07-04 17:37:22 -04:00
" name_expires " => [ " name " , " expires " ]
2018-01-15 08:05:12 -05:00
]
];
$database [ " mail " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " private messages " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" title " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" body " => [ " type " => " mediumtext " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" seen " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " if message visited it is 1 " ],
2018-01-15 08:05:12 -05:00
" reply " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
" replied " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" unknown " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " if sender not in the contact table this is 1 " ],
2018-01-15 08:05:12 -05:00
" uri " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" parent-uri " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " creation time of the private message " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uid_seen " => [ " uid " , " seen " ],
" convid " => [ " convid " ],
" uri " => [ " uri(64) " ],
" parent-uri " => [ " parent-uri(64) " ],
" contactid " => [ " contact-id(32) " ],
]
];
$database [ " mailacct " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Mail account data for fetching mails " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " user " => " uid " ], " comment " => " User id " ],
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
2018-02-20 02:40:21 -05:00
" action " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" 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 " => NULL_DATE , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
]
];
$database [ " manage " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " table of accounts that can manage each other " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" 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 " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uid_mid " => [ " UNIQUE " , " uid " , " mid " ],
]
];
$database [ " notify " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " notifications " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-01-15 08:05:12 -05:00
" hash " => [ " type " => " varchar(64) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" type " => [ " type " => " smallint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" 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 " => NULL_DATE , " comment " => " " ],
" msg " => [ " type " => " mediumtext " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " user " => " uid " ], " comment " => " Owner User id " ],
2018-01-15 08:05:12 -05:00
" link " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" iid " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " item " => " id " ], " comment " => " item.id " ],
2018-02-20 02:40:21 -05:00
" parent " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " item " => " id " ], " comment " => " " ],
2018-01-15 08:05:12 -05:00
" seen " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" verb " => [ " type " => " varchar(100) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" otype " => [ " type " => " varchar(10) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" name_cache " => [ " type " => " tinytext " , " comment " => " Cached bbcode parsing of name " ],
" msg_cache " => [ " type " => " mediumtext " , " comment " => " Cached bbcode parsing of msg " ]
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" hash_uid " => [ " hash " , " uid " ],
" seen_uid_date " => [ " seen " , " uid " , " date " ],
" uid_date " => [ " uid " , " date " ],
" uid_type_link " => [ " uid " , " type " , " link(190) " ],
]
];
$database [ " notify-threads " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" 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 " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
]
];
$database [ " oembed " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " cache for OEmbed queries " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " => NULL_DATE , " comment " => " datetime of creation " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " url " , " maxwidth " ],
" created " => [ " created " ],
]
];
2018-06-23 00:46:22 -04:00
$database [ " 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 " => NULL_DATE , " comment " => " datetime of creation " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
]
];
2018-01-15 08:05:12 -05:00
$database [ " parsed_url " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " cache for 'parse_url' queries " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " => NULL_DATE , " comment " => " datetime of creation " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " url " , " guessing " , " oembed " ],
" created " => [ " created " ],
]
];
$database [ " participation " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Storage for participation messages from Diaspora " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-20 02:40:21 -05:00
" iid " => [ " type " => " int unsigned " , " not null " => " 1 " , " primary " => " 1 " , " relation " => [ " item " => " id " ], " comment " => " " ],
2018-01-15 08:05:12 -05:00
" server " => [ " type " => " varchar(60) " , " not null " => " 1 " , " primary " => " 1 " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" cid " => [ " type " => " int unsigned " , " not null " => " 1 " , " relation " => [ " contact " => " id " ], " comment " => " " ],
" fid " => [ " type " => " int unsigned " , " not null " => " 1 " , " relation " => [ " fcontact " => " id " ], " comment " => " " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " iid " , " server " ]
]
];
$database [ " pconfig " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " personal (per user) configuration storage " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-20 02:40:21 -05:00
" 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 " => " " ],
2018-01-15 08:05:12 -05:00
" v " => [ " type " => " mediumtext " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uid_cat_k " => [ " UNIQUE " , " uid " , " cat " , " k " ],
]
];
2018-07-19 09:52:05 -04:00
$database [ " 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) " ],
]
];
2018-01-15 08:05:12 -05:00
$database [ " photo " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " photo storage " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-02-20 02:40:21 -05:00
" resource-id " => [ " type " => " char(32) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " creation date " ],
" edited " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " last edited date " ],
2018-01-15 08:05:12 -05:00
" title " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" desc " => [ " type " => " text " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" album " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " The name of the album to which the photo belongs " ],
2018-01-15 08:05:12 -05:00
" filename " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" 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 " => " " ],
2018-01-15 08:05:12 -05:00
" data " => [ " type " => " mediumblob " , " not null " => " 1 " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" scale " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" profile " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" contactid " => [ " contact-id " ],
" uid_contactid " => [ " uid " , " contact-id " ],
" uid_profile " => [ " uid " , " profile " ],
" uid_album_scale_created " => [ " uid " , " album(32) " , " scale " , " created " ],
2018-02-20 02:40:21 -05:00
" uid_album_resource-id_created " => [ " uid " , " album(32) " , " resource-id " , " created " ],
" resource-id " => [ " resource-id " ],
2018-01-15 08:05:12 -05:00
]
];
$database [ " poll " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Currently unused table for storing poll results " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-20 02:40:21 -05:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" 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 " ],
]
];
$database [ " poll_result " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " data for polls - currently unused " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" poll_id " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " poll " => " id " ]],
" choice " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" poll_id " => [ " poll_id " ],
]
];
$database [ " process " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Currently running system processes " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-20 02:40:21 -05:00
" pid " => [ " type " => " int unsigned " , " not null " => " 1 " , " primary " => " 1 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" command " => [ " type " => " varbinary(32) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " pid " ],
" command " => [ " command " ],
]
];
$database [ " profile " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " user profiles data " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" name " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" 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 " => NULL_DATE , " 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 " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uid_is-default " => [ " uid " , " is-default " ],
]
];
$database [ " profile_check " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " DFRN remote auth use " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " user " => " uid " ], " comment " => " User id " ],
2018-05-29 04:24:36 -04:00
" cid " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " contact " => " id " ], " comment " => " contact.id " ],
2018-01-15 08:05:12 -05:00
" dfrn_id " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" sec " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" expire " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
]
];
$database [ " push_subscriber " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Used for OStatus: Contains feed subscribers " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " user " => " uid " ], " comment " => " User id " ],
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
2018-05-18 23:56:29 -04:00
" push " => [ " type " => " tinyint " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Retrial counter " ],
2018-05-17 18:17:03 -04:00
" last_update " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Date of last successful trial " ],
" next_try " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Next retrial date " ],
2018-05-18 08:18:12 -04:00
" renewed " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Date of last subscription renewal " ],
2018-01-15 08:05:12 -05:00
" secret " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
2018-05-17 18:17:03 -04:00
" next_try " => [ " next_try " ],
2018-01-15 08:05:12 -05:00
]
];
$database [ " queue " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Queue for messages that couldn't be delivered " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" cid " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " contact " => " id " ], " comment " => " Message receiver " ],
2018-02-19 08:58:04 -05:00
" network " => [ " type " => " char(4) " , " not null " => " 1 " , " default " => " " , " comment " => " Receiver's network " ],
2018-02-08 10:03:18 -05:00
" guid " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " Unique GUID of the message " ],
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Date, when the message was created " ],
2018-02-08 13:39:48 -05:00
" last " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Date of last trial " ],
" next " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Next retrial date " ],
" retrial " => [ " type " => " tinyint " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Retrial counter " ],
2018-01-15 08:05:12 -05:00
" content " => [ " type " => " mediumtext " , " comment " => " " ],
" batch " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
" last " => [ " last " ],
2018-02-08 13:39:48 -05:00
" next " => [ " next " ],
2018-01-15 08:05:12 -05:00
]
];
$database [ " register " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " registrations requiring admin approval " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-01-15 08:05:12 -05:00
" hash " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " user " => " uid " ], " comment " => " User id " ],
2018-01-15 08:05:12 -05:00
" 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 " ],
]
];
$database [ " search " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " user " => " uid " ], " comment " => " User id " ],
2018-01-15 08:05:12 -05:00
" term " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
" uid " => [ " uid " ],
]
];
$database [ " session " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " web session storage " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " bigint unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-01-15 08:05:12 -05:00
" sid " => [ " type " => " varbinary(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
" data " => [ " type " => " text " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" expire " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" sid " => [ " sid(64) " ],
" expire " => [ " expire " ],
]
];
$database [ " sign " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Diaspora signatures " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" signed_text " => [ " type " => " mediumtext " , " comment " => " " ],
" signature " => [ " type " => " text " , " comment " => " " ],
" signer " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
" iid " => [ " UNIQUE " , " iid " ],
]
];
$database [ " term " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " item taxonomy (categories, tags, etc.) table " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-20 02:40:21 -05:00
" 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 " => " " ],
2018-01-15 08:05:12 -05:00
" 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 " => NULL_DATE , " comment " => " " ],
" received " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
" global " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-02-20 02:40:21 -05:00
" uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " user " => " uid " ], " comment " => " User id " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " tid " ],
" 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) " ],
]
];
$database [ " thread " ] = [
2018-01-14 14:02:27 -05:00
" comment " => " Thread related data " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" iid " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " primary " => " 1 " , " relation " => [ " item " => " id " ], " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" 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 " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
" edited " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
" commented " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
" received " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " " ],
" changed " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " 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 " => " " ],
2018-07-19 09:52:05 -04:00
" post-type " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Post type (personal note, bookmark, ...) " ],
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
2018-02-20 02:40:21 -05:00
" forum_mode " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" mention " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-02-19 08:58:04 -05:00
" network " => [ " type " => " char(4) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-07-19 09:52:05 -04:00
" bookmark " => [ " type " => " boolean " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " iid " ],
" uid_network_commented " => [ " uid " , " network " , " commented " ],
" uid_network_created " => [ " uid " , " network " , " created " ],
" uid_contactid_commented " => [ " uid " , " contact-id " , " commented " ],
" uid_contactid_created " => [ " uid " , " contact-id " , " created " ],
" contactid " => [ " contact-id " ],
" ownerid " => [ " owner-id " ],
" authorid " => [ " author-id " ],
" uid_created " => [ " uid " , " created " ],
" uid_commented " => [ " uid " , " commented " ],
" uid_wall_created " => [ " uid " , " wall " , " created " ],
2018-01-31 19:29:47 -05:00
" private_wall_origin_commented " => [ " private " , " wall " , " origin " , " commented " ],
2018-01-15 08:05:12 -05:00
]
];
$database [ " tokens " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " OAuth usage " ,
2018-01-15 08:05:12 -05:00
" 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 " => " " ],
2018-02-20 02:40:21 -05:00
" uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " user " => " uid " ], " comment " => " User id " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
]
];
$database [ " user " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " The local users " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-02-20 02:40:21 -05:00
" parent-uid " => [ " type " => " mediumint unsigned " , " not null " => " 1 " , " default " => " 0 " , " relation " => [ " user " => " uid " ], " comment " => " The parent user that has full control about this user " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-22 07:48:30 -05:00
" legacy_password " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Is the password hash double-hashed? " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" openid " => [ " type " => " varchar(255) " , " not null " => " 1 " , " default " => " " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " => NULL_DATE , " comment " => " timestamp of registration " ],
" login_date " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " 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 " ],
2018-01-15 08:05:12 -05:00
" spubkey " => [ " type " => " text " , " comment " => " " ],
" sprvkey " => [ " type " => " text " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-02-20 02:40:21 -05:00
" cntunkmail " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 10 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-02-20 02:40:21 -05:00
" account-type " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-15 08:05:12 -05:00
" prvnets " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-01-20 18:06:58 -05:00
" pwdreset " => [ " type " => " varchar(255) " , " comment " => " Password reset request token " ],
" pwdreset_time " => [ " type " => " datetime " , " comment " => " Timestamp of the last password reset request " ],
2018-02-20 02:40:21 -05:00
" maxreq " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 10 " , " comment " => " " ],
" expire " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" account_removed " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " if 1 the account is removed " ],
2018-01-15 08:05:12 -05:00
" account_expired " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" account_expires_on " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " timestamp when account expires and will be deleted " ],
" expire_notification_sent " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " timestamp of last warning of account expiration " ],
2018-02-20 02:40:21 -05:00
" def_gid " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " " ],
2018-05-29 04:24:36 -04:00
" 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 " ],
2018-01-15 08:05:12 -05:00
" openidserver " => [ " type " => " text " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " uid " ],
" nickname " => [ " nickname(32) " ],
]
];
$database [ " userd " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Deleted usernames " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-05-29 04:24:36 -04:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " sequential ID " ],
2018-01-15 08:05:12 -05:00
" username " => [ " type " => " varchar(255) " , " not null " => " 1 " , " comment " => " " ],
],
" indexes " => [
" PRIMARY " => [ " id " ],
" username " => [ " username(32) " ],
]
];
2018-05-26 14:07:27 -04:00
$database [ " 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 " ],
2018-05-27 06:42:47 -04:00
" hidden " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Marker to hide an item from the user " ],
2018-05-26 14:07:27 -04:00
],
" indexes " => [
" PRIMARY " => [ " uid " , " iid " ],
]
];
2018-06-02 01:03:23 -04:00
$database [ " 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 " ,
];
2018-01-15 08:05:12 -05:00
$database [ " workerqueue " ] = [
2018-01-14 10:13:00 -05:00
" comment " => " Background tasks queue entries " ,
2018-01-15 08:05:12 -05:00
" fields " => [
2018-02-20 02:40:21 -05:00
" id " => [ " type " => " int unsigned " , " not null " => " 1 " , " extra " => " auto_increment " , " primary " => " 1 " , " comment " => " Auto incremented worker task id " ],
2018-02-11 11:18:39 -05:00
" parameter " => [ " type " => " mediumblob " , " comment " => " Task command " ],
2018-02-20 02:40:21 -05:00
" priority " => [ " type " => " tinyint unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Task priority " ],
2018-01-15 08:05:12 -05:00
" created " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Creation date " ],
2018-02-20 02:40:21 -05:00
" pid " => [ " type " => " int unsigned " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Process id of the worker " ],
2018-01-15 08:05:12 -05:00
" executed " => [ " type " => " datetime " , " not null " => " 1 " , " default " => NULL_DATE , " comment " => " Execution date " ],
2018-05-29 04:24:36 -04:00
" done " => [ " type " => " boolean " , " not null " => " 1 " , " default " => " 0 " , " comment " => " Marked 1 when the task was done - will be deleted later " ],
2018-01-15 08:05:12 -05:00
],
" indexes " => [
" PRIMARY " => [ " id " ],
" pid " => [ " pid " ],
" parameter " => [ " parameter(64) " ],
" priority_created " => [ " priority " , " created " ],
2018-05-16 04:59:15 -04:00
" done_executed " => [ " done " , " executed " ],
2018-01-15 08:05:12 -05:00
]
];
2017-12-14 16:14:02 -05:00
2018-07-19 22:15:21 -04:00
Addon :: callHooks ( 'dbstructure_definition' , $database );
2018-04-11 23:28:05 -04:00
2018-01-20 18:06:58 -05:00
return $database ;
2017-12-14 16:14:02 -05:00
}
2017-12-14 17:18:53 -05:00
}