Merge remote-tracking branch 'upstream/develop' into public-redir

This commit is contained in:
Michael 2018-06-01 12:32:51 +00:00
commit b5b172500d
59 changed files with 18880 additions and 13205 deletions

6
.gitignore vendored
View file

@ -9,7 +9,6 @@ include/jquery-1.4.2.min.js
favicon.* favicon.*
home.html home.html
addon addon
*.orig
*~ *~
robots.txt robots.txt
@ -24,9 +23,11 @@ report/
.buildpath .buildpath
.externalToolBuilders .externalToolBuilders
.settings .settings
#ignore OSX .DS_Store files #ignore OSX .DS_Store files
.DS_Store .DS_Store
#ignore NetBeans IDE's private files (at least)
/nbproject/private/ /nbproject/private/
#ignore smarty cache #ignore smarty cache
@ -59,3 +60,6 @@ venv/
#ignore config files from JetBrains #ignore config files from JetBrains
/.idea /.idea
#ignore addons/ directory
addons/

View file

@ -38,4 +38,3 @@ AddType audio/ogg .oga
RewriteRule ^(.*)$ index.php?pagename=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA] RewriteRule ^(.*)$ index.php?pagename=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
</IfModule> </IfModule>

View file

@ -7,4 +7,14 @@ php:
- 7.1 - 7.1
- 7.2 - 7.2
install: composer install services:
- mysql
env:
- USER=travis DB=test
install:
- composer install
before_script:
- mysql -e 'CREATE DATABASE IF NOT EXISTS test;'
# In order to avoid bin/worker.php warnings
- touch .htconfig.php

106
CHANGELOG
View file

@ -1,3 +1,105 @@
Version 2018.05 (2018-06-01)
Friendica Core:
Update to the translations (DE, EN-GB, EN-US, FI, IS, IT, NL, PL, RU, ZN CH) [translation teams]
Update to the documentation [andyhee, annando, fabrixxm, M-arcus, MrPedovan, rudloff, tobiasd]
Enhancements to the DB handling [annando]
Enhancements to the relay system [annando]
Enhancements to the handling of URL that contain unicode characters [annando]
Enhancements to the Vagrant VM configuration [fabrixxm, tobiasd]
Enhancementa to the Babel module [MrPetovan]
Enhancements to the display of the [code] elements [MrPetovan]
Enhancements to the federation (OStatus, diaspora) [annando]
Enhancements to the PHP7.2 compatibility [Alkarex, MrPetovan, Quix0r]
Enhancements to the themes (frio, vier) [astifter, fabrixxm, koyuawsmbrtn, M-arcus, MrPetovan, Quix0r, rabuzarus]
Enhancements to the accessibility using the frio theme [annando]
Enhancements to the display of the registration note and the privacy statements on the registration page [tobiasd]
Enhancements to the UI by clarification of the wording (deletion of items, network widget, invitations) [annando, tobiasd]
Enhancements to the background worker [annando]
Enhancements to the forum display in the sidebar [annando]
Enhancements to the testing system [rudloff, tobiasd]
Enhancements to the display of events [MrPetovan]
Enhancements to the language detection of postings [MrPetovan]
Enhancements to the memcached handling [MrPetovan]
Enhancements to the Dandelion app support [annando]
Enhancements to the API [rudloff]
Enhancements to the systemd timer example [ben-utzer]
Enhancements to the notification emails to better integrate the securemail addon [tobiasd]
Enhancements to the caching/loading mechanisms [MrPetovan]
Enhancements to the sample-nginx configfile to not use $uri in the rewrite rules [anmol26s]
Fixed a bug in the relocation process of a Friendica instance [annando]
Fixed a bug in the shell wrapper for the console [MrPetovan]
Fixed a bug with the console tool po2php [MrPetovan]
Fixed a bug with the console tool blockaccounts [MrPetovan]
Fixed a bug in the ACL [annando, MrPetovan]
Fixed a bug that prevented the deletion of contact groups [annando]
Fixed a bug that made edited mentions and hashtags plaintext [annando]
Fixed a bug that caused the /display page to receive constandly new updates [annando]
Fixed wrong version of a dependency preventing the usage of PHP 5.6 [MrPetovan]
Fixed a bug in OpenID authentification [Quix0r]
Fixed a bug in the item deletion [annando]
Fixed a bug that prevented public comments from being distributed [annando]
Fixed a bug that caused empty profile pictures for public contacts [annando]
Fixed a bug that prevented the display of some postings in the network stream [annando]
Fixed a bug in the display of videos with parameters [annando]
Fixed a bug that caused the display of blocked contacts under some conditions [annando]
Fixed bugs in the installer [annando, M-arcus]
Fixed a bug in the installer running on nginx [astifter]
Fixed a bug with reshares from diaspora* [annando]
Fixed a bug that accounts from diaspora* could join private forums automatically [annando]
Fixed a bug that prevented the selection of displayed profiles for other Friendica contacts [MrPetovan]
Fixed the version sorting in the federation statistics page [annando]
Fixed a bug in the nodeinfo calculation of total comments [annando]
Fixed a bug during registration that prevented the detected language to be saved [tobiasd]
Added an optional module to display the Terms of Service [rabuzarus, tobiasd]
Added testfeed module [MrPetovan]
Added hashtag autocomplete (ported from Hubzilla) [rabuzarus]
Added password exposed check [MrPetovan]
Added preloading config adapter [MrPetovan]
Added a console to unify the PHP utility scripts [MrPetovan]
Added a tool to set user passwords to the console [annando]
Added memcached support [MrPetovan]
Added password exposure check [MrPetovan]
Added hashtag autocompletion [rabuzarus]
Added feedtest module [MrPetovan]
Added dbclean options to the admin panel [annando]
Added the possibility to add the remote_self flag to contacts from diaspora* and Twitter [annando]
Added the possibility of automatic installations [M-arcus]
Added the sending of a notification mail to the admin when a user deletes their account [tobiasd]
Added examples for home.html and home.css files [tobiasd]
Added an option to define after how many days a contact should be archived [annando]
Added parts of the list API [rudloff]
Added support of ALT texts for images [annando]
Removed the connection postings [annando]
Corrected a long standing typo in config variable names; should your bandwidth saver mode stop working please turn it off and on again [abanink]
The execute-ables were moved from /util to /bin [MrPetovan]
The execute-ables for the developers were moved from /util to /bin/dev [MrPetovan]
The last year deprecated themes frost and frost mobile got removed from the Friendica repository. They can be found in the dedicated repository for deprecated themes [tobiasd]
General code refactoring and beautification work [annando, MrPetovan, rudloff]
Switched to cropperjs to better support touch screen devices [rabuzarus]
Use the diaspora transport layer for the DFRN protocol as well [annando]
Friendica Addons:
Updates to the translations (DE, EN_GB, EN_US, ES, FI, FR, IS, IT, NL, PL, RU, ZH_CN) [translation teams]
advancedcontentfilter: new addon with advanced filter capabilities [MrPetova]
catavatar: new addon for profile pictures based on David Revoy's cat-avatar generator [annando, fabrixxm, tobiasd]
languagefilter: better help text [andyhee]
mathjax: fixed the config form and adopted new CDN URL [tobiasd]
NSFW: add hashtag only hiding [MrPetovan]
notifyall: fixed a bug in handling the sender name [tobiasd]
Twitter: fixed a bug during the creation of public contacts [annando]
Twitter: remote self now also works for Twitter contacts [annando]
Twitter: optimizations for sending media [annando]
Closed Issues:
839, 1186, 1729, 2115, 2247, 2781, 2880, 3174, 3395, 3409, 3412,
3611, 3834, 3837, 3979, 4146, 4572, 4601, 4616, 4629, 4647, 4660,
4661, 4663, 4664, 4665, 4666, 4669, 4670, 4681, 4695, 4670, 4689,
4730, 4749, 4760, 4772, 4786, 4790, 4791, 4816, 4867, 4878, 4819,
4860, 4876, 4879, 4886, 4898, 4899, 4902, 4921, 4926, 4927, 4928,
4938, 4943, 4946, 4947, 4965, 4976, 4966, 4994, 4997, 5002, 5014,
5033, 5043, 5050, 5051, 5056, 5063, 5067, 5010, 5111, 5116, 5128,
5137, 5147
Version 3.6 (2018-03-23) Version 3.6 (2018-03-23)
Friendica Core: Friendica Core:
Updates to the translations (DE, EN_GB, EN_US, ES, FR, IT, ZH_CN) [translation teams] Updates to the translations (DE, EN_GB, EN_US, ES, FR, IT, ZH_CN) [translation teams]
@ -93,6 +195,8 @@ Version 3.6 (2018-03-23)
Updates to the translations (DE, EN_GB, ES, FR, IT, NL, ZH_CN) [translation teams] Updates to the translations (DE, EN_GB, ES, FR, IT, NL, ZH_CN) [translation teams]
all bridges don't relay postings anymore that are posted to a public forum [annando] all bridges don't relay postings anymore that are posted to a public forum [annando]
DAV addon marked unsupported [tobiasd] DAV addon marked unsupported [tobiasd]
communityhome addon marked unsupported [MrPetovan]
yourls addon makrked unsupported [MrPetovan]
Current Weather: fixing a problem with the weathermap link [zeroadam] Current Weather: fixing a problem with the weathermap link [zeroadam]
NSFW added config examples, reworked the description, now ignores the CW from Mastodon [andyhee, annando, rebeka-catalina] NSFW added config examples, reworked the description, now ignores the CW from Mastodon [andyhee, annando, rebeka-catalina]
Twitter support 280 chars limit [annando] Twitter support 280 chars limit [annando]
@ -102,7 +206,7 @@ Version 3.6 (2018-03-23)
Public Server reworked [annando] Public Server reworked [annando]
pageheader settings beautifications [tobiasd] pageheader settings beautifications [tobiasd]
mailstream settings beautifications [tobiasd] mailstream settings beautifications [tobiasd]
Membersince is now part of the core [rabuzarus] Membersince is now part of the core, addon marked unsupported [rabuzarus]
Forum posts are not transmitted over the connectors anymore [annando] Forum posts are not transmitted over the connectors anymore [annando]
Friendica Dir: Friendica Dir:

View file

@ -1 +1 @@
2018.05-rc 2018.08-dev

View file

@ -38,7 +38,7 @@ if (substr($directory, 0, 1) != "/") {
} }
$directory = realpath($directory."/.."); $directory = realpath($directory."/..");
@include($directory."/.htconfig.php"); include $directory."/.htconfig.php";
if (!isset($pidfile)) { if (!isset($pidfile)) {
die('Please specify a pid file in the variable $pidfile in the .htconfig.php. For example:'."\n". die('Please specify a pid file in the variable $pidfile in the .htconfig.php. For example:'."\n".

View file

@ -39,9 +39,9 @@ require_once 'include/text.php';
define('FRIENDICA_PLATFORM', 'Friendica'); define('FRIENDICA_PLATFORM', 'Friendica');
define('FRIENDICA_CODENAME', 'The Tazmans Flax-lily'); define('FRIENDICA_CODENAME', 'The Tazmans Flax-lily');
define('FRIENDICA_VERSION', '2018.05-rc'); define('FRIENDICA_VERSION', '2018.08-dev');
define('DFRN_PROTOCOL_VERSION', '2.23'); define('DFRN_PROTOCOL_VERSION', '2.23');
define('DB_UPDATE_VERSION', 1266); define('DB_UPDATE_VERSION', 1267);
define('NEW_UPDATE_ROUTINE_VERSION', 1170); define('NEW_UPDATE_ROUTINE_VERSION', 1170);
/** /**
@ -1076,6 +1076,7 @@ function is_site_admin()
$adminlist = explode(",", str_replace(" ", "", $a->config['admin_email'])); $adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
//if(local_user() && x($a->user,'email') && x($a->config,'admin_email') && ($a->user['email'] === $a->config['admin_email'])) //if(local_user() && x($a->user,'email') && x($a->config,'admin_email') && ($a->user['email'] === $a->config['admin_email']))
/// @TODO This if() + 2 returns can be shrinked into one return
if (local_user() && x($a->user, 'email') && x($a->config, 'admin_email') && in_array($a->user['email'], $adminlist)) { if (local_user() && x($a->user, 'email') && x($a->config, 'admin_email') && in_array($a->user['email'], $adminlist)) {
return true; return true;
} }
@ -1173,7 +1174,7 @@ function random_digits($digits)
{ {
$rn = ''; $rn = '';
for ($i = 0; $i < $digits; $i++) { for ($i = 0; $i < $digits; $i++) {
/// @TODO rand() is different to mt_rand() and maybe lesser "random" /// @TODO Avoid rand/mt_rand, when it comes to cryptography, they are generating predictable (seedable) numbers.
$rn .= rand(0, 9); $rn .= rand(0, 9);
} }
return $rn; return $rn;
@ -1187,7 +1188,7 @@ function get_server()
$server = "https://dir.friendica.social"; $server = "https://dir.friendica.social";
} }
return($server); return $server;
} }
function get_temppath() function get_temppath()
@ -1236,7 +1237,7 @@ function get_cachefile($file, $writemode = true)
$cache = get_itemcachepath(); $cache = get_itemcachepath();
if ((!$cache) || (!is_dir($cache))) { if ((!$cache) || (!is_dir($cache))) {
return(""); return "";
} }
$subfolder = $cache . "/" . substr($file, 0, 2); $subfolder = $cache . "/" . substr($file, 0, 2);
@ -1250,7 +1251,6 @@ function get_cachefile($file, $writemode = true)
} }
} }
/// @TODO no need to put braces here
return $cachepath; return $cachepath;
} }
@ -1357,7 +1357,6 @@ function get_spoolpath()
return ""; return "";
} }
if (!function_exists('exif_imagetype')) { if (!function_exists('exif_imagetype')) {
function exif_imagetype($file) function exif_imagetype($file)
{ {
@ -1395,7 +1394,7 @@ function validate_include(&$file)
} }
// Simply return flag // Simply return flag
return ($valid); return $valid;
} }
function current_load() function current_load()

View file

@ -47,7 +47,8 @@
], ],
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Friendica\\": "src/" "Friendica\\": "src/",
"Friendica\\Test\\": "tests/"
}, },
"psr-0": { "psr-0": {
"": "library/" "": "library/"
@ -68,5 +69,13 @@
"exclude": [ "exclude": [
"log", "cache", "/photo", "/proxy" "log", "cache", "/photo", "/proxy"
] ]
},
"require-dev": {
"phpunit/dbunit": "^2.0",
"phpdocumentor/reflection-docblock": "^3.0.2",
"phpunit/php-token-stream": "^1.4.2"
},
"scripts": {
"test": "phpunit"
} }
} }

1379
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
-- ------------------------------------------ -- ------------------------------------------
-- Friendica 2018.05-rc (The Tazmans Flax-lily) -- Friendica 2018.08-dev (The Tazmans Flax-lily)
-- DB_UPDATE_VERSION 1266 -- DB_UPDATE_VERSION 1267
-- ------------------------------------------ -- ------------------------------------------
@ -9,12 +9,12 @@
-- --
CREATE TABLE IF NOT EXISTS `addon` ( CREATE TABLE IF NOT EXISTS `addon` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT '',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '', `name` varchar(50) NOT NULL DEFAULT '' COMMENT 'addon base (file)name',
`version` varchar(50) NOT NULL DEFAULT '' COMMENT '', `version` varchar(50) NOT NULL DEFAULT '' COMMENT 'currently unused',
`installed` boolean NOT NULL DEFAULT '0' COMMENT '', `installed` boolean NOT NULL DEFAULT '0' COMMENT 'currently always 1',
`hidden` boolean NOT NULL DEFAULT '0' COMMENT '', `hidden` boolean NOT NULL DEFAULT '0' COMMENT 'currently unused',
`timestamp` int unsigned NOT NULL DEFAULT 0 COMMENT '', `timestamp` int unsigned NOT NULL DEFAULT 0 COMMENT 'file timestamp to check for reloads',
`plugin_admin` boolean NOT NULL DEFAULT '0' COMMENT '', `plugin_admin` boolean NOT NULL DEFAULT '0' COMMENT '1 = has admin config, 0 = has no admin config',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
UNIQUE INDEX `name` (`name`) UNIQUE INDEX `name` (`name`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
@ -23,19 +23,19 @@ CREATE TABLE IF NOT EXISTS `addon` (
-- TABLE attach -- TABLE attach
-- --
CREATE TABLE IF NOT EXISTS `attach` ( CREATE TABLE IF NOT EXISTS `attach` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'generated index',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
`hash` varchar(64) NOT NULL DEFAULT '' COMMENT '', `hash` varchar(64) NOT NULL DEFAULT '' COMMENT 'hash',
`filename` varchar(255) NOT NULL DEFAULT '' COMMENT '', `filename` varchar(255) NOT NULL DEFAULT '' COMMENT 'filename of original',
`filetype` varchar(64) NOT NULL DEFAULT '' COMMENT '', `filetype` varchar(64) NOT NULL DEFAULT '' COMMENT 'mimetype',
`filesize` int unsigned NOT NULL DEFAULT 0 COMMENT '', `filesize` int unsigned NOT NULL DEFAULT 0 COMMENT 'size in bytes',
`data` longblob NOT NULL COMMENT '', `data` longblob NOT NULL COMMENT 'file data',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'creation time',
`edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'last edit time',
`allow_cid` mediumtext COMMENT '', `allow_cid` mediumtext COMMENT 'Access Control - list of allowed contact.id \'<19><78>',
`allow_gid` mediumtext COMMENT '', `allow_gid` mediumtext COMMENT 'Access Control - list of allowed groups',
`deny_cid` mediumtext COMMENT '', `deny_cid` mediumtext COMMENT 'Access Control - list of denied contact.id',
`deny_gid` mediumtext COMMENT '', `deny_gid` mediumtext COMMENT 'Access Control - list of denied groups',
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
@ -67,7 +67,7 @@ CREATE TABLE IF NOT EXISTS `cache` (
-- TABLE challenge -- TABLE challenge
-- --
CREATE TABLE IF NOT EXISTS `challenge` ( CREATE TABLE IF NOT EXISTS `challenge` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`challenge` varchar(255) NOT NULL DEFAULT '' COMMENT '', `challenge` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`dfrn-id` varchar(255) NOT NULL DEFAULT '' COMMENT '', `dfrn-id` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`expire` int unsigned NOT NULL DEFAULT 0 COMMENT '', `expire` int unsigned NOT NULL DEFAULT 0 COMMENT '',
@ -105,26 +105,26 @@ CREATE TABLE IF NOT EXISTS `config` (
-- TABLE contact -- TABLE contact
-- --
CREATE TABLE IF NOT EXISTS `contact` ( CREATE TABLE IF NOT EXISTS `contact` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`self` boolean NOT NULL DEFAULT '0' COMMENT '', `self` boolean NOT NULL DEFAULT '0' COMMENT '1 if the contact is the user him/her self',
`remote_self` boolean NOT NULL DEFAULT '0' COMMENT '', `remote_self` boolean NOT NULL DEFAULT '0' COMMENT '',
`rel` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', `rel` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'The kind of the relation between the user and the contact',
`duplex` boolean NOT NULL DEFAULT '0' COMMENT '', `duplex` boolean NOT NULL DEFAULT '0' COMMENT '',
`network` char(4) NOT NULL DEFAULT '' COMMENT '', `network` char(4) NOT NULL DEFAULT '' COMMENT 'Network protocol of the contact',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `name` varchar(255) NOT NULL DEFAULT '' COMMENT 'Name that this contact is known by',
`nick` varchar(255) NOT NULL DEFAULT '' COMMENT '', `nick` varchar(255) NOT NULL DEFAULT '' COMMENT 'Nick- and user name of the contact',
`location` varchar(255) NOT NULL DEFAULT '' COMMENT '', `location` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`about` text COMMENT '', `about` text COMMENT '',
`keywords` text COMMENT '', `keywords` text COMMENT 'public keywords (interests) of the contact',
`gender` varchar(32) NOT NULL DEFAULT '' COMMENT '', `gender` varchar(32) NOT NULL DEFAULT '' COMMENT '',
`xmpp` varchar(255) NOT NULL DEFAULT '' COMMENT '', `xmpp` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`attag` varchar(255) NOT NULL DEFAULT '' COMMENT '', `attag` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`avatar` varchar(255) NOT NULL DEFAULT '' COMMENT '', `avatar` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`photo` varchar(255) DEFAULT '' COMMENT '', `photo` varchar(255) DEFAULT '' COMMENT 'Link to the profile photo of the contact',
`thumb` varchar(255) DEFAULT '' COMMENT '', `thumb` varchar(255) DEFAULT '' COMMENT 'Link to the profile photo (thumb size)',
`micro` varchar(255) DEFAULT '' COMMENT '', `micro` varchar(255) DEFAULT '' COMMENT 'Link to the profile photo (micro size)',
`site-pubkey` text COMMENT '', `site-pubkey` text COMMENT '',
`issued-id` varchar(255) NOT NULL DEFAULT '' COMMENT '', `issued-id` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`dfrn-id` varchar(255) NOT NULL DEFAULT '' COMMENT '', `dfrn-id` varchar(255) NOT NULL DEFAULT '' COMMENT '',
@ -132,8 +132,8 @@ CREATE TABLE IF NOT EXISTS `contact` (
`nurl` varchar(255) NOT NULL DEFAULT '' COMMENT '', `nurl` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`addr` varchar(255) NOT NULL DEFAULT '' COMMENT '', `addr` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`alias` varchar(255) NOT NULL DEFAULT '' COMMENT '', `alias` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`pubkey` text COMMENT '', `pubkey` text COMMENT 'RSA public key 4096 bit',
`prvkey` text COMMENT '', `prvkey` text COMMENT 'RSA private key 4096 bit',
`batch` varchar(255) NOT NULL DEFAULT '' COMMENT '', `batch` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`request` varchar(255) COMMENT '', `request` varchar(255) COMMENT '',
`notify` varchar(255) COMMENT '', `notify` varchar(255) COMMENT '',
@ -145,20 +145,20 @@ CREATE TABLE IF NOT EXISTS `contact` (
`usehub` boolean NOT NULL DEFAULT '0' COMMENT '', `usehub` boolean NOT NULL DEFAULT '0' COMMENT '',
`subhub` boolean NOT NULL DEFAULT '0' COMMENT '', `subhub` boolean NOT NULL DEFAULT '0' COMMENT '',
`hub-verify` varchar(255) NOT NULL DEFAULT '' COMMENT '', `hub-verify` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`last-update` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `last-update` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last try to update the contact info',
`success_update` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `success_update` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last successful contact update',
`failure_update` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `failure_update` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last failed update',
`name-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `name-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`uri-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `uri-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`avatar-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `avatar-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`term-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `term-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`last-item` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `last-item` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'date of the last post',
`priority` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', `priority` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
`blocked` boolean NOT NULL DEFAULT '1' COMMENT '', `blocked` boolean NOT NULL DEFAULT '1' COMMENT '',
`readonly` boolean NOT NULL DEFAULT '0' COMMENT '', `readonly` boolean NOT NULL DEFAULT '0' COMMENT 'posts of the contact are readonly',
`writable` boolean NOT NULL DEFAULT '0' COMMENT '', `writable` boolean NOT NULL DEFAULT '0' COMMENT '',
`forum` boolean NOT NULL DEFAULT '0' COMMENT '', `forum` boolean NOT NULL DEFAULT '0' COMMENT 'contact is a forum',
`prv` boolean NOT NULL DEFAULT '0' COMMENT '', `prv` boolean NOT NULL DEFAULT '0' COMMENT 'contact is a private group',
`contact-type` tinyint NOT NULL DEFAULT 0 COMMENT '', `contact-type` tinyint NOT NULL DEFAULT 0 COMMENT '',
`hidden` boolean NOT NULL DEFAULT '0' COMMENT '', `hidden` boolean NOT NULL DEFAULT '0' COMMENT '',
`archive` boolean NOT NULL DEFAULT '0' COMMENT '', `archive` boolean NOT NULL DEFAULT '0' COMMENT '',
@ -192,14 +192,14 @@ CREATE TABLE IF NOT EXISTS `contact` (
-- TABLE conv -- TABLE conv
-- --
CREATE TABLE IF NOT EXISTS `conv` ( CREATE TABLE IF NOT EXISTS `conv` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`guid` varchar(255) NOT NULL DEFAULT '' COMMENT '', `guid` varchar(255) NOT NULL DEFAULT '' COMMENT 'A unique identifier for this conversation',
`recips` text COMMENT '', `recips` text COMMENT 'sender_handle;recipient_handle',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
`creator` varchar(255) NOT NULL DEFAULT '' COMMENT '', `creator` varchar(255) NOT NULL DEFAULT '' COMMENT 'handle of creator',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'creation timestamp',
`updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'edited timestamp',
`subject` text COMMENT '', `subject` text COMMENT 'subject of initial message',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`) INDEX `uid` (`uid`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
@ -208,13 +208,13 @@ CREATE TABLE IF NOT EXISTS `conv` (
-- TABLE conversation -- TABLE conversation
-- --
CREATE TABLE IF NOT EXISTS `conversation` ( CREATE TABLE IF NOT EXISTS `conversation` (
`item-uri` varbinary(255) NOT NULL COMMENT '', `item-uri` varbinary(255) NOT NULL COMMENT 'URI of the item',
`reply-to-uri` varbinary(255) NOT NULL DEFAULT '' COMMENT '', `reply-to-uri` varbinary(255) NOT NULL DEFAULT '' COMMENT 'URI to which this item is a reply',
`conversation-uri` varbinary(255) NOT NULL DEFAULT '' COMMENT '', `conversation-uri` varbinary(255) NOT NULL DEFAULT '' COMMENT 'GNU Social conversation URI',
`conversation-href` varbinary(255) NOT NULL DEFAULT '' COMMENT '', `conversation-href` varbinary(255) NOT NULL DEFAULT '' COMMENT 'GNU Social conversation link',
`protocol` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', `protocol` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'The protocol of the item',
`source` mediumtext COMMENT '', `source` mediumtext COMMENT 'Original source',
`received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Receiving date',
PRIMARY KEY(`item-uri`), PRIMARY KEY(`item-uri`),
INDEX `conversation-uri` (`conversation-uri`), INDEX `conversation-uri` (`conversation-uri`),
INDEX `received` (`received`) INDEX `received` (`received`)
@ -224,26 +224,26 @@ CREATE TABLE IF NOT EXISTS `conversation` (
-- TABLE event -- TABLE event
-- --
CREATE TABLE IF NOT EXISTS `event` ( CREATE TABLE IF NOT EXISTS `event` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`guid` varchar(255) NOT NULL DEFAULT '' COMMENT '', `guid` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
`cid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'contact_id (ID of the contact in contact table)',
`uri` varchar(255) NOT NULL DEFAULT '' COMMENT '', `uri` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'creation time',
`edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'last edit time',
`start` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `start` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'event start time',
`finish` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `finish` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'event end time',
`summary` text COMMENT '', `summary` text COMMENT 'short description or title of the event',
`desc` text COMMENT '', `desc` text COMMENT 'event description',
`location` text COMMENT '', `location` text COMMENT 'event location',
`type` varchar(20) NOT NULL DEFAULT '' COMMENT '', `type` varchar(20) NOT NULL DEFAULT '' COMMENT 'event or birthday',
`nofinish` boolean NOT NULL DEFAULT '0' COMMENT '', `nofinish` boolean NOT NULL DEFAULT '0' COMMENT 'if event does have no end this is 1',
`adjust` boolean NOT NULL DEFAULT '1' COMMENT '', `adjust` boolean NOT NULL DEFAULT '1' COMMENT 'adjust to timezone of the recipient (0 or 1)',
`ignore` boolean NOT NULL DEFAULT '0' COMMENT '', `ignore` boolean NOT NULL DEFAULT '0' COMMENT '0 or 1',
`allow_cid` mediumtext COMMENT '', `allow_cid` mediumtext COMMENT 'Access Control - list of allowed contact.id \'<19><78>\'',
`allow_gid` mediumtext COMMENT '', `allow_gid` mediumtext COMMENT 'Access Control - list of allowed groups',
`deny_cid` mediumtext COMMENT '', `deny_cid` mediumtext COMMENT 'Access Control - list of denied contact.id',
`deny_gid` mediumtext COMMENT '', `deny_gid` mediumtext COMMENT 'Access Control - list of denied groups',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid_start` (`uid`,`start`) INDEX `uid_start` (`uid`,`start`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
@ -252,8 +252,8 @@ CREATE TABLE IF NOT EXISTS `event` (
-- TABLE fcontact -- TABLE fcontact
-- --
CREATE TABLE IF NOT EXISTS `fcontact` ( CREATE TABLE IF NOT EXISTS `fcontact` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`guid` varchar(255) NOT NULL DEFAULT '' COMMENT '', `guid` varchar(255) NOT NULL DEFAULT '' COMMENT 'unique id',
`url` varchar(255) NOT NULL DEFAULT '' COMMENT '', `url` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`photo` varchar(255) NOT NULL DEFAULT '' COMMENT '', `photo` varchar(255) NOT NULL DEFAULT '' COMMENT '',
@ -294,9 +294,9 @@ CREATE TABLE IF NOT EXISTS `fsuggest` (
-- TABLE gcign -- TABLE gcign
-- --
CREATE TABLE IF NOT EXISTS `gcign` ( CREATE TABLE IF NOT EXISTS `gcign` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Local User id',
`gcid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `gcid` int unsigned NOT NULL DEFAULT 0 COMMENT 'gcontact.id of ignored contact',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`), INDEX `uid` (`uid`),
INDEX `gcid` (`gcid`) INDEX `gcid` (`gcid`)
@ -306,12 +306,12 @@ CREATE TABLE IF NOT EXISTS `gcign` (
-- TABLE gcontact -- TABLE gcontact
-- --
CREATE TABLE IF NOT EXISTS `gcontact` ( CREATE TABLE IF NOT EXISTS `gcontact` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `name` varchar(255) NOT NULL DEFAULT '' COMMENT 'Name that this contact is known by',
`nick` varchar(255) NOT NULL DEFAULT '' COMMENT '', `nick` varchar(255) NOT NULL DEFAULT '' COMMENT 'Nick- and user name of the contact',
`url` varchar(255) NOT NULL DEFAULT '' COMMENT '', `url` varchar(255) NOT NULL DEFAULT '' COMMENT 'Link to the contacts profile page',
`nurl` varchar(255) NOT NULL DEFAULT '' COMMENT '', `nurl` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`photo` varchar(255) NOT NULL DEFAULT '' COMMENT '', `photo` varchar(255) NOT NULL DEFAULT '' COMMENT 'Link to the profile photo',
`connect` varchar(255) NOT NULL DEFAULT '' COMMENT '', `connect` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`updated` datetime DEFAULT '0001-01-01 00:00:00' COMMENT '', `updated` datetime DEFAULT '0001-01-01 00:00:00' COMMENT '',
@ -319,19 +319,19 @@ CREATE TABLE IF NOT EXISTS `gcontact` (
`last_failure` datetime DEFAULT '0001-01-01 00:00:00' COMMENT '', `last_failure` datetime DEFAULT '0001-01-01 00:00:00' COMMENT '',
`location` varchar(255) NOT NULL DEFAULT '' COMMENT '', `location` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`about` text COMMENT '', `about` text COMMENT '',
`keywords` text COMMENT '', `keywords` text COMMENT 'puplic keywords (interests)',
`gender` varchar(32) NOT NULL DEFAULT '' COMMENT '', `gender` varchar(32) NOT NULL DEFAULT '' COMMENT '',
`birthday` varchar(32) NOT NULL DEFAULT '0001-01-01' COMMENT '', `birthday` varchar(32) NOT NULL DEFAULT '0001-01-01' COMMENT '',
`community` boolean NOT NULL DEFAULT '0' COMMENT '', `community` boolean NOT NULL DEFAULT '0' COMMENT '1 if contact is forum account',
`contact-type` tinyint NOT NULL DEFAULT -1 COMMENT '', `contact-type` tinyint NOT NULL DEFAULT -1 COMMENT '',
`hide` boolean NOT NULL DEFAULT '0' COMMENT '', `hide` boolean NOT NULL DEFAULT '0' COMMENT '1 = should be hidden from search',
`nsfw` boolean NOT NULL DEFAULT '0' COMMENT '', `nsfw` boolean NOT NULL DEFAULT '0' COMMENT '1 = contact posts nsfw content',
`network` char(4) NOT NULL DEFAULT '' COMMENT '', `network` char(4) NOT NULL DEFAULT '' COMMENT 'social network protocol',
`addr` varchar(255) NOT NULL DEFAULT '' COMMENT '', `addr` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`notify` varchar(255) COMMENT '', `notify` varchar(255) COMMENT '',
`alias` varchar(255) NOT NULL DEFAULT '' COMMENT '', `alias` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`generation` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', `generation` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
`server_url` varchar(255) NOT NULL DEFAULT '' COMMENT '', `server_url` varchar(255) NOT NULL DEFAULT '' COMMENT 'baseurl of the contacts server',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
UNIQUE INDEX `nurl` (`nurl`(190)), UNIQUE INDEX `nurl` (`nurl`(190)),
INDEX `name` (`name`(64)), INDEX `name` (`name`(64)),
@ -345,7 +345,7 @@ CREATE TABLE IF NOT EXISTS `gcontact` (
-- TABLE glink -- TABLE glink
-- --
CREATE TABLE IF NOT EXISTS `glink` ( CREATE TABLE IF NOT EXISTS `glink` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`cid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `cid` int unsigned NOT NULL DEFAULT 0 COMMENT '',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
`gcid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `gcid` int unsigned NOT NULL DEFAULT 0 COMMENT '',
@ -360,11 +360,11 @@ CREATE TABLE IF NOT EXISTS `glink` (
-- TABLE group -- TABLE group
-- --
CREATE TABLE IF NOT EXISTS `group` ( CREATE TABLE IF NOT EXISTS `group` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
`visible` boolean NOT NULL DEFAULT '0' COMMENT '', `visible` boolean NOT NULL DEFAULT '0' COMMENT '1 indicates the member list is not private',
`deleted` boolean NOT NULL DEFAULT '0' COMMENT '', `deleted` boolean NOT NULL DEFAULT '0' COMMENT '1 indicates the group has been deleted',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `name` varchar(255) NOT NULL DEFAULT '' COMMENT 'human readable name of group',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`) INDEX `uid` (`uid`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
@ -373,9 +373,9 @@ CREATE TABLE IF NOT EXISTS `group` (
-- TABLE group_member -- TABLE group_member
-- --
CREATE TABLE IF NOT EXISTS `group_member` ( CREATE TABLE IF NOT EXISTS `group_member` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`gid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `gid` int unsigned NOT NULL DEFAULT 0 COMMENT 'groups.id of the associated group',
`contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'contact.id of the member assigned to the associated group',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `contactid` (`contact-id`), INDEX `contactid` (`contact-id`),
UNIQUE INDEX `gid_contactid` (`gid`,`contact-id`) UNIQUE INDEX `gid_contactid` (`gid`,`contact-id`)
@ -385,14 +385,14 @@ CREATE TABLE IF NOT EXISTS `group_member` (
-- TABLE gserver -- TABLE gserver
-- --
CREATE TABLE IF NOT EXISTS `gserver` ( CREATE TABLE IF NOT EXISTS `gserver` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`url` varchar(255) NOT NULL DEFAULT '' COMMENT '', `url` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`nurl` varchar(255) NOT NULL DEFAULT '' COMMENT '', `nurl` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`version` varchar(255) NOT NULL DEFAULT '' COMMENT '', `version` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`site_name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `site_name` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`info` text COMMENT '', `info` text COMMENT '',
`register_policy` tinyint NOT NULL DEFAULT 0 COMMENT '', `register_policy` tinyint NOT NULL DEFAULT 0 COMMENT '',
`registered-users` int unsigned NOT NULL DEFAULT 0 COMMENT '', `registered-users` int unsigned NOT NULL DEFAULT 0 COMMENT 'Number of registered users',
`poco` varchar(255) NOT NULL DEFAULT '' COMMENT '', `poco` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`noscrape` varchar(255) NOT NULL DEFAULT '' COMMENT '', `noscrape` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`network` char(4) NOT NULL DEFAULT '' COMMENT '', `network` char(4) NOT NULL DEFAULT '' COMMENT '',
@ -421,11 +421,11 @@ CREATE TABLE IF NOT EXISTS `gserver-tag` (
-- TABLE hook -- TABLE hook
-- --
CREATE TABLE IF NOT EXISTS `hook` ( CREATE TABLE IF NOT EXISTS `hook` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`hook` varbinary(100) NOT NULL DEFAULT '' COMMENT '', `hook` varbinary(100) NOT NULL DEFAULT '' COMMENT 'name of hook',
`file` varbinary(200) NOT NULL DEFAULT '' COMMENT '', `file` varbinary(200) NOT NULL DEFAULT '' COMMENT 'relative filename of hook handler',
`function` varbinary(200) NOT NULL DEFAULT '' COMMENT '', `function` varbinary(200) NOT NULL DEFAULT '' COMMENT 'function name of hook handler',
`priority` smallint unsigned NOT NULL DEFAULT 0 COMMENT '', `priority` smallint unsigned NOT NULL DEFAULT 0 COMMENT 'not yet implemented - can be used to sort conflicts in hook handling by calling handlers in priority order',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
UNIQUE INDEX `hook_file_function` (`hook`,`file`,`function`) UNIQUE INDEX `hook_file_function` (`hook`,`file`,`function`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
@ -434,7 +434,7 @@ CREATE TABLE IF NOT EXISTS `hook` (
-- TABLE intro -- TABLE intro
-- --
CREATE TABLE IF NOT EXISTS `intro` ( CREATE TABLE IF NOT EXISTS `intro` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
`fid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `fid` int unsigned NOT NULL DEFAULT 0 COMMENT '',
`contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT '',
@ -453,68 +453,68 @@ CREATE TABLE IF NOT EXISTS `intro` (
-- --
CREATE TABLE IF NOT EXISTS `item` ( CREATE TABLE IF NOT EXISTS `item` (
`id` int unsigned NOT NULL auto_increment, `id` int unsigned NOT NULL auto_increment,
`guid` varchar(255) NOT NULL DEFAULT '' COMMENT '', `guid` varchar(255) NOT NULL DEFAULT '' COMMENT 'A unique identifier for this item',
`uri` varchar(255) NOT NULL DEFAULT '' COMMENT '', `uri` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner id which owns this copy of the item',
`contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'contact.id',
`type` varchar(20) NOT NULL DEFAULT '' COMMENT '', `type` varchar(20) NOT NULL DEFAULT '' COMMENT '',
`wall` boolean NOT NULL DEFAULT '0' COMMENT '', `wall` boolean NOT NULL DEFAULT '0' COMMENT 'This item was posted to the wall of uid',
`gravity` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', `gravity` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
`parent` int unsigned NOT NULL DEFAULT 0 COMMENT '', `parent` int unsigned NOT NULL DEFAULT 0 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` varchar(255) NOT NULL DEFAULT '' COMMENT '', `parent-uri` varchar(255) NOT NULL DEFAULT '' COMMENT 'uri of the parent to this item',
`extid` varchar(255) NOT NULL DEFAULT '' COMMENT '', `extid` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`thr-parent` varchar(255) NOT NULL DEFAULT '' COMMENT '', `thr-parent` varchar(255) NOT NULL 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` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Creation timestamp.',
`edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of last edit (default is created)',
`commented` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `commented` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of last comment/reply to this item',
`received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime',
`changed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `changed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date that something in the conversation changed, indicating clients should fetch the conversation again',
`owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Link to the contact table with uid=0 of the owner of this item',
`owner-name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `owner-name` varchar(255) NOT NULL DEFAULT '' COMMENT 'Name of the owner of this item',
`owner-link` varchar(255) NOT NULL DEFAULT '' COMMENT '', `owner-link` varchar(255) NOT NULL DEFAULT '' COMMENT 'Link to the profile page of the owner of this item',
`owner-avatar` varchar(255) NOT NULL DEFAULT '' COMMENT '', `owner-avatar` varchar(255) NOT NULL DEFAULT '' COMMENT 'Link to the avatar picture of the owner of this item',
`author-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `author-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Link to the contact table with uid=0 of the author of this item',
`author-name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `author-name` varchar(255) NOT NULL DEFAULT '' COMMENT 'Name of the author of this item',
`author-link` varchar(255) NOT NULL DEFAULT '' COMMENT '', `author-link` varchar(255) NOT NULL DEFAULT '' COMMENT 'Link to the profile page of the author of this item',
`author-avatar` varchar(255) NOT NULL DEFAULT '' COMMENT '', `author-avatar` varchar(255) NOT NULL DEFAULT '' COMMENT 'Link to the avatar picture of the author of this item',
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '', `title` varchar(255) NOT NULL DEFAULT '' COMMENT 'item title',
`content-warning` varchar(255) NOT NULL DEFAULT '' COMMENT '', `content-warning` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`body` mediumtext COMMENT '', `body` mediumtext COMMENT 'item body content',
`app` varchar(255) NOT NULL DEFAULT '' COMMENT '', `app` varchar(255) NOT NULL DEFAULT '' COMMENT 'application which generated this item',
`verb` varchar(100) NOT NULL DEFAULT '' COMMENT '', `verb` varchar(100) NOT NULL DEFAULT '' COMMENT 'ActivityStreams verb',
`object-type` varchar(100) NOT NULL DEFAULT '' COMMENT '', `object-type` varchar(100) NOT NULL DEFAULT '' COMMENT 'ActivityStreams object type',
`object` text COMMENT '', `object` text COMMENT 'JSON encoded object structure unless it is an implied object (normal post)',
`target-type` varchar(100) NOT NULL DEFAULT '' COMMENT '', `target-type` varchar(100) NOT NULL DEFAULT '' COMMENT 'ActivityStreams target type if applicable (URI)',
`target` text COMMENT '', `target` text COMMENT 'JSON encoded target structure if used',
`postopts` text COMMENT '', `postopts` 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',
`plink` varchar(255) NOT NULL DEFAULT '' COMMENT '', `plink` varchar(255) NOT NULL DEFAULT '' COMMENT 'permalink or URL toa displayable copy of the message at its source',
`resource-id` varchar(32) NOT NULL DEFAULT '' COMMENT '', `resource-id` varchar(32) NOT NULL 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` int unsigned NOT NULL DEFAULT 0 COMMENT '', `event-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Used to link to the event.id',
`tag` mediumtext COMMENT '', `tag` mediumtext COMMENT '',
`attach` mediumtext COMMENT '', `attach` mediumtext COMMENT 'JSON structure representing attachments to this item',
`inform` mediumtext COMMENT '', `inform` mediumtext COMMENT '',
`file` mediumtext COMMENT '', `file` mediumtext COMMENT '',
`location` varchar(255) NOT NULL DEFAULT '' COMMENT '', `location` varchar(255) NOT NULL DEFAULT '' COMMENT 'text location where this item originated',
`coord` varchar(255) NOT NULL DEFAULT '' COMMENT '', `coord` varchar(255) NOT NULL DEFAULT '' COMMENT 'longitude/latitude pair representing location where this item originated',
`allow_cid` mediumtext COMMENT '', `allow_cid` mediumtext COMMENT 'Access Control - list of allowed contact.id \'<19><78>\'',
`allow_gid` mediumtext COMMENT '', `allow_gid` mediumtext COMMENT 'Access Control - list of allowed groups',
`deny_cid` mediumtext COMMENT '', `deny_cid` mediumtext COMMENT 'Access Control - list of denied contact.id',
`deny_gid` mediumtext COMMENT '', `deny_gid` mediumtext COMMENT 'Access Control - list of denied groups',
`private` boolean NOT NULL DEFAULT '0' COMMENT '', `private` boolean NOT NULL DEFAULT '0' COMMENT 'distribution is restricted',
`pubmail` boolean NOT NULL DEFAULT '0' COMMENT '', `pubmail` boolean NOT NULL DEFAULT '0' COMMENT '',
`moderated` boolean NOT NULL DEFAULT '0' COMMENT '', `moderated` boolean NOT NULL DEFAULT '0' COMMENT '',
`visible` boolean NOT NULL DEFAULT '0' COMMENT '', `visible` boolean NOT NULL DEFAULT '0' COMMENT '',
`spam` boolean NOT NULL DEFAULT '0' COMMENT '', `spam` boolean NOT NULL DEFAULT '0' COMMENT '',
`starred` boolean NOT NULL DEFAULT '0' COMMENT '', `starred` boolean NOT NULL DEFAULT '0' COMMENT 'item has been favourited',
`bookmark` boolean NOT NULL DEFAULT '0' COMMENT '', `bookmark` boolean NOT NULL DEFAULT '0' COMMENT 'item has been bookmarked',
`unseen` boolean NOT NULL DEFAULT '1' COMMENT '', `unseen` boolean NOT NULL DEFAULT '1' COMMENT 'item has not been seen',
`deleted` boolean NOT NULL DEFAULT '0' COMMENT '', `deleted` boolean NOT NULL DEFAULT '0' COMMENT 'item has been deleted',
`origin` boolean NOT NULL DEFAULT '0' COMMENT '', `origin` boolean NOT NULL DEFAULT '0' COMMENT 'item originated at this site',
`forum_mode` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', `forum_mode` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
`mention` boolean NOT NULL DEFAULT '0' COMMENT '', `mention` boolean NOT NULL DEFAULT '0' COMMENT 'The owner of this item was mentioned in it',
`network` char(4) NOT NULL DEFAULT '' COMMENT '', `network` char(4) NOT NULL DEFAULT '' COMMENT 'Network from where the item comes from',
`rendered-hash` varchar(32) NOT NULL DEFAULT '' COMMENT '', `rendered-hash` varchar(32) NOT NULL DEFAULT '' COMMENT '',
`rendered-html` mediumtext COMMENT '', `rendered-html` mediumtext COMMENT 'item.body converted to html',
`global` boolean NOT NULL DEFAULT '0' COMMENT '', `global` boolean NOT NULL DEFAULT '0' COMMENT '',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `guid` (`guid`(191)), INDEX `guid` (`guid`(191)),
@ -550,10 +550,10 @@ CREATE TABLE IF NOT EXISTS `item` (
-- TABLE locks -- TABLE locks
-- --
CREATE TABLE IF NOT EXISTS `locks` ( CREATE TABLE IF NOT EXISTS `locks` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`name` varchar(128) NOT NULL DEFAULT '' COMMENT '', `name` varchar(128) NOT NULL DEFAULT '' COMMENT '',
`locked` boolean NOT NULL DEFAULT '0' COMMENT '', `locked` boolean NOT NULL DEFAULT '0' COMMENT '',
`pid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `pid` int unsigned NOT NULL DEFAULT 0 COMMENT 'Process ID',
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
@ -561,23 +561,23 @@ CREATE TABLE IF NOT EXISTS `locks` (
-- TABLE mail -- TABLE mail
-- --
CREATE TABLE IF NOT EXISTS `mail` ( CREATE TABLE IF NOT EXISTS `mail` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
`guid` varchar(255) NOT NULL DEFAULT '' COMMENT '', `guid` varchar(255) NOT NULL DEFAULT '' COMMENT 'A unique identifier for this private message',
`from-name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `from-name` varchar(255) NOT NULL DEFAULT '' COMMENT 'name of the sender',
`from-photo` varchar(255) NOT NULL DEFAULT '' COMMENT '', `from-photo` varchar(255) NOT NULL DEFAULT '' COMMENT 'contact photo link of the sender',
`from-url` varchar(255) NOT NULL DEFAULT '' COMMENT '', `from-url` varchar(255) NOT NULL DEFAULT '' COMMENT 'profile linke of the sender',
`contact-id` varchar(255) NOT NULL DEFAULT '' COMMENT '', `contact-id` varchar(255) NOT NULL DEFAULT '' COMMENT 'contact.id',
`convid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `convid` int unsigned NOT NULL DEFAULT 0 COMMENT 'conv.id',
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '', `title` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`body` mediumtext COMMENT '', `body` mediumtext COMMENT '',
`seen` boolean NOT NULL DEFAULT '0' COMMENT '', `seen` boolean NOT NULL DEFAULT '0' COMMENT 'if message visited it is 1',
`reply` boolean NOT NULL DEFAULT '0' COMMENT '', `reply` boolean NOT NULL DEFAULT '0' COMMENT '',
`replied` boolean NOT NULL DEFAULT '0' COMMENT '', `replied` boolean NOT NULL DEFAULT '0' COMMENT '',
`unknown` boolean NOT NULL DEFAULT '0' COMMENT '', `unknown` boolean NOT NULL DEFAULT '0' COMMENT 'if sender not in the contact table this is 1',
`uri` varchar(255) NOT NULL DEFAULT '' COMMENT '', `uri` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`parent-uri` varchar(255) NOT NULL DEFAULT '' COMMENT '', `parent-uri` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'creation time of the private message',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid_seen` (`uid`,`seen`), INDEX `uid_seen` (`uid`,`seen`),
INDEX `convid` (`convid`), INDEX `convid` (`convid`),
@ -590,7 +590,7 @@ CREATE TABLE IF NOT EXISTS `mail` (
-- TABLE mailacct -- TABLE mailacct
-- --
CREATE TABLE IF NOT EXISTS `mailacct` ( CREATE TABLE IF NOT EXISTS `mailacct` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
`server` varchar(255) NOT NULL DEFAULT '' COMMENT '', `server` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`port` smallint unsigned NOT NULL DEFAULT 0 COMMENT '', `port` smallint unsigned NOT NULL DEFAULT 0 COMMENT '',
@ -610,7 +610,7 @@ CREATE TABLE IF NOT EXISTS `mailacct` (
-- TABLE manage -- TABLE manage
-- --
CREATE TABLE IF NOT EXISTS `manage` ( CREATE TABLE IF NOT EXISTS `manage` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
`mid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `mid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
@ -621,7 +621,7 @@ CREATE TABLE IF NOT EXISTS `manage` (
-- TABLE notify -- TABLE notify
-- --
CREATE TABLE IF NOT EXISTS `notify` ( CREATE TABLE IF NOT EXISTS `notify` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`hash` varchar(64) NOT NULL DEFAULT '' COMMENT '', `hash` varchar(64) NOT NULL DEFAULT '' COMMENT '',
`type` smallint unsigned NOT NULL DEFAULT 0 COMMENT '', `type` smallint unsigned NOT NULL DEFAULT 0 COMMENT '',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '',
@ -629,15 +629,15 @@ CREATE TABLE IF NOT EXISTS `notify` (
`photo` varchar(255) NOT NULL DEFAULT '' COMMENT '', `photo` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`msg` mediumtext COMMENT '', `msg` mediumtext COMMENT '',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
`link` varchar(255) NOT NULL DEFAULT '' COMMENT '', `link` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`iid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `iid` int unsigned NOT NULL DEFAULT 0 COMMENT 'item.id',
`parent` int unsigned NOT NULL DEFAULT 0 COMMENT '', `parent` int unsigned NOT NULL DEFAULT 0 COMMENT '',
`seen` boolean NOT NULL DEFAULT '0' COMMENT '', `seen` boolean NOT NULL DEFAULT '0' COMMENT '',
`verb` varchar(100) NOT NULL DEFAULT '' COMMENT '', `verb` varchar(100) NOT NULL DEFAULT '' COMMENT '',
`otype` varchar(10) NOT NULL DEFAULT '' COMMENT '', `otype` varchar(10) NOT NULL DEFAULT '' COMMENT '',
`name_cache` tinytext COMMENT '', `name_cache` tinytext COMMENT 'Cached bbcode parsing of name',
`msg_cache` mediumtext COMMENT '', `msg_cache` mediumtext COMMENT 'Cached bbcode parsing of msg',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `hash_uid` (`hash`,`uid`), INDEX `hash_uid` (`hash`,`uid`),
INDEX `seen_uid_date` (`seen`,`uid`,`date`), INDEX `seen_uid_date` (`seen`,`uid`,`date`),
@ -649,7 +649,7 @@ CREATE TABLE IF NOT EXISTS `notify` (
-- TABLE notify-threads -- TABLE notify-threads
-- --
CREATE TABLE IF NOT EXISTS `notify-threads` ( CREATE TABLE IF NOT EXISTS `notify-threads` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`notify-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `notify-id` int unsigned NOT NULL DEFAULT 0 COMMENT '',
`master-parent-item` int unsigned NOT NULL DEFAULT 0 COMMENT '', `master-parent-item` int unsigned NOT NULL DEFAULT 0 COMMENT '',
`parent-item` int unsigned NOT NULL DEFAULT 0 COMMENT '', `parent-item` int unsigned NOT NULL DEFAULT 0 COMMENT '',
@ -661,10 +661,10 @@ CREATE TABLE IF NOT EXISTS `notify-threads` (
-- TABLE oembed -- TABLE oembed
-- --
CREATE TABLE IF NOT EXISTS `oembed` ( CREATE TABLE IF NOT EXISTS `oembed` (
`url` varbinary(255) NOT NULL COMMENT '', `url` varbinary(255) NOT NULL COMMENT 'page url',
`maxwidth` mediumint unsigned NOT NULL COMMENT '', `maxwidth` mediumint unsigned NOT NULL COMMENT 'Maximum width passed to Oembed',
`content` mediumtext COMMENT '', `content` mediumtext COMMENT 'OEmbed data of the page',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of creation',
PRIMARY KEY(`url`,`maxwidth`), PRIMARY KEY(`url`,`maxwidth`),
INDEX `created` (`created`) INDEX `created` (`created`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
@ -673,11 +673,11 @@ CREATE TABLE IF NOT EXISTS `oembed` (
-- TABLE parsed_url -- TABLE parsed_url
-- --
CREATE TABLE IF NOT EXISTS `parsed_url` ( CREATE TABLE IF NOT EXISTS `parsed_url` (
`url` varbinary(255) NOT NULL COMMENT '', `url` varbinary(255) NOT NULL COMMENT 'page url',
`guessing` boolean NOT NULL DEFAULT '0' COMMENT '', `guessing` boolean NOT NULL DEFAULT '0' COMMENT 'is the \'guessing\' mode active?',
`oembed` boolean NOT NULL DEFAULT '0' COMMENT '', `oembed` boolean NOT NULL DEFAULT '0' COMMENT 'is the data the result of oembed?',
`content` mediumtext COMMENT '', `content` mediumtext COMMENT 'page data',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of creation',
PRIMARY KEY(`url`,`guessing`,`oembed`), PRIMARY KEY(`url`,`guessing`,`oembed`),
INDEX `created` (`created`) INDEX `created` (`created`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
@ -710,16 +710,16 @@ CREATE TABLE IF NOT EXISTS `pconfig` (
-- TABLE photo -- TABLE photo
-- --
CREATE TABLE IF NOT EXISTS `photo` ( CREATE TABLE IF NOT EXISTS `photo` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
`contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'contact.id',
`guid` char(16) NOT NULL DEFAULT '' COMMENT '', `guid` char(16) NOT NULL DEFAULT '' COMMENT 'A unique identifier for this photo',
`resource-id` char(32) NOT NULL DEFAULT '' COMMENT '', `resource-id` char(32) NOT NULL DEFAULT '' COMMENT '',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'creation date',
`edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'last edited date',
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '', `title` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`desc` text COMMENT '', `desc` text COMMENT '',
`album` varchar(255) NOT NULL DEFAULT '' COMMENT '', `album` varchar(255) NOT NULL DEFAULT '' COMMENT 'The name of the album to which the photo belongs',
`filename` varchar(255) NOT NULL DEFAULT '' COMMENT '', `filename` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`type` varchar(30) NOT NULL DEFAULT 'image/jpeg', `type` varchar(30) NOT NULL DEFAULT 'image/jpeg',
`height` smallint unsigned NOT NULL DEFAULT 0 COMMENT '', `height` smallint unsigned NOT NULL DEFAULT 0 COMMENT '',
@ -728,10 +728,10 @@ CREATE TABLE IF NOT EXISTS `photo` (
`data` mediumblob NOT NULL COMMENT '', `data` mediumblob NOT NULL COMMENT '',
`scale` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', `scale` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
`profile` boolean NOT NULL DEFAULT '0' COMMENT '', `profile` boolean NOT NULL DEFAULT '0' COMMENT '',
`allow_cid` mediumtext COMMENT '', `allow_cid` mediumtext COMMENT 'Access Control - list of allowed contact.id \'<19><78>\'',
`allow_gid` mediumtext COMMENT '', `allow_gid` mediumtext COMMENT 'Access Control - list of allowed groups',
`deny_cid` mediumtext COMMENT '', `deny_cid` mediumtext COMMENT 'Access Control - list of denied contact.id',
`deny_gid` mediumtext COMMENT '', `deny_gid` mediumtext COMMENT 'Access Control - list of denied groups',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `contactid` (`contact-id`), INDEX `contactid` (`contact-id`),
INDEX `uid_contactid` (`uid`,`contact-id`), INDEX `uid_contactid` (`uid`,`contact-id`),
@ -765,7 +765,7 @@ CREATE TABLE IF NOT EXISTS `poll` (
-- TABLE poll_result -- TABLE poll_result
-- --
CREATE TABLE IF NOT EXISTS `poll_result` ( CREATE TABLE IF NOT EXISTS `poll_result` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`poll_id` int unsigned NOT NULL DEFAULT 0, `poll_id` int unsigned NOT NULL DEFAULT 0,
`choice` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', `choice` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
@ -787,14 +787,14 @@ CREATE TABLE IF NOT EXISTS `process` (
-- TABLE profile -- TABLE profile
-- --
CREATE TABLE IF NOT EXISTS `profile` ( CREATE TABLE IF NOT EXISTS `profile` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
`profile-name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `profile-name` varchar(255) NOT NULL DEFAULT '' COMMENT 'Name of the profile',
`is-default` boolean NOT NULL DEFAULT '0' COMMENT '', `is-default` boolean NOT NULL DEFAULT '0' COMMENT 'Mark this profile as default profile',
`hide-friends` boolean NOT NULL DEFAULT '0' COMMENT '', `hide-friends` boolean NOT NULL DEFAULT '0' COMMENT 'Hide friend list from viewers of this profile',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`pdesc` varchar(255) NOT NULL DEFAULT '' COMMENT '', `pdesc` varchar(255) NOT NULL DEFAULT '' COMMENT 'Title or description',
`dob` varchar(32) NOT NULL DEFAULT '0000-00-00' COMMENT '', `dob` varchar(32) NOT NULL DEFAULT '0000-00-00' COMMENT 'Day of birth',
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '', `address` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`locality` varchar(255) NOT NULL DEFAULT '' COMMENT '', `locality` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`region` varchar(255) NOT NULL DEFAULT '' COMMENT '', `region` varchar(255) NOT NULL DEFAULT '' COMMENT '',
@ -827,8 +827,8 @@ CREATE TABLE IF NOT EXISTS `profile` (
`xmpp` varchar(255) NOT NULL DEFAULT '' COMMENT '', `xmpp` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`photo` varchar(255) NOT NULL DEFAULT '' COMMENT '', `photo` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`thumb` varchar(255) NOT NULL DEFAULT '' COMMENT '', `thumb` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`publish` boolean NOT NULL DEFAULT '0' COMMENT '', `publish` boolean NOT NULL DEFAULT '0' COMMENT 'publish default profile in local directory',
`net-publish` boolean NOT NULL DEFAULT '0' COMMENT '', `net-publish` boolean NOT NULL DEFAULT '0' COMMENT 'publish profile in global directory',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid_is-default` (`uid`,`is-default`) INDEX `uid_is-default` (`uid`,`is-default`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
@ -837,9 +837,9 @@ CREATE TABLE IF NOT EXISTS `profile` (
-- TABLE profile_check -- TABLE profile_check
-- --
CREATE TABLE IF NOT EXISTS `profile_check` ( CREATE TABLE IF NOT EXISTS `profile_check` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
`cid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'contact.id',
`dfrn_id` varchar(255) NOT NULL DEFAULT '' COMMENT '', `dfrn_id` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`sec` varchar(255) NOT NULL DEFAULT '' COMMENT '', `sec` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`expire` int unsigned NOT NULL DEFAULT 0 COMMENT '', `expire` int unsigned NOT NULL DEFAULT 0 COMMENT '',
@ -850,7 +850,7 @@ CREATE TABLE IF NOT EXISTS `profile_check` (
-- TABLE push_subscriber -- TABLE push_subscriber
-- --
CREATE TABLE IF NOT EXISTS `push_subscriber` ( CREATE TABLE IF NOT EXISTS `push_subscriber` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
`callback_url` varchar(255) NOT NULL DEFAULT '' COMMENT '', `callback_url` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`topic` varchar(255) NOT NULL DEFAULT '' COMMENT '', `topic` varchar(255) NOT NULL DEFAULT '' COMMENT '',
@ -868,7 +868,7 @@ CREATE TABLE IF NOT EXISTS `push_subscriber` (
-- TABLE queue -- TABLE queue
-- --
CREATE TABLE IF NOT EXISTS `queue` ( CREATE TABLE IF NOT EXISTS `queue` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'Message receiver', `cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'Message receiver',
`network` char(4) NOT NULL DEFAULT '' COMMENT 'Receiver\'s network', `network` char(4) NOT NULL DEFAULT '' COMMENT 'Receiver\'s network',
`guid` varchar(255) NOT NULL DEFAULT '' COMMENT 'Unique GUID of the message', `guid` varchar(255) NOT NULL DEFAULT '' COMMENT 'Unique GUID of the message',
@ -887,7 +887,7 @@ CREATE TABLE IF NOT EXISTS `queue` (
-- TABLE register -- TABLE register
-- --
CREATE TABLE IF NOT EXISTS `register` ( CREATE TABLE IF NOT EXISTS `register` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`hash` varchar(255) NOT NULL DEFAULT '' COMMENT '', `hash` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
@ -901,7 +901,7 @@ CREATE TABLE IF NOT EXISTS `register` (
-- TABLE search -- TABLE search
-- --
CREATE TABLE IF NOT EXISTS `search` ( CREATE TABLE IF NOT EXISTS `search` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
`term` varchar(255) NOT NULL DEFAULT '' COMMENT '', `term` varchar(255) NOT NULL DEFAULT '' COMMENT '',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
@ -912,7 +912,7 @@ CREATE TABLE IF NOT EXISTS `search` (
-- TABLE session -- TABLE session
-- --
CREATE TABLE IF NOT EXISTS `session` ( CREATE TABLE IF NOT EXISTS `session` (
`id` bigint unsigned NOT NULL auto_increment COMMENT '', `id` bigint unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`sid` varbinary(255) NOT NULL DEFAULT '' COMMENT '', `sid` varbinary(255) NOT NULL DEFAULT '' COMMENT '',
`data` text COMMENT '', `data` text COMMENT '',
`expire` int unsigned NOT NULL DEFAULT 0 COMMENT '', `expire` int unsigned NOT NULL DEFAULT 0 COMMENT '',
@ -925,8 +925,8 @@ CREATE TABLE IF NOT EXISTS `session` (
-- TABLE sign -- TABLE sign
-- --
CREATE TABLE IF NOT EXISTS `sign` ( CREATE TABLE IF NOT EXISTS `sign` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`iid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `iid` int unsigned NOT NULL DEFAULT 0 COMMENT 'item.id',
`signed_text` mediumtext COMMENT '', `signed_text` mediumtext COMMENT '',
`signature` text COMMENT '', `signature` text COMMENT '',
`signer` varchar(255) NOT NULL DEFAULT '' COMMENT '', `signer` varchar(255) NOT NULL DEFAULT '' COMMENT '',
@ -961,11 +961,11 @@ CREATE TABLE IF NOT EXISTS `term` (
-- TABLE thread -- TABLE thread
-- --
CREATE TABLE IF NOT EXISTS `thread` ( CREATE TABLE IF NOT EXISTS `thread` (
`iid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `iid` int unsigned NOT NULL DEFAULT 0 COMMENT 'sequential ID',
`uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id', `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
`contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT '',
`owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item owner',
`author-id` int unsigned NOT NULL DEFAULT 0 COMMENT '', `author-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item author',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
`commented` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `commented` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
@ -1017,50 +1017,50 @@ CREATE TABLE IF NOT EXISTS `tokens` (
-- TABLE user -- TABLE user
-- --
CREATE TABLE IF NOT EXISTS `user` ( CREATE TABLE IF NOT EXISTS `user` (
`uid` mediumint unsigned NOT NULL auto_increment COMMENT '', `uid` mediumint unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`parent-uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'The parent user that has full control about this user', `parent-uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'The parent user that has full control about this user',
`guid` varchar(64) NOT NULL DEFAULT '' COMMENT '', `guid` varchar(64) NOT NULL DEFAULT '' COMMENT 'A unique identifier for this user',
`username` varchar(255) NOT NULL DEFAULT '' COMMENT '', `username` varchar(255) NOT NULL DEFAULT '' COMMENT 'Name that this user is known by',
`password` varchar(255) NOT NULL DEFAULT '' COMMENT '', `password` varchar(255) NOT NULL DEFAULT '' COMMENT 'encrypted password',
`legacy_password` boolean NOT NULL DEFAULT '0' COMMENT 'Is the password hash double-hashed?', `legacy_password` boolean NOT NULL DEFAULT '0' COMMENT 'Is the password hash double-hashed?',
`nickname` varchar(255) NOT NULL DEFAULT '' COMMENT '', `nickname` varchar(255) NOT NULL DEFAULT '' COMMENT 'nick- and user name',
`email` varchar(255) NOT NULL DEFAULT '' COMMENT '', `email` varchar(255) NOT NULL DEFAULT '' COMMENT 'the users email address',
`openid` varchar(255) NOT NULL DEFAULT '' COMMENT '', `openid` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`timezone` varchar(128) NOT NULL DEFAULT '' COMMENT '', `timezone` varchar(128) NOT NULL DEFAULT '' COMMENT 'PHP-legal timezone',
`language` varchar(32) NOT NULL DEFAULT 'en' COMMENT '', `language` varchar(32) NOT NULL DEFAULT 'en' COMMENT 'default language',
`register_date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `register_date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp of registration',
`login_date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `login_date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp of last login',
`default-location` varchar(255) NOT NULL DEFAULT '' COMMENT '', `default-location` varchar(255) NOT NULL DEFAULT '' COMMENT 'Default for item.location',
`allow_location` boolean NOT NULL DEFAULT '0' COMMENT '', `allow_location` boolean NOT NULL DEFAULT '0' COMMENT '1 allows to display the location',
`theme` varchar(255) NOT NULL DEFAULT '' COMMENT '', `theme` varchar(255) NOT NULL DEFAULT '' COMMENT 'user theme preference',
`pubkey` text COMMENT '', `pubkey` text COMMENT 'RSA public key 4096 bit',
`prvkey` text COMMENT '', `prvkey` text COMMENT 'RSA private key 4096 bit',
`spubkey` text COMMENT '', `spubkey` text COMMENT '',
`sprvkey` text COMMENT '', `sprvkey` text COMMENT '',
`verified` boolean NOT NULL DEFAULT '0' COMMENT '', `verified` boolean NOT NULL DEFAULT '0' COMMENT 'user is verified through email',
`blocked` boolean NOT NULL DEFAULT '0' COMMENT '', `blocked` boolean NOT NULL DEFAULT '0' COMMENT '1 for user is blocked',
`blockwall` boolean NOT NULL DEFAULT '0' COMMENT '', `blockwall` boolean NOT NULL DEFAULT '0' COMMENT 'Prohibit contacts to post to the profile page of the user',
`hidewall` boolean NOT NULL DEFAULT '0' COMMENT '', `hidewall` boolean NOT NULL DEFAULT '0' COMMENT 'Hide profile details from unkown viewers',
`blocktags` boolean NOT NULL DEFAULT '0' COMMENT '', `blocktags` boolean NOT NULL DEFAULT '0' COMMENT 'Prohibit contacts to tag the post of this user',
`unkmail` boolean NOT NULL DEFAULT '0' COMMENT '', `unkmail` boolean NOT NULL DEFAULT '0' COMMENT 'Permit unknown people to send private mails to this user',
`cntunkmail` int unsigned NOT NULL DEFAULT 10 COMMENT '', `cntunkmail` int unsigned NOT NULL DEFAULT 10 COMMENT '',
`notify-flags` smallint unsigned NOT NULL DEFAULT 65535 COMMENT '', `notify-flags` smallint unsigned NOT NULL DEFAULT 65535 COMMENT 'email notification options',
`page-flags` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', `page-flags` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'page/profile type',
`account-type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '', `account-type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
`prvnets` boolean NOT NULL DEFAULT '0' COMMENT '', `prvnets` boolean NOT NULL DEFAULT '0' COMMENT '',
`pwdreset` varchar(255) COMMENT 'Password reset request token', `pwdreset` varchar(255) COMMENT 'Password reset request token',
`pwdreset_time` datetime COMMENT 'Timestamp of the last password reset request', `pwdreset_time` datetime COMMENT 'Timestamp of the last password reset request',
`maxreq` int unsigned NOT NULL DEFAULT 10 COMMENT '', `maxreq` int unsigned NOT NULL DEFAULT 10 COMMENT '',
`expire` int unsigned NOT NULL DEFAULT 0 COMMENT '', `expire` int unsigned NOT NULL DEFAULT 0 COMMENT '',
`account_removed` boolean NOT NULL DEFAULT '0' COMMENT '', `account_removed` boolean NOT NULL DEFAULT '0' COMMENT 'if 1 the account is removed',
`account_expired` boolean NOT NULL DEFAULT '0' COMMENT '', `account_expired` boolean NOT NULL DEFAULT '0' COMMENT '',
`account_expires_on` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `account_expires_on` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp when account expires and will be deleted',
`expire_notification_sent` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', `expire_notification_sent` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp of last warning of account expiration',
`def_gid` int unsigned NOT NULL DEFAULT 0 COMMENT '', `def_gid` int unsigned NOT NULL DEFAULT 0 COMMENT '',
`allow_cid` mediumtext COMMENT '', `allow_cid` mediumtext COMMENT 'default permission for this user',
`allow_gid` mediumtext COMMENT '', `allow_gid` mediumtext COMMENT 'default permission for this user',
`deny_cid` mediumtext COMMENT '', `deny_cid` mediumtext COMMENT 'default permission for this user',
`deny_gid` mediumtext COMMENT '', `deny_gid` mediumtext COMMENT 'default permission for this user',
`openidserver` text COMMENT '', `openidserver` text COMMENT '',
PRIMARY KEY(`uid`), PRIMARY KEY(`uid`),
INDEX `nickname` (`nickname`(32)) INDEX `nickname` (`nickname`(32))
@ -1070,7 +1070,7 @@ CREATE TABLE IF NOT EXISTS `user` (
-- TABLE userd -- TABLE userd
-- --
CREATE TABLE IF NOT EXISTS `userd` ( CREATE TABLE IF NOT EXISTS `userd` (
`id` int unsigned NOT NULL auto_increment COMMENT '', `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`username` varchar(255) NOT NULL COMMENT '', `username` varchar(255) NOT NULL COMMENT '',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `username` (`username`(32)) INDEX `username` (`username`(32))
@ -1096,7 +1096,7 @@ CREATE TABLE IF NOT EXISTS `workerqueue` (
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Creation date', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Creation date',
`pid` int unsigned NOT NULL DEFAULT 0 COMMENT 'Process id of the worker', `pid` int unsigned NOT NULL DEFAULT 0 COMMENT 'Process id of the worker',
`executed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Execution date', `executed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Execution date',
`done` boolean NOT NULL DEFAULT '0' COMMENT 'Marked when the task was done, will be deleted later', `done` boolean NOT NULL DEFAULT '0' COMMENT 'Marked 1 when the task was done - will be deleted later',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `pid` (`pid`), INDEX `pid` (`pid`),
INDEX `parameter` (`parameter`(64)), INDEX `parameter` (`parameter`(64)),

View file

@ -51,6 +51,7 @@ Friendica Documentation and Resources
* [Translate Friendica](help/translations) * [Translate Friendica](help/translations)
* [Use Composer](help/Composer) * [Use Composer](help/Composer)
* [Move classes to `src`](help/Developer-How-To-Move-Classes-to-src) * [Move classes to `src`](help/Developer-How-To-Move-Classes-to-src)
* [Run tests](help/Tests)
* Reference * Reference
* [Twitter/GNU Social API Functions](help/api) * [Twitter/GNU Social API Functions](help/api)
* [Code (Doxygen generated - sets cookies)](doc/html/) * [Code (Doxygen generated - sets cookies)](doc/html/)
@ -72,4 +73,3 @@ Friendica Documentation and Resources
* [Site/Version Info](friendica) * [Site/Version Info](friendica)
* [Friendica Credits](credits) * [Friendica Credits](credits)

18
doc/Tests.md Normal file
View file

@ -0,0 +1,18 @@
# Themes
* [Home](help)
You can run unit tests with [PHPUnit](https://phpunit.de/):
```bash
phpunit
```
Some tests require access to a MySQL database.
You can specify the database credentials in environment variables:
```bash
USER=database_user PASS=database_password DB=database_name phpunit
```
**Warning**: This will empty all the tables! Never use this on a production database.

View file

@ -56,6 +56,7 @@ Friendica - Dokumentation und Ressourcen
* [Code-Referenz (mit doxygen generiert - setzt Cookies)](doc/html/) * [Code-Referenz (mit doxygen generiert - setzt Cookies)](doc/html/)
* [Twitter/GNU Social API Functions](help/api) (EN) * [Twitter/GNU Social API Functions](help/api) (EN)
* [Translation of Friendica](help/translations) (EN) * [Translation of Friendica](help/translations) (EN)
* [Run tests](help/Tests) (EN)
**Externe Ressourcen** **Externe Ressourcen**
@ -72,4 +73,3 @@ Friendica - Dokumentation und Ressourcen
* [Seite/Friendica-Version](friendica) * [Seite/Friendica-Version](friendica)
* [Mitwirkenden bei Friendica](credits) * [Mitwirkenden bei Friendica](credits)

View file

@ -344,6 +344,14 @@ Mit den folgenden Einstellungen kannst du die Zugriffsdaten für den Datenbank S
$db_pass = 'db_password'; $db_pass = 'db_password';
$db_data = 'database_name'; $db_data = 'database_name';
Sollten alle der folgenden Environment-Variablen gesetzt sein, wird Friendica diese anstatt der vorher konfigurierten Werte nutzen.
MYSQL_HOST
MYSQL_PORT
MYSQL_USERNAME
MYSQL_PASSWORD
MYSQL_DATABASE
## Administratoren ## Administratoren
Du kannst einen, oder mehrere Accounts, zu Administratoren machen. Du kannst einen, oder mehrere Accounts, zu Administratoren machen.

View file

@ -124,3 +124,11 @@ The configuration variables db_host, db_user, db_pass and db_data are holding yo
If you need to specify a port to access the database, you can do so by appending ":portnumber" to the db_host variable. If you need to specify a port to access the database, you can do so by appending ":portnumber" to the db_host variable.
$db_host = 'your.mysqlhost.com:123456'; $db_host = 'your.mysqlhost.com:123456';
If all of the following environment variables are set, Friendica will use them instead of the previously configured variables for the db:
MYSQL_HOST
MYSQL_PORT
MYSQL_USERNAME
MYSQL_PASSWORD
MYSQL_DATABASE

View file

@ -54,7 +54,7 @@ define('API_METHOD_POST', 'POST,PUT');
define('API_METHOD_DELETE', 'POST,DELETE'); define('API_METHOD_DELETE', 'POST,DELETE');
$API = []; $API = [];
$called_api = null; $called_api = [];
/** /**
* It is not sufficient to use local_user() to check whether someone is allowed to use the API, * It is not sufficient to use local_user() to check whether someone is allowed to use the API,
@ -935,7 +935,7 @@ function api_reformat_xml(&$item, &$key)
* *
* @return string The XML data * @return string The XML data
*/ */
function api_create_xml($data, $root_element) function api_create_xml(array $data, $root_element)
{ {
$childname = key($data); $childname = key($data);
$data2 = array_pop($data); $data2 = array_pop($data);
@ -960,7 +960,7 @@ function api_create_xml($data, $root_element)
$i = 1; $i = 1;
foreach ($data2 as $item) { foreach ($data2 as $item) {
$data4[$i++.":".$childname] = $item; $data4[$i++ . ":" . $childname] = $item;
} }
$data2 = $data4; $data2 = $data4;
@ -2216,7 +2216,7 @@ function api_statuses_repeat($type)
} }
// this should output the last post (the one we just posted). // this should output the last post (the one we just posted).
$called_api = null; $called_api = [];
return api_status_show($type); return api_status_show($type);
} }
@ -2732,7 +2732,7 @@ function api_convert_item($item)
* *
* @param string $body * @param string $body
* *
* @return array|false * @return array
*/ */
function api_get_attachments(&$body) function api_get_attachments(&$body)
{ {
@ -2743,7 +2743,7 @@ function api_get_attachments(&$body)
$ret = preg_match_all("/\[img\]([$URLSearchString]*)\[\/img\]/ism", $text, $images); $ret = preg_match_all("/\[img\]([$URLSearchString]*)\[\/img\]/ism", $text, $images);
if (!$ret) { if (!$ret) {
return false; return [];
} }
$attachments = []; $attachments = [];
@ -4395,7 +4395,6 @@ function api_fr_photo_create_update($type)
throw new InternalServerErrorException("unknown error - this error on uploading or updating a photo should never happen"); throw new InternalServerErrorException("unknown error - this error on uploading or updating a photo should never happen");
} }
/** /**
* @brief delete a single photo from the database through api * @brief delete a single photo from the database through api
* *
@ -4534,6 +4533,7 @@ function api_account_update_profile_image($type)
} else { } else {
throw new InternalServerErrorException('Unsupported filetype'); throw new InternalServerErrorException('Unsupported filetype');
} }
// change specified profile or all profiles to the new resource-id // change specified profile or all profiles to the new resource-id
if ($is_default_profile) { if ($is_default_profile) {
$condition = ["`profile` AND `resource-id` != ? AND `uid` = ?", $data['photo']['id'], api_user()]; $condition = ["`profile` AND `resource-id` != ? AND `uid` = ?", $data['photo']['id'], api_user()];
@ -4547,7 +4547,6 @@ function api_account_update_profile_image($type)
Contact::updateSelfFromUserID(api_user(), true); Contact::updateSelfFromUserID(api_user(), true);
// Update global directory in background // Update global directory in background
//$user = api_get_user(get_app());
$url = System::baseUrl() . '/profile/' . get_app()->user['nickname']; $url = System::baseUrl() . '/profile/' . get_app()->user['nickname'];
if ($url && strlen(Config::get('system', 'directory'))) { if ($url && strlen(Config::get('system', 'directory'))) {
Worker::add(PRIORITY_LOW, "Directory", $url); Worker::add(PRIORITY_LOW, "Directory", $url);
@ -5289,27 +5288,27 @@ function api_in_reply_to($item)
/** /**
* *
* @param string $Text * @param string $text
* *
* @return string * @return string
*/ */
function api_clean_plain_items($Text) function api_clean_plain_items($text)
{ {
$include_entities = strtolower(x($_REQUEST, 'include_entities') ? $_REQUEST['include_entities'] : "false"); $include_entities = strtolower(x($_REQUEST, 'include_entities') ? $_REQUEST['include_entities'] : "false");
$Text = BBCode::cleanPictureLinks($Text); $text = BBCode::cleanPictureLinks($text);
$URLSearchString = "^\[\]"; $URLSearchString = "^\[\]";
$Text = preg_replace("/([!#@])\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '$1$3', $Text); $text = preg_replace("/([!#@])\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '$1$3', $text);
if ($include_entities == "true") { if ($include_entities == "true") {
$Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[url=$1]$1[/url]', $Text); $text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[url=$1]$1[/url]', $text);
} }
// Simplify "attachment" element // Simplify "attachment" element
$Text = api_clean_attachments($Text); $text = api_clean_attachments($text);
return($Text); return $text;
} }
/** /**

View file

@ -116,7 +116,7 @@ function localize_item(&$item) {
$item['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $item['contact-id']); $item['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $item['contact-id']);
} }
/// @Separted ??? /// @TODO Separted ???
$xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">"; $xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
if (activity_match($item['verb'], ACTIVITY_LIKE) if (activity_match($item['verb'], ACTIVITY_LIKE)
|| activity_match($item['verb'], ACTIVITY_DISLIKE) || activity_match($item['verb'], ACTIVITY_DISLIKE)
@ -162,22 +162,19 @@ function localize_item(&$item) {
if (activity_match($item['verb'], ACTIVITY_LIKE)) { if (activity_match($item['verb'], ACTIVITY_LIKE)) {
$bodyverb = L10n::t('%1$s likes %2$s\'s %3$s'); $bodyverb = L10n::t('%1$s likes %2$s\'s %3$s');
} } elseif (activity_match($item['verb'], ACTIVITY_DISLIKE)) {
elseif (activity_match($item['verb'], ACTIVITY_DISLIKE)) {
$bodyverb = L10n::t('%1$s doesn\'t like %2$s\'s %3$s'); $bodyverb = L10n::t('%1$s doesn\'t like %2$s\'s %3$s');
} } elseif (activity_match($item['verb'], ACTIVITY_ATTEND)) {
elseif (activity_match($item['verb'], ACTIVITY_ATTEND)) {
$bodyverb = L10n::t('%1$s attends %2$s\'s %3$s'); $bodyverb = L10n::t('%1$s attends %2$s\'s %3$s');
} } elseif (activity_match($item['verb'], ACTIVITY_ATTENDNO)) {
elseif (activity_match($item['verb'], ACTIVITY_ATTENDNO)) {
$bodyverb = L10n::t('%1$s doesn\'t attend %2$s\'s %3$s'); $bodyverb = L10n::t('%1$s doesn\'t attend %2$s\'s %3$s');
} } elseif (activity_match($item['verb'], ACTIVITY_ATTENDMAYBE)) {
elseif (activity_match($item['verb'], ACTIVITY_ATTENDMAYBE)) {
$bodyverb = L10n::t('%1$s attends maybe %2$s\'s %3$s'); $bodyverb = L10n::t('%1$s attends maybe %2$s\'s %3$s');
} }
$item['body'] = sprintf($bodyverb, $author, $objauthor, $plink);
$item['body'] = sprintf($bodyverb, $author, $objauthor, $plink);
} }
if (activity_match($item['verb'], ACTIVITY_FRIEND)) { if (activity_match($item['verb'], ACTIVITY_FRIEND)) {
if ($item['object-type']=="" || $item['object-type']!== ACTIVITY_OBJ_PERSON) return; if ($item['object-type']=="" || $item['object-type']!== ACTIVITY_OBJ_PERSON) return;
@ -304,8 +301,8 @@ function localize_item(&$item) {
$item['body'] = L10n::t('%1$s tagged %2$s\'s %3$s with %4$s', $author, $objauthor, $plink, $tag ); $item['body'] = L10n::t('%1$s tagged %2$s\'s %3$s with %4$s', $author, $objauthor, $plink, $tag );
} }
if (activity_match($item['verb'], ACTIVITY_FAVORITE)) {
if (activity_match($item['verb'], ACTIVITY_FAVORITE)) {
if ($item['object-type'] == "") { if ($item['object-type'] == "") {
return; return;
} }
@ -385,11 +382,10 @@ function visible_activity($item) {
} }
} }
if (activity_match($item['verb'], ACTIVITY_FOLLOW) && $item['object-type'] === ACTIVITY_OBJ_NOTE) { // @TODO below if() block can be rewritten to a single line: $isVisible = allConditionsHere;
if (!($item['self'] && ($item['uid'] == local_user()))) { if (activity_match($item['verb'], ACTIVITY_FOLLOW) && $item['object-type'] === ACTIVITY_OBJ_NOTE && empty($item['self']) && $item['uid'] == local_user()) {
return false; return false;
} }
}
return true; return true;
} }
@ -1081,7 +1077,7 @@ function builtin_activity_puller($item, &$conv_responses) {
$url = '<a href="'. $url . '"'. $sparkle .'>' . htmlentities($item['author-name']) . '</a>'; $url = '<a href="'. $url . '"'. $sparkle .'>' . htmlentities($item['author-name']) . '</a>';
if (!$item['thr-parent']) { if (!x($item, 'thr-parent')) {
$item['thr-parent'] = $item['parent-uri']; $item['thr-parent'] = $item['parent-uri'];
} }
@ -1569,19 +1565,17 @@ function sort_thr_commented(array $a, array $b)
return strcmp($b['commented'], $a['commented']); return strcmp($b['commented'], $a['commented']);
} }
/// @TODO Add type-hint function render_location_dummy(array $item) {
function render_location_dummy($item) { if (x($item, 'location') && !empty($item['location'])) {
if ($item['location'] != "") {
return $item['location']; return $item['location'];
} }
if ($item['coord'] != "") { if (x($item, 'coord') && !empty($item['coord'])) {
return $item['coord']; return $item['coord'];
} }
} }
/// @TODO Add type-hint function get_responses(array $conv_responses, array $response_verbs, $ob, array $item) {
function get_responses($conv_responses, $response_verbs, $ob, $item) {
$ret = []; $ret = [];
foreach ($response_verbs as $v) { foreach ($response_verbs as $v) {
$ret[$v] = []; $ret[$v] = [];

View file

@ -92,6 +92,15 @@ class dba {
return self::$connected; return self::$connected;
} }
/**
* Return the database object.
* @return PDO|mysqli
*/
public static function get_db()
{
return self::$db;
}
/** /**
* @brief Returns the MySQL server version string * @brief Returns the MySQL server version string
* *

View file

@ -274,6 +274,7 @@ function consume_feed($xml, $importer, $contact, &$hub, $datedir = 0, $pass = 0)
function subscribe_to_hub($url, $importer, $contact, $hubmode = 'subscribe') { function subscribe_to_hub($url, $importer, $contact, $hubmode = 'subscribe') {
$a = get_app(); $a = get_app();
$r = null;
if (is_array($importer)) { if (is_array($importer)) {
$r = q("SELECT `nickname` FROM `user` WHERE `uid` = %d LIMIT 1", $r = q("SELECT `nickname` FROM `user` WHERE `uid` = %d LIMIT 1",

View file

@ -254,6 +254,7 @@ function can_write_wall($owner)
return false; return false;
} }
/// @TODO $groups should be array
function permissions_sql($owner_id, $remote_verified = false, $groups = null) function permissions_sql($owner_id, $remote_verified = false, $groups = null)
{ {
$local_user = local_user(); $local_user = local_user();
@ -275,6 +276,13 @@ function permissions_sql($owner_id, $remote_verified = false, $groups = null)
*/ */
if ($local_user && $local_user == $owner_id) { if ($local_user && $local_user == $owner_id) {
$sql = ''; $sql = '';
/**
* Authenticated visitor. Unless pre-verified,
* check that the contact belongs to this $owner_id
* and load the groups the visitor belongs to.
* If pre-verified, the caller is expected to have already
* done this and passed the groups into this function.
*/
} elseif ($remote_user) { } elseif ($remote_user) {
/* /*
* Authenticated visitor. Unless pre-verified, * Authenticated visitor. Unless pre-verified,
@ -298,10 +306,11 @@ function permissions_sql($owner_id, $remote_verified = false, $groups = null)
if ($remote_verified) { if ($remote_verified) {
$gs = '<<>>'; // should be impossible to match $gs = '<<>>'; // should be impossible to match
if (is_array($groups) && count($groups)) { if (is_array($groups)) {
foreach ($groups as $g) foreach ($groups as $g) {
$gs .= '|<' . intval($g) . '>'; $gs .= '|<' . intval($g) . '>';
} }
}
$sql = sprintf( $sql = sprintf(
" AND ( NOT (deny_cid REGEXP '<%d>' OR deny_gid REGEXP '%s') " AND ( NOT (deny_cid REGEXP '<%d>' OR deny_gid REGEXP '%s')

View file

@ -152,7 +152,7 @@ function autoname($len) {
'nd','ng','nk','nt','rn','rp','rt']; 'nd','ng','nk','nt','rn','rp','rt'];
$noend = ['bl', 'br', 'cl','cr','dr','fl','fr','gl','gr', $noend = ['bl', 'br', 'cl','cr','dr','fl','fr','gl','gr',
'kh', 'kl','kr','mn','pl','pr','rh','tr','qu','wh']; 'kh', 'kl','kr','mn','pl','pr','rh','tr','qu','wh','q'];
$start = mt_rand(0,2); $start = mt_rand(0,2);
if ($start == 0) { if ($start == 0) {
@ -178,14 +178,13 @@ function autoname($len) {
$word = substr($word,0,$len); $word = substr($word,0,$len);
foreach ($noend as $noe) { foreach ($noend as $noe) {
if ((strlen($word) > 2) && (substr($word, -2) == $noe)) { $noelen = strlen($noe);
$word = substr($word, 0, -1); if ((strlen($word) > $noelen) && (substr($word, -$noelen) == $noe)) {
$word = autoname($len);
break; break;
} }
} }
if (substr($word, -1) == 'q') {
$word = substr($word, 0, -1);
}
return $word; return $word;
} }
@ -453,7 +452,7 @@ function perms2str($p) {
if (is_array($p)) { if (is_array($p)) {
$tmp = $p; $tmp = $p;
} else { } else {
$tmp = explode(',',$p); $tmp = explode(',', $p);
} }
if (is_array($tmp)) { if (is_array($tmp)) {
@ -1661,10 +1660,11 @@ function bb_translate_video($s) {
$r = preg_match_all("/\[video\](.*?)\[\/video\]/ism",$s,$matches,PREG_SET_ORDER); $r = preg_match_all("/\[video\](.*?)\[\/video\]/ism",$s,$matches,PREG_SET_ORDER);
if ($r) { if ($r) {
foreach ($matches as $mtch) { foreach ($matches as $mtch) {
if ((stristr($mtch[1],'youtube')) || (stristr($mtch[1],'youtu.be'))) if ((stristr($mtch[1], 'youtube')) || (stristr($mtch[1], 'youtu.be'))) {
$s = str_replace($mtch[0],'[youtube]' . $mtch[1] . '[/youtube]',$s); $s = str_replace($mtch[0], '[youtube]' . $mtch[1] . '[/youtube]', $s);
elseif (stristr($mtch[1],'vimeo')) } elseif (stristr($mtch[1], 'vimeo')) {
$s = str_replace($mtch[0],'[vimeo]' . $mtch[1] . '[/vimeo]',$s); $s = str_replace($mtch[0], '[vimeo]' . $mtch[1] . '[/vimeo]', $s);
}
} }
} }
return $s; return $s;
@ -1782,7 +1782,7 @@ function file_tag_file_query($table,$s,$type = 'file') {
} }
// ex. given music,video return <music><video> or [music][video] // ex. given music,video return <music><video> or [music][video]
function file_tag_list_to_file($list,$type = 'file') { function file_tag_list_to_file($list, $type = 'file') {
$tag_list = ''; $tag_list = '';
if (strlen($list)) { if (strlen($list)) {
$list_array = explode(",",$list); $list_array = explode(",",$list);
@ -1804,7 +1804,7 @@ function file_tag_list_to_file($list,$type = 'file') {
} }
// ex. given <music><video>[friends], return music,video or friends // ex. given <music><video>[friends], return music,video or friends
function file_tag_file_to_list($file,$type = 'file') { function file_tag_file_to_list($file, $type = 'file') {
$matches = false; $matches = false;
$list = ''; $list = '';
if ($type == 'file') { if ($type == 'file') {
@ -1830,8 +1830,7 @@ function file_tag_update_pconfig($uid, $file_old, $file_new, $type = 'file') {
if (!intval($uid)) { if (!intval($uid)) {
return false; return false;
} } elseif ($file_old == $file_new) {
if ($file_old == $file_new) {
return true; return true;
} }
@ -1854,9 +1853,10 @@ function file_tag_update_pconfig($uid, $file_old, $file_new, $type = 'file') {
$check_new_tags = explode(",",file_tag_file_to_list($file_new,$type)); $check_new_tags = explode(",",file_tag_file_to_list($file_new,$type));
foreach ($check_new_tags as $tag) { foreach ($check_new_tags as $tag) {
if (! stristr($saved,$lbracket . file_tag_encode($tag) . $rbracket)) if (! stristr($saved,$lbracket . file_tag_encode($tag) . $rbracket)) {
$new_tags[] = $tag; $new_tags[] = $tag;
} }
}
$filetags_updated .= file_tag_list_to_file(implode(",",$new_tags),$type); $filetags_updated .= file_tag_list_to_file(implode(",",$new_tags),$type);
@ -1865,9 +1865,10 @@ function file_tag_update_pconfig($uid, $file_old, $file_new, $type = 'file') {
$check_deleted_tags = explode(",",file_tag_file_to_list($file_old,$type)); $check_deleted_tags = explode(",",file_tag_file_to_list($file_old,$type));
foreach ($check_deleted_tags as $tag) { foreach ($check_deleted_tags as $tag) {
if (! stristr($file_new,$lbracket . file_tag_encode($tag) . $rbracket)) if (! stristr($file_new,$lbracket . file_tag_encode($tag) . $rbracket)) {
$deleted_tags[] = $tag; $deleted_tags[] = $tag;
} }
}
foreach ($deleted_tags as $key => $tag) { foreach ($deleted_tags as $key => $tag) {
$r = q("SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d", $r = q("SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d",
@ -1980,17 +1981,22 @@ function protect_sprintf($s) {
return str_replace('%', '%%', $s); return str_replace('%', '%%', $s);
} }
/// @TODO Rewrite this
function is_a_date_arg($s) { function is_a_date_arg($s) {
$i = intval($s); $i = intval($s);
if ($i > 1900) { if ($i > 1900) {
$y = date('Y'); $y = date('Y');
if ($i <= $y + 1 && strpos($s, '-') == 4) { if ($i <= $y + 1 && strpos($s, '-') == 4) {
$m = intval(substr($s,5)); $m = intval(substr($s, 5));
if ($m > 0 && $m <= 12)
if ($m > 0 && $m <= 12) {
return true; return true;
} }
} }
}
return false; return false;
} }
@ -2008,6 +2014,7 @@ function deindent($text, $chr = "[\t ]", $count = NULL) {
preg_match("|^" . $chr . "*|", $lines[$k], $m); preg_match("|^" . $chr . "*|", $lines[$k], $m);
$count = strlen($m[0]); $count = strlen($m[0]);
} }
for ($k = 0; $k < count($lines); $k++) { for ($k = 0; $k < count($lines); $k++) {
$lines[$k] = preg_replace("|^" . $chr . "{" . $count . "}|", "", $lines[$k]); $lines[$k] = preg_replace("|^" . $chr . "{" . $count . "}|", "", $lines[$k]);
} }

View file

@ -65,7 +65,7 @@ function admin_post(App $a)
case 'addons': case 'addons':
if ($a->argc > 2 && if ($a->argc > 2 &&
is_file("addon/" . $a->argv[2] . "/" . $a->argv[2] . ".php")) { is_file("addon/" . $a->argv[2] . "/" . $a->argv[2] . ".php")) {
@include_once("addon/" . $a->argv[2] . "/" . $a->argv[2] . ".php"); include_once "addon/" . $a->argv[2] . "/" . $a->argv[2] . ".php";
if (function_exists($a->argv[2] . '_addon_admin_post')) { if (function_exists($a->argv[2] . '_addon_admin_post')) {
$func = $a->argv[2] . '_addon_admin_post'; $func = $a->argv[2] . '_addon_admin_post';
$func($a); $func($a);
@ -916,6 +916,7 @@ function admin_page_site_post(App $a)
$upds = implode(", ", $upd); $upds = implode(", ", $upd);
$r = q("UPDATE %s SET %s;", $table_name, $upds); $r = q("UPDATE %s SET %s;", $table_name, $upds);
if (!DBM::is_result($r)) { if (!DBM::is_result($r)) {
notice("Failed updating '$table_name': " . dba::errorMessage()); notice("Failed updating '$table_name': " . dba::errorMessage());
goaway('admin/site'); goaway('admin/site');
@ -1297,15 +1298,18 @@ function admin_page_site(App $a)
$user_names = []; $user_names = [];
$user_names['---'] = L10n::t('Multi user instance'); $user_names['---'] = L10n::t('Multi user instance');
$users = q("SELECT `username`, `nickname` FROM `user`"); $users = q("SELECT `username`, `nickname` FROM `user`");
foreach ($users as $user) { foreach ($users as $user) {
$user_names[$user['nickname']] = $user['username']; $user_names[$user['nickname']] = $user['username'];
} }
/* Banner */ /* Banner */
$banner = Config::get('system', 'banner'); $banner = Config::get('system', 'banner');
if ($banner == false) { if ($banner == false) {
$banner = '<a href="https://friendi.ca"><img id="logo-img" src="images/friendica-32.png" alt="logo" /></a><span id="logo-text"><a href="https://friendi.ca">Friendica</a></span>'; $banner = '<a href="https://friendi.ca"><img id="logo-img" src="images/friendica-32.png" alt="logo" /></a><span id="logo-text"><a href="https://friendi.ca">Friendica</a></span>';
} }
$banner = htmlspecialchars($banner); $banner = htmlspecialchars($banner);
$info = Config::get('config', 'info'); $info = Config::get('config', 'info');
$info = htmlspecialchars($info); $info = htmlspecialchars($info);
@ -1437,7 +1441,7 @@ function admin_page_site(App $a)
'$max_comments' => ['max_comments', L10n::t("Maximum numbers of comments per post"), Config::get('system','max_comments'), L10n::t("How much comments should be shown for each post? Default value is 100.")], '$max_comments' => ['max_comments', L10n::t("Maximum numbers of comments per post"), Config::get('system','max_comments'), L10n::t("How much comments should be shown for each post? Default value is 100.")],
'$temppath' => ['temppath', L10n::t("Temp path"), Config::get('system','temppath'), L10n::t("If you have a restricted system where the webserver can't access the system temp path, enter another path here.")], '$temppath' => ['temppath', L10n::t("Temp path"), Config::get('system','temppath'), L10n::t("If you have a restricted system where the webserver can't access the system temp path, enter another path here.")],
'$basepath' => ['basepath', L10n::t("Base path to installation"), Config::get('system','basepath'), L10n::t("If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot.")], '$basepath' => ['basepath', L10n::t("Base path to installation"), Config::get('system','basepath'), L10n::t("If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot.")],
'$proxy_disabled' => ['proxy_disabled', L10n::t("Disable picture proxy"), Config::get('system','proxy_disabled'), L10n::t("The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith.")], '$proxy_disabled' => ['proxy_disabled', L10n::t("Disable picture proxy"), Config::get('system','proxy_disabled'), L10n::t("The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwidth.")],
'$only_tag_search' => ['only_tag_search', L10n::t("Only search in tags"), Config::get('system','only_tag_search'), L10n::t("On large systems the text search can slow down the system extremely.")], '$only_tag_search' => ['only_tag_search', L10n::t("Only search in tags"), Config::get('system','only_tag_search'), L10n::t("On large systems the text search can slow down the system extremely.")],
'$relocate_url' => ['relocate_url', L10n::t("New base url"), System::baseUrl(), L10n::t("Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users.")], '$relocate_url' => ['relocate_url', L10n::t("New base url"), System::baseUrl(), L10n::t("Change base url for this server. Sends relocate message to all Friendica and Diaspora* contacts of all users.")],
@ -1501,9 +1505,12 @@ function admin_page_dbsync(App $a)
if ($a->argc > 2 && intval($a->argv[2])) { if ($a->argc > 2 && intval($a->argv[2])) {
require_once 'update.php'; require_once 'update.php';
$func = 'update_' . intval($a->argv[2]); $func = 'update_' . intval($a->argv[2]);
if (function_exists($func)) { if (function_exists($func)) {
$retval = $func(); $retval = $func();
if ($retval === UPDATE_FAILED) { if ($retval === UPDATE_FAILED) {
$o .= L10n::t("Executing %s failed with error: %s", $func, $retval); $o .= L10n::t("Executing %s failed with error: %s", $func, $retval);
} elseif ($retval === UPDATE_SUCCESS) { } elseif ($retval === UPDATE_SUCCESS) {
@ -1516,11 +1523,13 @@ function admin_page_dbsync(App $a)
$o .= L10n::t('There was no additional update function %s that needed to be called.', $func) . "<br />"; $o .= L10n::t('There was no additional update function %s that needed to be called.', $func) . "<br />";
Config::set('database', $func, 'success'); Config::set('database', $func, 'success');
} }
return $o; return $o;
} }
$failed = []; $failed = [];
$r = q("SELECT `k`, `v` FROM `config` WHERE `cat` = 'database' "); $r = q("SELECT `k`, `v` FROM `config` WHERE `cat` = 'database' ");
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {
$upd = intval(substr($rr['k'], 7)); $upd = intval(substr($rr['k'], 7));
@ -1530,6 +1539,7 @@ function admin_page_dbsync(App $a)
$failed[] = $upd; $failed[] = $upd;
} }
} }
if (!count($failed)) { if (!count($failed)) {
$o = replace_macros(get_markup_template('structure_check.tpl'), [ $o = replace_macros(get_markup_template('structure_check.tpl'), [
'$base' => System::baseUrl(true), '$base' => System::baseUrl(true),
@ -1764,8 +1774,8 @@ function admin_page_users(App $a)
$e['page-flags-raw'] = $e['page-flags']; $e['page-flags-raw'] = $e['page-flags'];
$e['page-flags'] = $page_types[$e['page-flags']]; $e['page-flags'] = $page_types[$e['page-flags']];
$e['account-type-raw'] = ($e['page_flags_raw']==0) ? $e['account-type'] : -1; $e['account-type-raw'] = ($e['page_flags_raw'] == 0) ? $e['account-type'] : -1;
$e['account-type'] = ($e['page_flags_raw']==0) ? $account_types[$e['account-type']] : ""; $e['account-type'] = ($e['page_flags_raw'] == 0) ? $account_types[$e['account-type']] : "";
$e['register_date'] = Temporal::getRelativeDate($e['register_date']); $e['register_date'] = Temporal::getRelativeDate($e['register_date']);
$e['login_date'] = Temporal::getRelativeDate($e['login_date']); $e['login_date'] = Temporal::getRelativeDate($e['login_date']);
@ -1916,7 +1926,7 @@ function admin_page_addons(App $a)
$admin_form = ""; $admin_form = "";
if (in_array($addon, $a->addons_admin)) { if (in_array($addon, $a->addons_admin)) {
@require_once("addon/$addon/$addon.php"); require_once "addon/$addon/$addon.php";
$func = $addon . '_addon_admin'; $func = $addon . '_addon_admin';
$func($a, $admin_form); $func($a, $admin_form);
} }
@ -2157,6 +2167,7 @@ function admin_page_themes(App $a)
} }
$readme = null; $readme = null;
if (is_file("view/theme/$theme/README.md")) { if (is_file("view/theme/$theme/README.md")) {
$readme = Markdown::convert(file_get_contents("view/theme/$theme/README.md"), false); $readme = Markdown::convert(file_get_contents("view/theme/$theme/README.md"), false);
} elseif (is_file("view/theme/$theme/README")) { } elseif (is_file("view/theme/$theme/README")) {

View file

@ -433,6 +433,7 @@ function events_content(App $a) {
if (x($_REQUEST, 'location')) {$orig_event['location'] = $_REQUEST['location'];} if (x($_REQUEST, 'location')) {$orig_event['location'] = $_REQUEST['location'];}
if (x($_REQUEST, 'start')) {$orig_event['start'] = $_REQUEST['start'];} if (x($_REQUEST, 'start')) {$orig_event['start'] = $_REQUEST['start'];}
if (x($_REQUEST, 'finish')) {$orig_event['finish'] = $_REQUEST['finish'];} if (x($_REQUEST, 'finish')) {$orig_event['finish'] = $_REQUEST['finish'];}
if (x($_REQUEST,'finish')) $orig_event['finish'] = $_REQUEST['finish'];
$n_checked = ((x($orig_event) && $orig_event['nofinish']) ? ' checked="checked" ' : ''); $n_checked = ((x($orig_event) && $orig_event['nofinish']) ? ' checked="checked" ' : '');
$a_checked = ((x($orig_event) && $orig_event['adjust']) ? ' checked="checked" ' : ''); $a_checked = ((x($orig_event) && $orig_event['adjust']) ? ' checked="checked" ' : '');

View file

@ -1231,9 +1231,11 @@ function photos_content(App $a)
$prevlink = ''; $prevlink = '';
$nextlink = ''; $nextlink = '';
/// @todo This query is totally bad, the whole functionality has to be changed /*
// The query leads to a really intense used index. * @todo This query is totally bad, the whole functionality has to be changed
// By now we hide it if someone wants to. * The query leads to a really intense used index.
* By now we hide it if someone wants to.
*/
if (!Config::get('system', 'no_count', false)) { if (!Config::get('system', 'no_count', false)) {
$order_field = defaults($_GET, 'order', ''); $order_field = defaults($_GET, 'order', '');
if ($order_field === 'posted') { if ($order_field === 'posted') {
@ -1268,8 +1270,10 @@ function photos_content(App $a)
} }
} }
if (count($ph) == 1) if (count($ph) == 1) {
$hires = $lores = $ph[0]; $hires = $lores = $ph[0];
}
if (count($ph) > 1) { if (count($ph) > 1) {
if ($ph[1]['scale'] == 2) { if ($ph[1]['scale'] == 2) {
// original is 640 or less, we can display it directly // original is 640 or less, we can display it directly
@ -1281,6 +1285,7 @@ function photos_content(App $a)
} }
$album_link = 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']); $album_link = 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']);
$tools = null; $tools = null;
$lock = null; $lock = null;
@ -1307,8 +1312,9 @@ function photos_content(App $a)
]); ]);
} }
if ($prevlink) if ($prevlink) {
$prevlink = [$prevlink, '<div class="icon prev"></div>'] ; $prevlink = [$prevlink, '<div class="icon prev"></div>'] ;
}
$photo = [ $photo = [
'href' => 'photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.' . $phototypes[$hires['type']], 'href' => 'photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.' . $phototypes[$hires['type']],
@ -1669,8 +1675,9 @@ function photos_content(App $a)
$twist = false; $twist = false;
foreach ($r as $rr) { foreach ($r as $rr) {
//hide profile photos to others //hide profile photos to others
if (!$is_owner && !remote_user() && ($rr['album'] == L10n::t('Profile Photos'))) if (!$is_owner && !remote_user() && ($rr['album'] == L10n::t('Profile Photos'))) {
continue; continue;
}
$twist = !$twist; $twist = !$twist;

View file

@ -43,6 +43,7 @@ function poco_init(App $a) {
echo json_encode($ret); echo json_encode($ret);
killme(); killme();
} }
if ($a->argc > 1 && $a->argv[1] === '@global') { if ($a->argc > 1 && $a->argv[1] === '@global') {
// List of all profiles that this server recently had data from // List of all profiles that this server recently had data from
$global = true; $global = true;

View file

@ -966,7 +966,7 @@ function settings_content(App $a)
'$noinfo' => ['noinfo', L10n::t("Don't show notices"), $noinfo, ''], '$noinfo' => ['noinfo', L10n::t("Don't show notices"), $noinfo, ''],
'$infinite_scroll' => ['infinite_scroll', L10n::t("Infinite scroll"), $infinite_scroll, ''], '$infinite_scroll' => ['infinite_scroll', L10n::t("Infinite scroll"), $infinite_scroll, ''],
'$no_auto_update' => ['no_auto_update', L10n::t("Automatic updates only at the top of the network page"), $no_auto_update, L10n::t('When disabled, the network page is updated all the time, which could be confusing while reading.')], '$no_auto_update' => ['no_auto_update', L10n::t("Automatic updates only at the top of the network page"), $no_auto_update, L10n::t('When disabled, the network page is updated all the time, which could be confusing while reading.')],
'$bandwidth_saver' => ['bandwidth_saver', L10n::t('Bandwith Saver Mode'), $bandwidth_saver, L10n::t('When enabled, embedded content is not displayed on automatic updates, they only show on page reload.')], '$bandwidth_saver' => ['bandwidth_saver', L10n::t('Bandwidth Saver Mode'), $bandwidth_saver, L10n::t('When enabled, embedded content is not displayed on automatic updates, they only show on page reload.')],
'$smart_threading' => ['smart_threading', L10n::t('Smart Threading'), $smart_threading, L10n::t('When enabled, suppress extraneous thread indentation while keeping it where it matters. Only works if threading is available and enabled.')], '$smart_threading' => ['smart_threading', L10n::t('Smart Threading'), $smart_threading, L10n::t('When enabled, suppress extraneous thread indentation while keeping it where it matters. Only works if threading is available and enabled.')],
'$d_tset' => L10n::t('General Theme Settings'), '$d_tset' => L10n::t('General Theme Settings'),

View file

@ -5,6 +5,7 @@ use Friendica\Database\DBM;
function share_init(App $a) { function share_init(App $a) {
$post_id = (($a->argc > 1) ? intval($a->argv[1]) : 0); $post_id = (($a->argc > 1) ? intval($a->argv[1]) : 0);
if (!$post_id || !local_user()) { if (!$post_id || !local_user()) {
killme(); killme();
} }
@ -14,37 +15,44 @@ function share_init(App $a) {
WHERE `item`.`id` = %d LIMIT 1", WHERE `item`.`id` = %d LIMIT 1",
intval($post_id) intval($post_id)
); );
if (!DBM::is_result($r) || ($r[0]['private'] == 1)) { if (!DBM::is_result($r) || ($r[0]['private'] == 1)) {
killme(); killme();
} }
if (strpos($r[0]['body'], "[/share]") !== false) { if (strpos($r[0]['body'], "[/share]") !== false) {
$pos = strpos($r[0]['body'], "[share"); $pos = strpos($r[0]['body'], "[share");
$o = substr($r[0]['body'], $pos); $o = substr($r[0]['body'], $pos);
} else { } else {
$o = share_header($r[0]['author-name'], $r[0]['author-link'], $r[0]['author-avatar'], $r[0]['guid'], $r[0]['created'], $r[0]['plink']); $o = share_header($r[0]['author-name'], $r[0]['author-link'], $r[0]['author-avatar'], $r[0]['guid'], $r[0]['created'], $r[0]['plink']);
if ($r[0]['title']) if ($r[0]['title']) {
$o .= '[b]'.$r[0]['title'].'[/b]'."\n"; $o .= '[b]'.$r[0]['title'].'[/b]'."\n";
}
$o .= $r[0]['body']; $o .= $r[0]['body'];
$o.= "[/share]"; $o .= "[/share]";
} }
echo $o; echo $o;
killme(); killme();
} }
/// @TODO Rewrite to handle over whole record array
function share_header($author, $profile, $avatar, $guid, $posted, $link) { function share_header($author, $profile, $avatar, $guid, $posted, $link) {
$header = "[share author='".str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $author). $header = "[share author='" . str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $author).
"' profile='".str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $profile). "' profile='" . str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $profile).
"' avatar='".str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $avatar); "' avatar='" . str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $avatar);
if ($guid) { if ($guid) {
$header .= "' guid='".str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $guid); $header .= "' guid='" . str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $guid);
} }
if ($posted) { if ($posted) {
$header .= "' posted='".str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $posted); $header .= "' posted='" . str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $posted);
} }
$header .= "' link='".str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $link)."']";
$header .= "' link='" . str_replace(["'", "[", "]"], ["&#x27;", "&#x5B;", "&#x5D;"], $link)."']";
return $header; return $header;
} }

View file

@ -63,17 +63,19 @@ function subthread_content(App $a) {
WHERE `contact`.`self` = 1 AND `contact`.`uid` = %d LIMIT 1", WHERE `contact`.`self` = 1 AND `contact`.`uid` = %d LIMIT 1",
intval($owner_uid) intval($owner_uid)
); );
if (DBM::is_result($r))
if (DBM::is_result($r)) {
$owner = $r[0]; $owner = $r[0];
}
if (! $owner) { if (! $owner) {
logger('like: no owner'); logger('like: no owner');
return; return;
} }
if (! $remote_owner) if (! $remote_owner) {
$remote_owner = $owner; $remote_owner = $owner;
}
$contact = null; $contact = null;
// This represents the person posting // This represents the person posting
@ -85,9 +87,11 @@ function subthread_content(App $a) {
intval($_SESSION['visitor_id']), intval($_SESSION['visitor_id']),
intval($owner_uid) intval($owner_uid)
); );
if (DBM::is_result($r))
if (DBM::is_result($r)) {
$contact = $r[0]; $contact = $r[0];
} }
}
if (! $contact) { if (! $contact) {
return; return;
} }

View file

@ -159,11 +159,13 @@ EOT;
} }
$term_objtype = ($item['resource-id'] ? TERM_OBJ_PHOTO : TERM_OBJ_POST); $term_objtype = ($item['resource-id'] ? TERM_OBJ_PHOTO : TERM_OBJ_POST);
$t = q("SELECT count(tid) as tcount FROM term WHERE oid=%d AND term='%s'", $t = q("SELECT count(tid) as tcount FROM term WHERE oid=%d AND term='%s'",
intval($item['id']), intval($item['id']),
dbesc($term) dbesc($term)
); );
if((! $blocktags) && $t[0]['tcount']==0 ) {
if ((!$blocktags) && $t[0]['tcount'] == 0 ) {
q("INSERT INTO term (oid, otype, type, term, url, uid) VALUE (%d, %d, %d, '%s', '%s', %d)", q("INSERT INTO term (oid, otype, type, term, url, uid) VALUE (%d, %d, %d, '%s', '%s', %d)",
intval($item['id']), intval($item['id']),
$term_objtype, $term_objtype,
@ -176,19 +178,21 @@ EOT;
// if the original post is on this site, update it. // if the original post is on this site, update it.
$r = q("select `tag`,`id`,`uid` from item where `origin` = 1 AND `uri` = '%s' LIMIT 1", $r = q("SELECT `tag`,`id`,`uid` FROM `item` WHERE `origin`=1 AND `uri`='%s' LIMIT 1",
dbesc($item['uri']) dbesc($item['uri'])
); );
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
$x = q("SELECT `blocktags` FROM `user` WHERE `uid` = %d limit 1", $x = q("SELECT `blocktags` FROM `user` WHERE `uid`=%d LIMIT 1",
intval($r[0]['uid']) intval($r[0]['uid'])
); );
$t = q("SELECT count(tid) as tcount FROM term WHERE oid=%d AND term='%s'", $t = q("SELECT COUNT(`tid`) AS `tcount` FROM `term` WHERE `oid`=%d AND `term`='%s'",
intval($r[0]['id']), intval($r[0]['id']),
dbesc($term) dbesc($term)
); );
if(count($x) && !$x[0]['blocktags'] && $t[0]['tcount']==0){
q("INSERT INTO term (oid, otype, type, term, url, uid) VALUE (%d, %d, %d, '%s', '%s', %d)", if (DBM::is_result($x) && !$x[0]['blocktags'] && $t[0]['tcount'] == 0){
q("INSERT INTO term (`oid`, `otype`, `type`, `term`, `url`, `uid`) VALUE (%d, %d, %d, '%s', '%s', %d)",
intval($r[0]['id']), intval($r[0]['id']),
$term_objtype, $term_objtype,
TERM_HASHTAG, TERM_HASHTAG,

View file

@ -23,7 +23,7 @@ function update_community_content(App $a) {
$replace = "<img\${1} dst=\"\${2}\""; $replace = "<img\${1} dst=\"\${2}\"";
$text = preg_replace($pattern, $replace, $text); $text = preg_replace($pattern, $replace, $text);
if (PConfig::get(local_user(), "system", "bandwith_saver")) { if (PConfig::get(local_user(), "system", "bandwidth_saver")) {
$replace = "<br />".L10n::t("[Embedded content - reload page to view]")."<br />"; $replace = "<br />".L10n::t("[Embedded content - reload page to view]")."<br />";
$pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i";
$text = preg_replace($pattern, $replace, $text); $text = preg_replace($pattern, $replace, $text);

View file

@ -23,7 +23,7 @@ function update_display_content(App $a)
$replace = "<img\${1} dst=\"\${2}\""; $replace = "<img\${1} dst=\"\${2}\"";
$text = preg_replace($pattern, $replace, $text); $text = preg_replace($pattern, $replace, $text);
if (PConfig::get(local_user(), "system", "bandwith_saver")) { if (PConfig::get(local_user(), "system", "bandwidth_saver")) {
$replace = "<br />" . L10n::t("[Embedded content - reload page to view]") . "<br />"; $replace = "<br />" . L10n::t("[Embedded content - reload page to view]") . "<br />";
$pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i";
$text = preg_replace($pattern, $replace, $text); $text = preg_replace($pattern, $replace, $text);

View file

@ -29,7 +29,7 @@ function update_network_content(App $a)
$replace = "<img\${1} dst=\"\${2}\""; $replace = "<img\${1} dst=\"\${2}\"";
$text = preg_replace($pattern, $replace, $text); $text = preg_replace($pattern, $replace, $text);
if (PConfig::get(local_user(), "system", "bandwith_saver")) { if (PConfig::get(local_user(), "system", "bandwidth_saver")) {
$replace = "<br />" . L10n::t("[Embedded content - reload page to view]") . "<br />"; $replace = "<br />" . L10n::t("[Embedded content - reload page to view]") . "<br />";
$pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i";
$text = preg_replace($pattern, $replace, $text); $text = preg_replace($pattern, $replace, $text);

View file

@ -36,7 +36,7 @@ function update_notes_content(App $a) {
$replace = "<img\${1} dst=\"\${2}\""; $replace = "<img\${1} dst=\"\${2}\"";
$text = preg_replace($pattern, $replace, $text); $text = preg_replace($pattern, $replace, $text);
if (PConfig::get(local_user(), "system", "bandwith_saver")) { if (PConfig::get(local_user(), "system", "bandwidth_saver")) {
$replace = "<br />".L10n::t("[Embedded content - reload page to view]")."<br />"; $replace = "<br />".L10n::t("[Embedded content - reload page to view]")."<br />";
$pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i";
$text = preg_replace($pattern, $replace, $text); $text = preg_replace($pattern, $replace, $text);

View file

@ -35,7 +35,7 @@ function update_profile_content(App $a) {
$replace = "<img\${1} dst=\"\${2}\""; $replace = "<img\${1} dst=\"\${2}\"";
$text = preg_replace($pattern, $replace, $text); $text = preg_replace($pattern, $replace, $text);
if (PConfig::get(local_user(), "system", "bandwith_saver")) { if (PConfig::get(local_user(), "system", "bandwidth_saver")) {
$replace = "<br />".L10n::t("[Embedded content - reload page to view]")."<br />"; $replace = "<br />".L10n::t("[Embedded content - reload page to view]")."<br />";
$pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i"; $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i";
$text = preg_replace($pattern, $replace, $text); $text = preg_replace($pattern, $replace, $text);

View file

@ -1,5 +1,5 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<phpunit bootstrap="boot.php"> <phpunit bootstrap="tests/bootstrap.php">
<testsuites> <testsuites>
<testsuite> <testsuite>
<directory>tests/</directory> <directory>tests/</directory>

View file

@ -40,6 +40,12 @@ class Cache extends \Friendica\BaseObject
self::$driver = new Cache\MemcachedCacheDriver($memcached_hosts); self::$driver = new Cache\MemcachedCacheDriver($memcached_hosts);
break; break;
case 'redis':
$redis_host = Config::get('system', 'redis_host', '127.0.0.1');
$redis_port = Config::get('system', 'redis_port', 6379);
self::$driver = new Cache\RedisCacheDriver($redis_host, $redis_port);
break;
default: default:
self::$driver = new Cache\DatabaseCacheDriver(); self::$driver = new Cache\DatabaseCacheDriver();
} }

View file

@ -0,0 +1,77 @@
<?php
namespace Friendica\Core\Cache;
use Friendica\BaseObject;
use Friendica\Core\Cache;
/**
* Redis Cache Driver. This driver is based on Memcache driver
*
* @author Hypolite Petovan <mrpetovan@gmail.com>
* @author Roland Haeder <roland@mxchange.org>
*/
class RedisCacheDriver extends BaseObject implements ICacheDriver
{
/**
* @var Redis
*/
private $redis;
public function __construct($redis_host, $redis_port)
{
if (!class_exists('Redis', false)) {
throw new \Exception('Redis class isn\'t available');
}
$this->redis = new \Redis();
if (!$this->redis->connect($redis_host, $redis_port)) {
throw new \Exception('Expected Redis server at ' . $redis_host . ':' . $redis_port . ' isn\'t available');
}
}
public function get($key)
{
$return = null;
// We fetch with the hostname as key to avoid problems with other applications
$cached = $this->redis->get(self::getApp()->get_hostname() . ':' . $key);
// @see http://php.net/manual/en/redis.get.php#84275
if (is_bool($cached) || is_double($cached) || is_long($cached)) {
return $return;
}
$value = @unserialize($cached);
// Only return a value if the serialized value is valid.
// We also check if the db entry is a serialized
// boolean 'false' value (which we want to return).
if ($cached === serialize(false) || $value !== false) {
$return = $value;
}
return $return;
}
public function set($key, $value, $duration = Cache::MONTH)
{
// We store with the hostname as key to avoid problems with other applications
return $this->redis->set(
self::getApp()->get_hostname() . ":" . $key,
serialize($value),
time() + $duration
);
}
public function delete($key)
{
return $this->redis->delete($key);
}
public function clear()
{
return true;
}
}

View file

@ -29,9 +29,7 @@ class PConfig extends BaseObject
public static function init($uid) public static function init($uid)
{ {
$a = self::getApp(); if (Config::get('system', 'config_adapter') == 'preload') {
if (isset($a->config['system']['config_adapter']) && $a->config['system']['config_adapter'] == 'preload') {
self::$adapter = new Config\PreloadPConfigAdapter($uid); self::$adapter = new Config\PreloadPConfigAdapter($uid);
} else { } else {
self::$adapter = new Config\JITPConfigAdapter($uid); self::$adapter = new Config\JITPConfigAdapter($uid);

View file

@ -688,7 +688,7 @@ class Worker
logger("Load: ".$load."/".$maxsysload." - processes: ".$active."/".$entries.$processlist." - maximum: ".$queues."/".$maxqueues, LOGGER_DEBUG); logger("Load: ".$load."/".$maxsysload." - processes: ".$active."/".$entries.$processlist." - maximum: ".$queues."/".$maxqueues, LOGGER_DEBUG);
// Are there fewer workers running as possible? Then fork a new one. // Are there fewer workers running as possible? Then fork a new one.
if (!Config::get("system", "worker_dont_fork") && ($queues > ($active + 1)) && ($entries > 1)) { if (!Config::get("system", "worker_dont_fork", false) && ($queues > ($active + 1)) && ($entries > 1)) {
logger("Active workers: ".$active."/".$queues." Fork a new worker.", LOGGER_DEBUG); logger("Active workers: ".$active."/".$queues." Fork a new worker.", LOGGER_DEBUG);
self::spawnWorker(); self::spawnWorker();
} }
@ -1040,7 +1040,7 @@ class Worker
} }
$priority = PRIORITY_MEDIUM; $priority = PRIORITY_MEDIUM;
$dont_fork = Config::get("system", "worker_dont_fork"); $dont_fork = Config::get("system", "worker_dont_fork", false);
$created = DateTimeFormat::utcNow(); $created = DateTimeFormat::utcNow();
$run_parameter = array_shift($args); $run_parameter = array_shift($args);

View file

@ -668,12 +668,12 @@ class DBStructure
"comment" => "registered addons", "comment" => "registered addons",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
"name" => ["type" => "varchar(50)", "not null" => "1", "default" => "", "comment" => ""], "name" => ["type" => "varchar(50)", "not null" => "1", "default" => "", "comment" => "addon base (file)name"],
"version" => ["type" => "varchar(50)", "not null" => "1", "default" => "", "comment" => ""], "version" => ["type" => "varchar(50)", "not null" => "1", "default" => "", "comment" => "currently unused"],
"installed" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "installed" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "currently always 1"],
"hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "currently unused"],
"timestamp" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""], "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" => ""], "plugin_admin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 = has admin config, 0 = has no admin config"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -683,19 +683,19 @@ class DBStructure
$database["attach"] = [ $database["attach"] = [
"comment" => "file attachments", "comment" => "file attachments",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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" => "User id"], "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" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => "hash"],
"filename" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "filename" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "filename of original"],
"filetype" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => ""], "filetype" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => "mimetype"],
"filesize" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""], "filesize" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "size in bytes"],
"data" => ["type" => "longblob", "not null" => "1", "comment" => ""], "data" => ["type" => "longblob", "not null" => "1", "comment" => "file data"],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "creation time"],
"edited" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "edited" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "last edit time"],
"allow_cid" => ["type" => "mediumtext", "comment" => ""], "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>"],
"allow_gid" => ["type" => "mediumtext", "comment" => ""], "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
"deny_cid" => ["type" => "mediumtext", "comment" => ""], "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
"deny_gid" => ["type" => "mediumtext", "comment" => ""], "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -730,7 +730,7 @@ class DBStructure
$database["challenge"] = [ $database["challenge"] = [
"comment" => "", "comment" => "",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"challenge" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "challenge" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"dfrn-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "dfrn-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""], "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
@ -771,26 +771,26 @@ class DBStructure
$database["contact"] = [ $database["contact"] = [
"comment" => "contact table", "comment" => "contact table",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
"self" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "self" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 if the contact is the user him/her self"],
"remote_self" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "remote_self" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"rel" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "rel" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "The kind of the relation between the user and the contact"],
"duplex" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "duplex" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""], "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Network protocol of the contact"],
"name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "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" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Nick- and user name of the contact"],
"location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"about" => ["type" => "text", "comment" => ""], "about" => ["type" => "text", "comment" => ""],
"keywords" => ["type" => "text", "comment" => ""], "keywords" => ["type" => "text", "comment" => "public keywords (interests) of the contact"],
"gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""], "gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
"xmpp" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "xmpp" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"attag" => ["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" => ""], "avatar" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"photo" => ["type" => "varchar(255)", "default" => "", "comment" => ""], "photo" => ["type" => "varchar(255)", "default" => "", "comment" => "Link to the profile photo of the contact"],
"thumb" => ["type" => "varchar(255)", "default" => "", "comment" => ""], "thumb" => ["type" => "varchar(255)", "default" => "", "comment" => "Link to the profile photo (thumb size)"],
"micro" => ["type" => "varchar(255)", "default" => "", "comment" => ""], "micro" => ["type" => "varchar(255)", "default" => "", "comment" => "Link to the profile photo (micro size)"],
"site-pubkey" => ["type" => "text", "comment" => ""], "site-pubkey" => ["type" => "text", "comment" => ""],
"issued-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "issued-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"dfrn-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "dfrn-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
@ -798,8 +798,8 @@ class DBStructure
"nurl" => ["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" => ""], "addr" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"alias" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "alias" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"pubkey" => ["type" => "text", "comment" => ""], "pubkey" => ["type" => "text", "comment" => "RSA public key 4096 bit"],
"prvkey" => ["type" => "text", "comment" => ""], "prvkey" => ["type" => "text", "comment" => "RSA private key 4096 bit"],
"batch" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "batch" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"request" => ["type" => "varchar(255)", "comment" => ""], "request" => ["type" => "varchar(255)", "comment" => ""],
"notify" => ["type" => "varchar(255)", "comment" => ""], "notify" => ["type" => "varchar(255)", "comment" => ""],
@ -811,20 +811,20 @@ class DBStructure
"usehub" => ["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" => ""], "subhub" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"hub-verify" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "hub-verify" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"last-update" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "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" => ""], "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" => ""], "failure_update" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "Date of the last failed update"],
"name-date" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "name-date" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
"uri-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" => ""], "avatar-date" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
"term-date" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "term-date" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
"last-item" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "last-item" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "date of the last post"],
"priority" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "priority" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"blocked" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""], "blocked" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""],
"readonly" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "readonly" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "posts of the contact are readonly"],
"writable" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "writable" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"forum" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "forum" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "contact is a forum"],
"prv" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "prv" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "contact is a private group"],
"contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""], "contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""],
"hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "hidden" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"archive" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "archive" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
@ -859,14 +859,14 @@ class DBStructure
$database["conv"] = [ $database["conv"] = [
"comment" => "private messages", "comment" => "private messages",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this conversation"],
"recips" => ["type" => "text", "comment" => ""], "recips" => ["type" => "text", "comment" => "sender_handle;recipient_handle"],
"uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"], "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" => ""], "creator" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "handle of creator"],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "creation timestamp"],
"updated" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "updated" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "edited timestamp"],
"subject" => ["type" => "text", "comment" => ""], "subject" => ["type" => "text", "comment" => "subject of initial message"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -876,13 +876,13 @@ class DBStructure
$database["conversation"] = [ $database["conversation"] = [
"comment" => "Raw data and structure information for messages", "comment" => "Raw data and structure information for messages",
"fields" => [ "fields" => [
"item-uri" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => ""], "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" => ""], "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" => ""], "conversation-uri" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => "GNU Social conversation URI"],
"conversation-href" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => ""], "conversation-href" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => "GNU Social conversation link"],
"protocol" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "protocol" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "The protocol of the item"],
"source" => ["type" => "mediumtext", "comment" => ""], "source" => ["type" => "mediumtext", "comment" => "Original source"],
"received" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "received" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "Receiving date"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["item-uri"], "PRIMARY" => ["item-uri"],
@ -893,26 +893,26 @@ class DBStructure
$database["event"] = [ $database["event"] = [
"comment" => "Events", "comment" => "Events",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"], "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" => ""], "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact_id (ID of the contact in contact table)"],
"uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "creation time"],
"edited" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "edited" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "last edit time"],
"start" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "start" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "event start time"],
"finish" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "finish" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "event end time"],
"summary" => ["type" => "text", "comment" => ""], "summary" => ["type" => "text", "comment" => "short description or title of the event"],
"desc" => ["type" => "text", "comment" => ""], "desc" => ["type" => "text", "comment" => "event description"],
"location" => ["type" => "text", "comment" => ""], "location" => ["type" => "text", "comment" => "event location"],
"type" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "comment" => ""], "type" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "comment" => "event or birthday"],
"nofinish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "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" => ["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" => ""], "ignore" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "0 or 1"],
"allow_cid" => ["type" => "mediumtext", "comment" => ""], "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>'"],
"allow_gid" => ["type" => "mediumtext", "comment" => ""], "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
"deny_cid" => ["type" => "mediumtext", "comment" => ""], "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
"deny_gid" => ["type" => "mediumtext", "comment" => ""], "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -922,8 +922,8 @@ class DBStructure
$database["fcontact"] = [ $database["fcontact"] = [
"comment" => "Diaspora compatible contacts - used in the Diaspora implementation", "comment" => "Diaspora compatible contacts - used in the Diaspora implementation",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "unique id"],
"url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"name" => ["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" => ""], "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
@ -966,9 +966,9 @@ class DBStructure
$database["gcign"] = [ $database["gcign"] = [
"comment" => "contacts ignored by friend suggestions", "comment" => "contacts ignored by friend suggestions",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "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" => ""], "gcid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["gcontact" => "id"], "comment" => "gcontact.id of ignored contact"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -979,12 +979,12 @@ class DBStructure
$database["gcontact"] = [ $database["gcontact"] = [
"comment" => "global contacts", "comment" => "global contacts",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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" => ["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" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Nick- and user name of the contact"],
"url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Link to the contacts profile page"],
"nurl" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "nurl" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Link to the profile photo"],
"connect" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "connect" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
"updated" => ["type" => "datetime", "default" => NULL_DATE, "comment" => ""], "updated" => ["type" => "datetime", "default" => NULL_DATE, "comment" => ""],
@ -992,19 +992,19 @@ class DBStructure
"last_failure" => ["type" => "datetime", "default" => NULL_DATE, "comment" => ""], "last_failure" => ["type" => "datetime", "default" => NULL_DATE, "comment" => ""],
"location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"about" => ["type" => "text", "comment" => ""], "about" => ["type" => "text", "comment" => ""],
"keywords" => ["type" => "text", "comment" => ""], "keywords" => ["type" => "text", "comment" => "puplic keywords (interests)"],
"gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""], "gender" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
"birthday" => ["type" => "varchar(32)", "not null" => "1", "default" => "0001-01-01", "comment" => ""], "birthday" => ["type" => "varchar(32)", "not null" => "1", "default" => "0001-01-01", "comment" => ""],
"community" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "community" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 if contact is forum account"],
"contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "-1", "comment" => ""], "contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "-1", "comment" => ""],
"hide" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "hide" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 = should be hidden from search"],
"nsfw" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "nsfw" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 = contact posts nsfw content"],
"network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""], "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "social network protocol"],
"addr" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "addr" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"notify" => ["type" => "varchar(255)", "comment" => ""], "notify" => ["type" => "varchar(255)", "comment" => ""],
"alias" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "alias" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"generation" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "generation" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"server_url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "server_url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "baseurl of the contacts server"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -1019,7 +1019,7 @@ class DBStructure
$database["glink"] = [ $database["glink"] = [
"comment" => "'friends of friends' linkages derived from poco", "comment" => "'friends of friends' linkages derived from poco",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""], "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"], "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" => ""], "gcid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["gcontact" => "id"], "comment" => ""],
@ -1035,11 +1035,11 @@ class DBStructure
$database["group"] = [ $database["group"] = [
"comment" => "privacy groups, group info", "comment" => "privacy groups, group info",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "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" => ""], "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" => ""], "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" => ""], "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "human readable name of group"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -1049,9 +1049,9 @@ class DBStructure
$database["group_member"] = [ $database["group_member"] = [
"comment" => "privacy groups, member info", "comment" => "privacy groups, member info",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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" => ""], "gid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["group" => "id"], "comment" => "groups.id of the associated group"],
"contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""], "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id of the member assigned to the associated group"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -1062,14 +1062,14 @@ class DBStructure
$database["gserver"] = [ $database["gserver"] = [
"comment" => "Global servers", "comment" => "Global servers",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"url" => ["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" => ""], "nurl" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"version" => ["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" => ""], "site_name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"info" => ["type" => "text", "comment" => ""], "info" => ["type" => "text", "comment" => ""],
"register_policy" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""], "register_policy" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""],
"registered-users" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""], "registered-users" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Number of registered users"],
"poco" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "poco" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"noscrape" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "noscrape" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""], "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""],
@ -1100,11 +1100,11 @@ class DBStructure
$database["hook"] = [ $database["hook"] = [
"comment" => "addon hook registry", "comment" => "addon hook registry",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"hook" => ["type" => "varbinary(100)", "not null" => "1", "default" => "", "comment" => ""], "hook" => ["type" => "varbinary(100)", "not null" => "1", "default" => "", "comment" => "name of hook"],
"file" => ["type" => "varbinary(200)", "not null" => "1", "default" => "", "comment" => ""], "file" => ["type" => "varbinary(200)", "not null" => "1", "default" => "", "comment" => "relative filename of hook handler"],
"function" => ["type" => "varbinary(200)", "not null" => "1", "default" => "", "comment" => ""], "function" => ["type" => "varbinary(200)", "not null" => "1", "default" => "", "comment" => "function name of hook handler"],
"priority" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "priority" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => "not yet implemented - can be used to sort conflicts in hook handling by calling handlers in priority order"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -1114,7 +1114,7 @@ class DBStructure
$database["intro"] = [ $database["intro"] = [
"comment" => "", "comment" => "",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "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" => ""], "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" => ""], "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
@ -1134,68 +1134,68 @@ class DBStructure
"comment" => "All posts", "comment" => "All posts",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => ["thread" => "iid"]], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "relation" => ["thread" => "iid"]],
"guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this item"],
"uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"], "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" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id"],
"type" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "comment" => ""], "type" => ["type" => "varchar(20)", "not null" => "1", "default" => "", "comment" => ""],
"wall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "wall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "This item was posted to the wall of uid"],
"gravity" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "gravity" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"parent" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => ""], "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" => ""], "parent-uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "uri of the parent to this item"],
"extid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "extid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"thr-parent" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "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" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "Creation timestamp."],
"edited" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "edited" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "Date of last edit (default is created)"],
"commented" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "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" => ""], "received" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "datetime"],
"changed" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "changed" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "Date that something in the conversation changed, indicating clients should fetch the conversation again"],
"owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""], "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Link to the contact table with uid=0 of the owner of this item"],
"owner-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "owner-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name of the owner of this item"],
"owner-link" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "owner-link" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Link to the profile page of the owner of this item"],
"owner-avatar" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "owner-avatar" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Link to the avatar picture of the owner of this item"],
"author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""], "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"],
"author-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "author-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name of the author of this item"],
"author-link" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "author-link" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Link to the profile page of the author of this item"],
"author-avatar" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "author-avatar" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Link to the avatar picture of the author of this item"],
"title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "item title"],
"content-warning" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "content-warning" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"body" => ["type" => "mediumtext", "comment" => ""], "body" => ["type" => "mediumtext", "comment" => "item body content"],
"app" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "app" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "application which generated this item"],
"verb" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => ""], "verb" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => "ActivityStreams verb"],
"object-type" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => ""], "object-type" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => "ActivityStreams object type"],
"object" => ["type" => "text", "comment" => ""], "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" => ""], "target-type" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => "ActivityStreams target type if applicable (URI)"],
"target" => ["type" => "text", "comment" => ""], "target" => ["type" => "text", "comment" => "JSON encoded target structure if used"],
"postopts" => ["type" => "text", "comment" => ""], "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"],
"plink" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "plink" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "permalink or URL toa displayable copy of the message at its source"],
"resource-id" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""], "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" => ""], "event-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["event" => "id"], "comment" => "Used to link to the event.id"],
"tag" => ["type" => "mediumtext", "comment" => ""], "tag" => ["type" => "mediumtext", "comment" => ""],
"attach" => ["type" => "mediumtext", "comment" => ""], "attach" => ["type" => "mediumtext", "comment" => "JSON structure representing attachments to this item"],
"inform" => ["type" => "mediumtext", "comment" => ""], "inform" => ["type" => "mediumtext", "comment" => ""],
"file" => ["type" => "mediumtext", "comment" => ""], "file" => ["type" => "mediumtext", "comment" => ""],
"location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "text location where this item originated"],
"coord" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "coord" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "longitude/latitude pair representing location where this item originated"],
"allow_cid" => ["type" => "mediumtext", "comment" => ""], "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>'"],
"allow_gid" => ["type" => "mediumtext", "comment" => ""], "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
"deny_cid" => ["type" => "mediumtext", "comment" => ""], "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
"deny_gid" => ["type" => "mediumtext", "comment" => ""], "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
"private" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "private" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "distribution is restricted"],
"pubmail" => ["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" => ""], "moderated" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"spam" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "spam" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"starred" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "starred" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been favourited"],
"bookmark" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "bookmark" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been bookmarked"],
"unseen" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""], "unseen" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => "item has not been seen"],
"deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been deleted"],
"origin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "origin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item originated at this site"],
"forum_mode" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "forum_mode" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"mention" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "mention" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "The owner of this item was mentioned in it"],
"network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => ""], "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Network from where the item comes from"],
"rendered-hash" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""], "rendered-hash" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
"rendered-html" => ["type" => "mediumtext", "comment" => ""], "rendered-html" => ["type" => "mediumtext", "comment" => "item.body converted to html"],
"global" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "global" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
], ],
"indexes" => [ "indexes" => [
@ -1232,10 +1232,10 @@ class DBStructure
$database["locks"] = [ $database["locks"] = [
"comment" => "", "comment" => "",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"name" => ["type" => "varchar(128)", "not null" => "1", "default" => "", "comment" => ""], "name" => ["type" => "varchar(128)", "not null" => "1", "default" => "", "comment" => ""],
"locked" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "locked" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"pid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""], "pid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Process ID"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -1244,23 +1244,23 @@ class DBStructure
$database["mail"] = [ $database["mail"] = [
"comment" => "private messages", "comment" => "private messages",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "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" => ""], "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" => ""], "from-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "name of the sender"],
"from-photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "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" => ""], "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" => ["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" => ""], "convid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["conv" => "id"], "comment" => "conv.id"],
"title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"body" => ["type" => "mediumtext", "comment" => ""], "body" => ["type" => "mediumtext", "comment" => ""],
"seen" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "seen" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if message visited it is 1"],
"reply" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "reply" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"replied" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "replied" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"unknown" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "unknown" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if sender not in the contact table this is 1"],
"uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"parent-uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "parent-uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "creation time of the private message"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -1274,7 +1274,7 @@ class DBStructure
$database["mailacct"] = [ $database["mailacct"] = [
"comment" => "Mail account data for fetching mails", "comment" => "Mail account data for fetching mails",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
"server" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "server" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"port" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "port" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
@ -1295,7 +1295,7 @@ class DBStructure
$database["manage"] = [ $database["manage"] = [
"comment" => "table of accounts that can manage each other", "comment" => "table of accounts that can manage each other",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "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"], "mid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
], ],
@ -1307,7 +1307,7 @@ class DBStructure
$database["notify"] = [ $database["notify"] = [
"comment" => "notifications", "comment" => "notifications",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"hash" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => ""], "hash" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => ""],
"type" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "type" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
@ -1315,15 +1315,15 @@ class DBStructure
"photo" => ["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" => ""], "date" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
"msg" => ["type" => "mediumtext", "comment" => ""], "msg" => ["type" => "mediumtext", "comment" => ""],
"uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"], "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "Owner User id"],
"link" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "link" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => ""], "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => "item.id"],
"parent" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => ""], "parent" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => ""],
"seen" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "seen" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"verb" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => ""], "verb" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => ""],
"otype" => ["type" => "varchar(10)", "not null" => "1", "default" => "", "comment" => ""], "otype" => ["type" => "varchar(10)", "not null" => "1", "default" => "", "comment" => ""],
"name_cache" => ["type" => "tinytext", "comment" => ""], "name_cache" => ["type" => "tinytext", "comment" => "Cached bbcode parsing of name"],
"msg_cache" => ["type" => "mediumtext", "comment" => ""] "msg_cache" => ["type" => "mediumtext", "comment" => "Cached bbcode parsing of msg"]
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -1336,7 +1336,7 @@ class DBStructure
$database["notify-threads"] = [ $database["notify-threads"] = [
"comment" => "", "comment" => "",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"notify-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["notify" => "id"], "comment" => ""], "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" => ""], "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" => ""], "parent-item" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
@ -1349,10 +1349,10 @@ class DBStructure
$database["oembed"] = [ $database["oembed"] = [
"comment" => "cache for OEmbed queries", "comment" => "cache for OEmbed queries",
"fields" => [ "fields" => [
"url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => ""], "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "page url"],
"maxwidth" => ["type" => "mediumint unsigned", "not null" => "1", "primary" => "1", "comment" => ""], "maxwidth" => ["type" => "mediumint unsigned", "not null" => "1", "primary" => "1", "comment" => "Maximum width passed to Oembed"],
"content" => ["type" => "mediumtext", "comment" => ""], "content" => ["type" => "mediumtext", "comment" => "OEmbed data of the page"],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "datetime of creation"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["url", "maxwidth"], "PRIMARY" => ["url", "maxwidth"],
@ -1362,11 +1362,11 @@ class DBStructure
$database["parsed_url"] = [ $database["parsed_url"] = [
"comment" => "cache for 'parse_url' queries", "comment" => "cache for 'parse_url' queries",
"fields" => [ "fields" => [
"url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => ""], "url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "page url"],
"guessing" => ["type" => "boolean", "not null" => "1", "default" => "0", "primary" => "1", "comment" => ""], "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" => ""], "oembed" => ["type" => "boolean", "not null" => "1", "default" => "0", "primary" => "1", "comment" => "is the data the result of oembed?"],
"content" => ["type" => "mediumtext", "comment" => ""], "content" => ["type" => "mediumtext", "comment" => "page data"],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "datetime of creation"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["url", "guessing", "oembed"], "PRIMARY" => ["url", "guessing", "oembed"],
@ -1402,16 +1402,16 @@ class DBStructure
$database["photo"] = [ $database["photo"] = [
"comment" => "photo storage", "comment" => "photo storage",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "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" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id"],
"guid" => ["type" => "char(16)", "not null" => "1", "default" => "", "comment" => ""], "guid" => ["type" => "char(16)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this photo"],
"resource-id" => ["type" => "char(32)", "not null" => "1", "default" => "", "comment" => ""], "resource-id" => ["type" => "char(32)", "not null" => "1", "default" => "", "comment" => ""],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "creation date"],
"edited" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "edited" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "last edited date"],
"title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"desc" => ["type" => "text", "comment" => ""], "desc" => ["type" => "text", "comment" => ""],
"album" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "album" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "The name of the album to which the photo belongs"],
"filename" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "filename" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"type" => ["type" => "varchar(30)", "not null" => "1", "default" => "image/jpeg"], "type" => ["type" => "varchar(30)", "not null" => "1", "default" => "image/jpeg"],
"height" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "height" => ["type" => "smallint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
@ -1420,10 +1420,10 @@ class DBStructure
"data" => ["type" => "mediumblob", "not null" => "1", "comment" => ""], "data" => ["type" => "mediumblob", "not null" => "1", "comment" => ""],
"scale" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "scale" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"profile" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "profile" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"allow_cid" => ["type" => "mediumtext", "comment" => ""], "allow_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed contact.id '<19><78>'"],
"allow_gid" => ["type" => "mediumtext", "comment" => ""], "allow_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of allowed groups"],
"deny_cid" => ["type" => "mediumtext", "comment" => ""], "deny_cid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied contact.id"],
"deny_gid" => ["type" => "mediumtext", "comment" => ""], "deny_gid" => ["type" => "mediumtext", "comment" => "Access Control - list of denied groups"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -1459,7 +1459,7 @@ class DBStructure
$database["poll_result"] = [ $database["poll_result"] = [
"comment" => "data for polls - currently unused", "comment" => "data for polls - currently unused",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"poll_id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["poll" => "id"]], "poll_id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["poll" => "id"]],
"choice" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "choice" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
], ],
@ -1483,14 +1483,14 @@ class DBStructure
$database["profile"] = [ $database["profile"] = [
"comment" => "user profiles data", "comment" => "user profiles data",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "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" => ""], "profile-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Name of the profile"],
"is-default" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "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-friends" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Hide friend list from viewers of this profile"],
"name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"pdesc" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "pdesc" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Title or description"],
"dob" => ["type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00", "comment" => ""], "dob" => ["type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00", "comment" => "Day of birth"],
"address" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "address" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"locality" => ["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" => ""], "region" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
@ -1523,8 +1523,8 @@ class DBStructure
"xmpp" => ["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" => ""], "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"thumb" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "thumb" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"publish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "publish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "publish default profile in local directory"],
"net-publish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "net-publish" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "publish profile in global directory"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],
@ -1534,9 +1534,9 @@ class DBStructure
$database["profile_check"] = [ $database["profile_check"] = [
"comment" => "DFRN remote auth use", "comment" => "DFRN remote auth use",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "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" => ""], "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id"],
"dfrn_id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "dfrn_id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"sec" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "sec" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""], "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
@ -1548,7 +1548,7 @@ class DBStructure
$database["push_subscriber"] = [ $database["push_subscriber"] = [
"comment" => "Used for OStatus: Contains feed subscribers", "comment" => "Used for OStatus: Contains feed subscribers",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
"callback_url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "callback_url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"topic" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "topic" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
@ -1567,7 +1567,7 @@ class DBStructure
$database["queue"] = [ $database["queue"] = [
"comment" => "Queue for messages that couldn't be delivered", "comment" => "Queue for messages that couldn't be delivered",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Message receiver"], "cid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Message receiver"],
"network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Receiver's network"], "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Receiver's network"],
"guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Unique GUID of the message"], "guid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Unique GUID of the message"],
@ -1587,7 +1587,7 @@ class DBStructure
$database["register"] = [ $database["register"] = [
"comment" => "registrations requiring admin approval", "comment" => "registrations requiring admin approval",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"hash" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "hash" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
"uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"], "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
@ -1602,7 +1602,7 @@ class DBStructure
$database["search"] = [ $database["search"] = [
"comment" => "", "comment" => "",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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"], "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"],
"term" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "term" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
], ],
@ -1614,7 +1614,7 @@ class DBStructure
$database["session"] = [ $database["session"] = [
"comment" => "web session storage", "comment" => "web session storage",
"fields" => [ "fields" => [
"id" => ["type" => "bigint unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "bigint unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"sid" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => ""], "sid" => ["type" => "varbinary(255)", "not null" => "1", "default" => "", "comment" => ""],
"data" => ["type" => "text", "comment" => ""], "data" => ["type" => "text", "comment" => ""],
"expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""], "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
@ -1628,8 +1628,8 @@ class DBStructure
$database["sign"] = [ $database["sign"] = [
"comment" => "Diaspora signatures", "comment" => "Diaspora signatures",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "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" => ""], "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => "item.id"],
"signed_text" => ["type" => "mediumtext", "comment" => ""], "signed_text" => ["type" => "mediumtext", "comment" => ""],
"signature" => ["type" => "text", "comment" => ""], "signature" => ["type" => "text", "comment" => ""],
"signer" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "signer" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
@ -1666,11 +1666,11 @@ class DBStructure
$database["thread"] = [ $database["thread"] = [
"comment" => "Thread related data", "comment" => "Thread related data",
"fields" => [ "fields" => [
"iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["item" => "id"], "comment" => ""], "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["item" => "id"], "comment" => "sequential ID"],
"uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "User id"], "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" => ""], "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
"owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""], "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" => ""], "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Item author"],
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
"edited" => ["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" => ""], "commented" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""],
@ -1724,50 +1724,50 @@ class DBStructure
$database["user"] = [ $database["user"] = [
"comment" => "The local users", "comment" => "The local users",
"fields" => [ "fields" => [
"uid" => ["type" => "mediumint unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "uid" => ["type" => "mediumint unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"parent-uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "The parent user that has full control about this user"], "parent-uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "The parent user that has full control about this user"],
"guid" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => ""], "guid" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => "A unique identifier for this user"],
"username" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "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" => ""], "password" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "encrypted password"],
"legacy_password" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Is the password hash double-hashed?"], "legacy_password" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Is the password hash double-hashed?"],
"nickname" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "nickname" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "nick- and user name"],
"email" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "email" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "the users email address"],
"openid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""], "openid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"timezone" => ["type" => "varchar(128)", "not null" => "1", "default" => "", "comment" => ""], "timezone" => ["type" => "varchar(128)", "not null" => "1", "default" => "", "comment" => "PHP-legal timezone"],
"language" => ["type" => "varchar(32)", "not null" => "1", "default" => "en", "comment" => ""], "language" => ["type" => "varchar(32)", "not null" => "1", "default" => "en", "comment" => "default language"],
"register_date" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "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" => ""], "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-location" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "Default for item.location"],
"allow_location" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "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" => ""], "theme" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "user theme preference"],
"pubkey" => ["type" => "text", "comment" => ""], "pubkey" => ["type" => "text", "comment" => "RSA public key 4096 bit"],
"prvkey" => ["type" => "text", "comment" => ""], "prvkey" => ["type" => "text", "comment" => "RSA private key 4096 bit"],
"spubkey" => ["type" => "text", "comment" => ""], "spubkey" => ["type" => "text", "comment" => ""],
"sprvkey" => ["type" => "text", "comment" => ""], "sprvkey" => ["type" => "text", "comment" => ""],
"verified" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "verified" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "user is verified through email"],
"blocked" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "blocked" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 for user is blocked"],
"blockwall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "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" => ""], "hidewall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Hide profile details from unkown viewers"],
"blocktags" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "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" => ""], "unkmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Permit unknown people to send private mails to this user"],
"cntunkmail" => ["type" => "int unsigned", "not null" => "1", "default" => "10", "comment" => ""], "cntunkmail" => ["type" => "int unsigned", "not null" => "1", "default" => "10", "comment" => ""],
"notify-flags" => ["type" => "smallint unsigned", "not null" => "1", "default" => "65535", "comment" => ""], "notify-flags" => ["type" => "smallint unsigned", "not null" => "1", "default" => "65535", "comment" => "email notification options"],
"page-flags" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "page-flags" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "page/profile type"],
"account-type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""], "account-type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"prvnets" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "prvnets" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"pwdreset" => ["type" => "varchar(255)", "comment" => "Password reset request token"], "pwdreset" => ["type" => "varchar(255)", "comment" => "Password reset request token"],
"pwdreset_time" => ["type" => "datetime", "comment" => "Timestamp of the last password reset request"], "pwdreset_time" => ["type" => "datetime", "comment" => "Timestamp of the last password reset request"],
"maxreq" => ["type" => "int unsigned", "not null" => "1", "default" => "10", "comment" => ""], "maxreq" => ["type" => "int unsigned", "not null" => "1", "default" => "10", "comment" => ""],
"expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""], "expire" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"account_removed" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "account_removed" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if 1 the account is removed"],
"account_expired" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "account_expired" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"account_expires_on" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => ""], "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" => ""], "expire_notification_sent" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "timestamp of last warning of account expiration"],
"def_gid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""], "def_gid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
"allow_cid" => ["type" => "mediumtext", "comment" => ""], "allow_cid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
"allow_gid" => ["type" => "mediumtext", "comment" => ""], "allow_gid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
"deny_cid" => ["type" => "mediumtext", "comment" => ""], "deny_cid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
"deny_gid" => ["type" => "mediumtext", "comment" => ""], "deny_gid" => ["type" => "mediumtext", "comment" => "default permission for this user"],
"openidserver" => ["type" => "text", "comment" => ""], "openidserver" => ["type" => "text", "comment" => ""],
], ],
"indexes" => [ "indexes" => [
@ -1778,7 +1778,7 @@ class DBStructure
$database["userd"] = [ $database["userd"] = [
"comment" => "Deleted usernames", "comment" => "Deleted usernames",
"fields" => [ "fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""], "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"username" => ["type" => "varchar(255)", "not null" => "1", "comment" => ""], "username" => ["type" => "varchar(255)", "not null" => "1", "comment" => ""],
], ],
"indexes" => [ "indexes" => [
@ -1806,7 +1806,7 @@ class DBStructure
"created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "Creation date"], "created" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "Creation date"],
"pid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Process id of the worker"], "pid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => "Process id of the worker"],
"executed" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "Execution date"], "executed" => ["type" => "datetime", "not null" => "1", "default" => NULL_DATE, "comment" => "Execution date"],
"done" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Marked when the task was done, will be deleted later"], "done" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "Marked 1 when the task was done - will be deleted later"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["id"], "PRIMARY" => ["id"],

View file

@ -803,10 +803,10 @@ class Event extends BaseObject
/** /**
* @brief Format an item array with event data to HTML. * @brief Format an item array with event data to HTML.
* *
* @param arr $item Array with item and event data. * @param array $item Array with item and event data.
* @return string HTML output. * @return string HTML output.
*/ */
public static function getItemHTML($item) { public static function getItemHTML(array $item) {
$same_date = false; $same_date = false;
$finish = false; $finish = false;

View file

@ -1122,8 +1122,9 @@ class Item extends BaseObject
} }
// Is this a shadow entry? // Is this a shadow entry?
if ($item['uid'] == 0) if ($item['uid'] == 0) {
return; return;
}
// Is there a shadow parent? // Is there a shadow parent?
if (!dba::exists('item', ['uri' => $item['parent-uri'], 'uid' => 0])) { if (!dba::exists('item', ['uri' => $item['parent-uri'], 'uid' => 0])) {
@ -1163,12 +1164,10 @@ class Item extends BaseObject
// If this was a comment to a Diaspora post we don't get our comment back. // If this was a comment to a Diaspora post we don't get our comment back.
// This means that we have to distribute the comment by ourselves. // This means that we have to distribute the comment by ourselves.
if ($origin) { if ($origin && dba::exists('item', ['id' => $parent, 'network' => NETWORK_DIASPORA])) {
if (dba::exists('item', ['id' => $parent, 'network' => NETWORK_DIASPORA])) {
self::distribute($public_shadow); self::distribute($public_shadow);
} }
} }
}
/** /**
* Adds a "lang" specification in a "postopts" element of given $arr, * Adds a "lang" specification in a "postopts" element of given $arr,
@ -1177,14 +1176,14 @@ class Item extends BaseObject
*/ */
private static function addLanguageInPostopts(&$item) private static function addLanguageInPostopts(&$item)
{ {
$postopts = "";
if (!empty($item['postopts'])) { if (!empty($item['postopts'])) {
if (strstr($item['postopts'], 'lang=')) { if (strstr($item['postopts'], 'lang=')) {
// do not override // do not override
return; return;
} }
$postopts = $item['postopts']; $postopts = $item['postopts'];
} else {
$postopts = "";
} }
$naked_body = Text\BBCode::toPlaintext($item['body'], false); $naked_body = Text\BBCode::toPlaintext($item['body'], false);

View file

@ -331,6 +331,7 @@ class User
$confirm = x($data, 'confirm') ? trim($data['confirm']) : ''; $confirm = x($data, 'confirm') ? trim($data['confirm']) : '';
$blocked = x($data, 'blocked') ? intval($data['blocked']) : 0; $blocked = x($data, 'blocked') ? intval($data['blocked']) : 0;
$verified = x($data, 'verified') ? intval($data['verified']) : 0; $verified = x($data, 'verified') ? intval($data['verified']) : 0;
$language = x($data, 'language') ? notags(trim($data['language'])) : 'en';
$publish = x($data, 'profile_publish_reg') && intval($data['profile_publish_reg']) ? 1 : 0; $publish = x($data, 'profile_publish_reg') && intval($data['profile_publish_reg']) ? 1 : 0;
$netpublish = strlen(Config::get('system', 'directory')) ? $publish : 0; $netpublish = strlen(Config::get('system', 'directory')) ? $publish : 0;
@ -466,6 +467,7 @@ class User
'sprvkey' => $sprvkey, 'sprvkey' => $sprvkey,
'verified' => $verified, 'verified' => $verified,
'blocked' => $blocked, 'blocked' => $blocked,
'language' => $language,
'timezone' => 'UTC', 'timezone' => 'UTC',
'register_date' => DateTimeFormat::utcNow(), 'register_date' => DateTimeFormat::utcNow(),
'default-location' => '' 'default-location' => ''

View file

@ -63,7 +63,7 @@ class DFRN
* @param array $owner Owner record * @param array $owner Owner record
* *
* @return string DFRN entries * @return string DFRN entries
* @todo Add type-hints * @todo Find proper type-hints
*/ */
public static function entries($items, $owner) public static function entries($items, $owner)
{ {
@ -81,7 +81,7 @@ class DFRN
$root->appendChild($entry); $root->appendChild($entry);
} }
return(trim($doc->saveXML())); return trim($doc->saveXML());
} }
/** /**
@ -120,8 +120,6 @@ class DFRN
} }
} }
// default permissions - anonymous user // default permissions - anonymous user
$sql_extra = " AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' "; $sql_extra = " AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' ";
@ -134,6 +132,7 @@ class DFRN
); );
if (! DBM::is_result($r)) { if (! DBM::is_result($r)) {
logger(sprintf('No contact found for nickname=%d', $owner_nick), LOGGER_WARNING);
killme(); killme();
} }
@ -169,6 +168,7 @@ class DFRN
); );
if (! DBM::is_result($r)) { if (! DBM::is_result($r)) {
logger(sprintf('No contact found for uid=%d', $owner_id), LOGGER_WARNING);
killme(); killme();
} }
@ -177,8 +177,10 @@ class DFRN
$groups = Group::getIdsByContactId($contact['id']); $groups = Group::getIdsByContactId($contact['id']);
if (count($groups)) { if (count($groups)) {
for ($x = 0; $x < count($groups); $x ++) for ($x = 0; $x < count($groups); $x ++) {
$groups[$x] = '<' . intval($groups[$x]) . '>' ; $groups[$x] = '<' . intval($groups[$x]) . '>' ;
}
$gs = implode('|', $groups); $gs = implode('|', $groups);
} else { } else {
$gs = '<<>>' ; // Impossible to match $gs = '<<>>' ; // Impossible to match
@ -219,11 +221,9 @@ class DFRN
//$sql_extra .= file_tag_file_query('item',$category,'category'); //$sql_extra .= file_tag_file_query('item',$category,'category');
} }
if ($public_feed) { if ($public_feed && ! $converse) {
if (! $converse) {
$sql_extra .= " AND `contact`.`self` = 1 "; $sql_extra .= " AND `contact`.`self` = 1 ";
} }
}
$check_date = DateTimeFormat::utc($last_update); $check_date = DateTimeFormat::utc($last_update);
@ -397,7 +397,7 @@ class DFRN
* @param array $owner Owner record * @param array $owner Owner record
* *
* @return string DFRN mail * @return string DFRN mail
* @todo Add type-hints * @todo Find proper type-hints
*/ */
public static function mail($item, $owner) public static function mail($item, $owner)
{ {
@ -423,7 +423,7 @@ class DFRN
$root->appendChild($mail); $root->appendChild($mail);
return(trim($doc->saveXML())); return trim($doc->saveXML());
} }
/** /**
@ -433,7 +433,7 @@ class DFRN
* @param array $owner Owner record * @param array $owner Owner record
* *
* @return string DFRN suggestions * @return string DFRN suggestions
* @todo Add type-hints * @todo Find proper type-hints
*/ */
public static function fsuggest($item, $owner) public static function fsuggest($item, $owner)
{ {
@ -452,7 +452,7 @@ class DFRN
$root->appendChild($suggest); $root->appendChild($suggest);
return(trim($doc->saveXML())); return trim($doc->saveXML());
} }
/** /**
@ -462,7 +462,7 @@ class DFRN
* @param int $uid User ID * @param int $uid User ID
* *
* @return string DFRN relocations * @return string DFRN relocations
* @todo Add type-hints * @todo Find proper type-hints
*/ */
public static function relocate($owner, $uid) public static function relocate($owner, $uid)
{ {
@ -487,7 +487,6 @@ class DFRN
$photos[$p['scale']] = System::baseUrl().'/photo/'.$p['resource-id'].'-'.$p['scale'].'.'.$ext[$p['type']]; $photos[$p['scale']] = System::baseUrl().'/photo/'.$p['resource-id'].'-'.$p['scale'].'.'.$ext[$p['type']];
} }
unset($rp, $ext);
$doc = new DOMDocument('1.0', 'utf-8'); $doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true; $doc->formatOutput = true;
@ -511,7 +510,7 @@ class DFRN
$root->appendChild($relocate); $root->appendChild($relocate);
return(trim($doc->saveXML())); return trim($doc->saveXML());
} }
/** /**
@ -524,7 +523,7 @@ class DFRN
* @param bool $public Is it a header for public posts? * @param bool $public Is it a header for public posts?
* *
* @return object XML root object * @return object XML root object
* @todo Add type-hints * @todo Find proper type-hints
*/ */
private static function addHeader($doc, $owner, $authorelement, $alternatelink = "", $public = false) private static function addHeader($doc, $owner, $authorelement, $alternatelink = "", $public = false)
{ {
@ -600,7 +599,7 @@ class DFRN
* @param boolean $public boolean * @param boolean $public boolean
* *
* @return object XML author object * @return object XML author object
* @todo Add type-hints * @todo Find proper type-hints
*/ */
private static function addAuthor($doc, $owner, $authorelement, $public) private static function addAuthor($doc, $owner, $authorelement, $public)
{ {
@ -744,7 +743,7 @@ class DFRN
* @param array $item Item elements * @param array $item Item elements
* *
* @return object XML author object * @return object XML author object
* @todo Add type-hints * @todo Find proper type-hints
*/ */
private static function addEntryAuthor($doc, $element, $contact_url, $item) private static function addEntryAuthor($doc, $element, $contact_url, $item)
{ {
@ -785,7 +784,7 @@ class DFRN
* @param string $activity activity value * @param string $activity activity value
* *
* @return object XML activity object * @return object XML activity object
* @todo Add type-hints * @todo Find proper type-hints
*/ */
private static function createActivity($doc, $element, $activity) private static function createActivity($doc, $element, $activity)
{ {
@ -796,12 +795,15 @@ class DFRN
if (!$r) { if (!$r) {
return false; return false;
} }
if ($r->type) { if ($r->type) {
XML::addElement($doc, $entry, "activity:object-type", $r->type); XML::addElement($doc, $entry, "activity:object-type", $r->type);
} }
if ($r->id) { if ($r->id) {
XML::addElement($doc, $entry, "id", $r->id); XML::addElement($doc, $entry, "id", $r->id);
} }
if ($r->title) { if ($r->title) {
XML::addElement($doc, $entry, "title", $r->title); XML::addElement($doc, $entry, "title", $r->title);
} }
@ -848,7 +850,7 @@ class DFRN
* @param array $item Item element * @param array $item Item element
* *
* @return object XML attachment object * @return object XML attachment object
* @todo Add type-hints * @todo Find proper type-hints
*/ */
private static function getAttachment($doc, $root, $item) private static function getAttachment($doc, $root, $item)
{ {
@ -888,9 +890,9 @@ class DFRN
* @param bool $single If set, the entry is created as an XML document with a single "entry" element * @param bool $single If set, the entry is created as an XML document with a single "entry" element
* *
* @return object XML entry object * @return object XML entry object
* @todo Add type-hints * @todo Find proper type-hints
*/ */
private static function entry($doc, $type, $item, $owner, $comment = false, $cid = 0, $single = false) private static function entry($doc, $type, array $item, array $owner, $comment = false, $cid = 0, $single = false)
{ {
$mentioned = []; $mentioned = [];
@ -934,7 +936,7 @@ class DFRN
$htmlbody = $body; $htmlbody = $body;
if ($item['title'] != "") { if ($item['title'] != "") {
$htmlbody = "[b]".$item['title']."[/b]\n\n".$htmlbody; $htmlbody = "[b]" . $item['title'] . "[/b]\n\n" . $htmlbody;
} }
$htmlbody = BBCode::convert($htmlbody, false, 7); $htmlbody = BBCode::convert($htmlbody, false, 7);
@ -1061,6 +1063,7 @@ class DFRN
$tags = Item::getFeedTags($item); $tags = Item::getFeedTags($item);
/// @TODO Combine this with similar below if() block?
if (count($tags)) { if (count($tags)) {
foreach ($tags as $t) { foreach ($tags as $t) {
if (($type != 'html') || ($t[0] != "@")) { if (($type != 'html') || ($t[0] != "@")) {
@ -1289,7 +1292,6 @@ class DFRN
$postvars['dissolve'] = '1'; $postvars['dissolve'] = '1';
} }
if ((($contact['rel']) && ($contact['rel'] != CONTACT_IS_SHARING) && (! $contact['blocked'])) || ($owner['page-flags'] == PAGE_COMMUNITY)) { if ((($contact['rel']) && ($contact['rel'] != CONTACT_IS_SHARING) && (! $contact['blocked'])) || ($owner['page-flags'] == PAGE_COMMUNITY)) {
$postvars['data'] = $atom; $postvars['data'] = $atom;
$postvars['perm'] = 'rw'; $postvars['perm'] = 'rw';
@ -1571,12 +1573,12 @@ class DFRN
// Until now we aren't serving different sizes - but maybe later // Until now we aren't serving different sizes - but maybe later
$avatarlist = []; $avatarlist = [];
/// @todo check if "avatar" or "photo" would be the best field in the specification /// @todo check if "avatar" or "photo" would be the best field in the specification
$avatars = $xpath->query($element."/atom:link[@rel='avatar']", $context); $avatars = $xpath->query($element . "/atom:link[@rel='avatar']", $context);
foreach ($avatars as $avatar) { foreach ($avatars as $avatar) {
$href = ""; $href = "";
$width = 0; $width = 0;
foreach ($avatar->attributes as $attributes) { foreach ($avatar->attributes as $attributes) {
/// @TODO Rewrite these similar if () to one switch /// @TODO Rewrite these similar if() to one switch
if ($attributes->name == "href") { if ($attributes->name == "href") {
$href = $attributes->textContent; $href = $attributes->textContent;
} }
@ -1591,6 +1593,7 @@ class DFRN
$avatarlist[$width] = $href; $avatarlist[$width] = $href;
} }
} }
if (count($avatarlist) > 0) { if (count($avatarlist) > 0) {
krsort($avatarlist); krsort($avatarlist);
$author["avatar"] = current($avatarlist); $author["avatar"] = current($avatarlist);
@ -2093,6 +2096,9 @@ class DFRN
$condition = ["(`id` = ?) OR (`nurl` = ?)", $importer["id"], normalise_link($old["url"])]; $condition = ["(`id` = ?) OR (`nurl` = ?)", $importer["id"], normalise_link($old["url"])];
dba::update('contact', $fields, $condition); dba::update('contact', $fields, $condition);
// @TODO No dba:update here?
dba::update('contact', $fields, $condition);
Contact::updateAvatar($relocate["avatar"], $importer["importer_uid"], $importer["id"], true); Contact::updateAvatar($relocate["avatar"], $importer["importer_uid"], $importer["id"], true);
logger('Contacts are updated.'); logger('Contacts are updated.');
@ -2699,7 +2705,7 @@ class DFRN
if (self::updateContent($current, $item, $importer, $entrytype)) { if (self::updateContent($current, $item, $importer, $entrytype)) {
logger("Item ".$item["uri"]." was updated.", LOGGER_DEBUG); logger("Item ".$item["uri"]." was updated.", LOGGER_DEBUG);
} else { } else {
logger("Item ".$item["uri"]." already existed.", LOGGER_DEBUG); logger("Item " . $item["uri"] . " already existed.", LOGGER_DEBUG);
} }
return; return;
} }
@ -2775,6 +2781,7 @@ class DFRN
{ {
logger("Processing deletions"); logger("Processing deletions");
$uri = null; $uri = null;
foreach ($deletion->attributes as $attributes) { foreach ($deletion->attributes as $attributes) {
if ($attributes->name == "ref") { if ($attributes->name == "ref") {
$uri = $attributes->textContent; $uri = $attributes->textContent;

View file

@ -1947,7 +1947,7 @@ class OStatus
* @param bool $complete default true * @param bool $complete default true
* @return void * @return void
*/ */
private static function entryFooter($doc, $entry, $item, $owner, $complete = true) private static function entryFooter($doc, $entry, array $item, array $owner, $complete = true)
{ {
$mentioned = []; $mentioned = [];
@ -1987,6 +1987,7 @@ class OStatus
if (isset($parent_item)) { if (isset($parent_item)) {
$r = dba::fetch_first("SELECT `conversation-uri`, `conversation-href` FROM `conversation` WHERE `item-uri` = ?", $parent_item); $r = dba::fetch_first("SELECT `conversation-uri`, `conversation-href` FROM `conversation` WHERE `item-uri` = ?", $parent_item);
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
if ($r['conversation-uri'] != '') { if ($r['conversation-uri'] != '') {
$conversation_uri = $r['conversation-uri']; $conversation_uri = $r['conversation-uri'];
@ -2047,9 +2048,11 @@ class OStatus
} }
if ($owner['account-type'] == ACCOUNT_TYPE_COMMUNITY) { if ($owner['account-type'] == ACCOUNT_TYPE_COMMUNITY) {
XML::addElement($doc, $entry, "link", "", ["rel" => "mentioned", XML::addElement($doc, $entry, "link", "", [
"rel" => "mentioned",
"ostatus:object-type" => "http://activitystrea.ms/schema/1.0/group", "ostatus:object-type" => "http://activitystrea.ms/schema/1.0/group",
"href" => $owner['url']]); "href" => $owner['url']
]);
} }
if (!$item["private"]) { if (!$item["private"]) {

View file

@ -1321,20 +1321,8 @@ class PortableContact
$version = $data->version; $version = $data->version;
$site_name = $data->site_name; $site_name = $data->site_name;
$info = $data->info; $info = $data->info;
$register_policy_str = $data->register_policy; $register_policy = constant($data->register_policy);
$platform = $data->platform; $platform = $data->platform;
switch ($register_policy_str) {
case "REGISTER_CLOSED":
$register_policy = REGISTER_CLOSED;
break;
case "REGISTER_APPROVE":
$register_policy = REGISTER_APPROVE;
break;
case "REGISTER_OPEN":
$register_policy = REGISTER_OPEN;
break;
}
} }
} }
} }

3669
tests/ApiTest.php Normal file

File diff suppressed because it is too large Load diff

View file

@ -7,14 +7,12 @@ namespace Friendica\Test;
use Friendica\App; use Friendica\App;
use Friendica\BaseObject; use Friendica\BaseObject;
// backward compatibility use PHPUnit\Framework\TestCase;
if (!class_exists('\PHPUnit\Framework\TestCase')) {
class_alias('\PHPUnit_Framework_TestCase', '\PHPUnit\Framework\TestCase');
}
/** /**
* Tests for the BaseObject class. * Tests for the BaseObject class.
*/ */
class BaseObjectTest extends \PHPUnit\Framework\TestCase class BaseObjectTest extends TestCase
{ {
/** /**

63
tests/DatabaseTest.php Normal file
View file

@ -0,0 +1,63 @@
<?php
/**
* DatabaseTest class.
*/
namespace Friendica\Test;
use dba;
use Friendica\Database\DBStructure;
use PHPUnit_Extensions_Database_DB_IDatabaseConnection;
use PHPUnit\DbUnit\DataSet\YamlDataSet;
use PHPUnit\DbUnit\TestCaseTrait;
use PHPUnit\Framework\TestCase;
/**
* Abstract class used by tests that need a database.
*/
abstract class DatabaseTest extends TestCase
{
use TestCaseTrait;
/**
* Get database connection.
*
* This function is executed before each test in order to get a database connection that can be used by tests.
* If no prior connection is available, it tries to create one using the USER, PASS and DB environment variables.
*
* If it could not connect to the database, the test is skipped.
*
* @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
* @see https://phpunit.de/manual/5.7/en/database.html
*/
protected function getConnection()
{
if (!dba::$connected) {
dba::connect('localhost', getenv('USER'), getenv('PASS'), getenv('DB'));
if (dba::$connected) {
$app = get_app();
// We need to do this in order to disable logging
$app->module = 'install';
// Create database structure
DBStructure::update(false, true, true);
} else {
$this->markTestSkipped('Could not connect to the database.');
}
}
return $this->createDefaultDBConnection(dba::get_db(), getenv('DB'));
}
/**
* Get dataset to populate the database with.
* @return YamlDataSet
* @see https://phpunit.de/manual/5.7/en/database.html
*/
protected function getDataSet()
{
return new YamlDataSet(__DIR__ . '/datasets/api.yml');
}
}

View file

@ -5,15 +5,12 @@
namespace Friendica\Test; namespace Friendica\Test;
// backward compatibility use PHPUnit\Framework\TestCase;
if (!class_exists('\PHPUnit\Framework\TestCase')) {
class_alias('\PHPUnit_Framework_TestCase', '\PHPUnit\Framework\TestCase');
}
/** /**
* Tests for text functions. * Tests for text functions.
*/ */
class TextTest extends \PHPUnit\Framework\TestCase class TextTest extends TestCase
{ {
/** /**

22
tests/bootstrap.php Normal file
View file

@ -0,0 +1,22 @@
<?php
/**
* This file is loaded by PHPUnit before any test.
*/
use PHPUnit\DbUnit\DataSet\YamlDataSet;
use PHPUnit\DbUnit\TestCaseTrait;
use PHPUnit\Framework\TestCase;
require_once __DIR__.'/../boot.php';
require_once __DIR__.'/../include/api.php';
// Backward compatibility
if (!class_exists(TestCase::class)) {
class_alias(PHPUnit_Framework_TestCase::class, TestCase::class);
}
if (!trait_exists(TestCaseTrait::class)) {
class_alias(PHPUnit_Extensions_Database_TestCase_Trait::class, TestCaseTrait::class);
}
if (!class_exists(YamlDataSet::class)) {
class_alias(PHPUnit_Extensions_Database_DataSet_YamlDataSet::class, YamlDataSet::class);
}

192
tests/datasets/api.yml Normal file
View file

@ -0,0 +1,192 @@
---
# Empty these tables
cache:
config:
conversation:
pconfig:
photo:
workerqueue:
mail:
# Populate tables with test data
user:
-
uid: 42
username: Test user
nickname: selfcontact
verified: true
password: $2y$10$DLRNTRmJgKe1cSrFJ5Jb0edCqvXlA9sh/RHdSnfxjbR.04yZRm4Qm
theme: frio
contact:
-
id: 42
uid: 42
name: Self contact
nick: selfcontact
self: true
nurl: http://localhost/profile/selfcontact
url: http://localhost/profile/selfcontact
about: User used in tests
pending: false
blocked: false
rel: 1
network: dfrn
-
id: 43
uid: 0
# Having the same name and nick allows us to test
# the fallback to api_get_nick() in api_get_user()
name: othercontact
nick: othercontact
self: false
nurl: http://localhost/profile/othercontact
url: http://localhost/profile/othercontact
pending: false
blocked: false
rel: 0
network: dfrn
-
id: 44
uid: 42
name: Friend contact
nick: friendcontact
self: false
nurl: http://localhost/profile/friendcontact
url: http://localhost/profile/friendcontact
pending: false
blocked: false
rel: 2
network: dfrn
item:
-
id: 1
visible: true
contact-id: 42
author-id: 42
owner-id: 42
uid: 42
verb: http://activitystrea.ms/schema/1.0/post
unseen: true
body: Parent status
parent: 1
author-link: http://localhost/profile/selfcontact
wall: true
starred: true
allow_cid: ''
allow_gid: ''
deny_cid: ''
deny_gid: ''
-
id: 2
visible: true
contact-id: 42
author-id: 42
owner-id: 42
uid: 42
verb: http://activitystrea.ms/schema/1.0/post
unseen: false
body: Reply
parent: 1
author-link: http://localhost/profile/selfcontact
wall: true
starred: false
-
id: 3
visible: true
contact-id: 43
author-id: 43
owner-id: 42
uid: 42
verb: http://activitystrea.ms/schema/1.0/post
unseen: false
body: Other user status
parent: 3
author-link: http://localhost/profile/othercontact
wall: true
starred: false
-
id: 4
visible: true
contact-id: 43
author-id: 43
owner-id: 42
uid: 42
verb: http://activitystrea.ms/schema/1.0/post
unseen: false
body: Other user reply
parent: 1
author-link: http://localhost/profile/othercontact
wall: true
starred: false
-
id: 5
visible: true
contact-id: 42
author-id: 42
owner-id: 42
uid: 42
verb: http://activitystrea.ms/schema/1.0/post
unseen: false
body: '[share]Shared status[/share]'
parent: 1
author-link: http://localhost/profile/othercontact
wall: true
starred: false
allow_cid: ''
allow_gid: ''
deny_cid: ''
deny_gid: ''
-
id: 6
visible: true
contact-id: 44
author-id: 44
owner-id: 42
uid: 42
verb: http://activitystrea.ms/schema/1.0/post
unseen: false
body: Friend user status
parent: 6
author-link: http://localhost/profile/othercontact
wall: true
starred: false
thread:
-
iid: 1
visible: true
contact-id: 42
uid: 42
wall: true
-
iid: 3
visible: true
contact-id: 43
uid: 0
wall: true
-
iid: 6
visible: true
contact-id: 44
uid: 0
wall: true
group:
-
id: 1
uid: 42
visible: true
name: Visible list
-
id: 2
uid: 42
visible: false
name: Private list
search:
-
id: 1
term: Saved search
uid: 42

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -69,7 +69,92 @@ $a->strings["Welcome "] = "Willkommen ";
$a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch."; $a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch.";
$a->strings["Welcome back "] = "Willkommen zurück "; $a->strings["Welcome back "] = "Willkommen zurück ";
$a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden)."; $a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden).";
$a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbankserver '%s' nicht ermitteln."; $a->strings["newer"] = "neuer";
$a->strings["older"] = "älter";
$a->strings["first"] = "erste";
$a->strings["prev"] = "vorige";
$a->strings["next"] = "nächste";
$a->strings["last"] = "letzte";
$a->strings["Loading more entries..."] = "lade weitere Einträge...";
$a->strings["The end"] = "Das Ende";
$a->strings["No contacts"] = "Keine Kontakte";
$a->strings["%d Contact"] = [
0 => "%d Kontakt",
1 => "%d Kontakte",
];
$a->strings["View Contacts"] = "Kontakte anzeigen";
$a->strings["Save"] = "Speichern";
$a->strings["Follow"] = "Folge";
$a->strings["Search"] = "Suche";
$a->strings["@name, !forum, #tags, content"] = "@name, !forum, #tags, content";
$a->strings["Full Text"] = "Volltext";
$a->strings["Tags"] = "Tags";
$a->strings["Contacts"] = "Kontakte";
$a->strings["Forums"] = "Foren";
$a->strings["poke"] = "anstupsen";
$a->strings["poked"] = "stupste";
$a->strings["ping"] = "anpingen";
$a->strings["pinged"] = "pingte";
$a->strings["prod"] = "knuffen";
$a->strings["prodded"] = "knuffte";
$a->strings["slap"] = "ohrfeigen";
$a->strings["slapped"] = "ohrfeigte";
$a->strings["finger"] = "befummeln";
$a->strings["fingered"] = "befummelte";
$a->strings["rebuff"] = "eine Abfuhr erteilen";
$a->strings["rebuffed"] = "abfuhrerteilte";
$a->strings["Monday"] = "Montag";
$a->strings["Tuesday"] = "Dienstag";
$a->strings["Wednesday"] = "Mittwoch";
$a->strings["Thursday"] = "Donnerstag";
$a->strings["Friday"] = "Freitag";
$a->strings["Saturday"] = "Samstag";
$a->strings["Sunday"] = "Sonntag";
$a->strings["January"] = "Januar";
$a->strings["February"] = "Februar";
$a->strings["March"] = "März";
$a->strings["April"] = "April";
$a->strings["May"] = "Mai";
$a->strings["June"] = "Juni";
$a->strings["July"] = "Juli";
$a->strings["August"] = "August";
$a->strings["September"] = "September";
$a->strings["October"] = "Oktober";
$a->strings["November"] = "November";
$a->strings["December"] = "Dezember";
$a->strings["Mon"] = "Mo";
$a->strings["Tue"] = "Di";
$a->strings["Wed"] = "Mi";
$a->strings["Thu"] = "Do";
$a->strings["Fri"] = "Fr";
$a->strings["Sat"] = "Sa";
$a->strings["Sun"] = "So";
$a->strings["Jan"] = "Jan";
$a->strings["Feb"] = "Feb";
$a->strings["Mar"] = "März";
$a->strings["Apr"] = "Apr";
$a->strings["Jul"] = "Juli";
$a->strings["Aug"] = "Aug";
$a->strings["Sep"] = "Sep";
$a->strings["Oct"] = "Okt";
$a->strings["Nov"] = "Nov";
$a->strings["Dec"] = "Dez";
$a->strings["Content warning: %s"] = "Inhaltswarnung: %s";
$a->strings["View Video"] = "Video ansehen";
$a->strings["bytes"] = "Byte";
$a->strings["Click to open/close"] = "Zum öffnen/schließen klicken";
$a->strings["View on separate page"] = "Auf separater Seite ansehen";
$a->strings["view on separate page"] = "auf separater Seite ansehen";
$a->strings["link to source"] = "Link zum Originalbeitrag";
$a->strings["event"] = "Event";
$a->strings["photo"] = "Foto";
$a->strings["activity"] = "Aktivität";
$a->strings["comment"] = [
0 => "Kommentar",
1 => "Kommentare",
];
$a->strings["post"] = "Beitrag";
$a->strings["Item filed"] = "Beitrag abgelegt";
$a->strings["Daily posting limit of %d post reached. The post was rejected."] = [ $a->strings["Daily posting limit of %d post reached. The post was rejected."] = [
0 => "Das tägliche Limit von %d Beitrag wurde erreicht. Die Nachricht wurde verworfen.", 0 => "Das tägliche Limit von %d Beitrag wurde erreicht. Die Nachricht wurde verworfen.",
1 => "Das tägliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen.", 1 => "Das tägliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen.",
@ -80,9 +165,7 @@ $a->strings["Weekly posting limit of %d post reached. The post was rejected."] =
]; ];
$a->strings["Monthly posting limit of %d post reached. The post was rejected."] = "Das monatliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen."; $a->strings["Monthly posting limit of %d post reached. The post was rejected."] = "Das monatliche Limit von %d Beiträgen wurde erreicht. Der Beitrag wurde verworfen.";
$a->strings["Profile Photos"] = "Profilbilder"; $a->strings["Profile Photos"] = "Profilbilder";
$a->strings["event"] = "Event";
$a->strings["status"] = "Status"; $a->strings["status"] = "Status";
$a->strings["photo"] = "Foto";
$a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s"; $a->strings["%1\$s likes %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s";
$a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s nicht"; $a->strings["%1\$s doesn't like %2\$s's %3\$s"] = "%1\$s mag %2\$ss %3\$s nicht";
$a->strings["%1\$s attends %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil."; $a->strings["%1\$s attends %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil.";
@ -196,90 +279,6 @@ $a->strings["Yes"] = "Ja";
$a->strings["Permission denied."] = "Zugriff verweigert."; $a->strings["Permission denied."] = "Zugriff verweigert.";
$a->strings["Archives"] = "Archiv"; $a->strings["Archives"] = "Archiv";
$a->strings["show more"] = "mehr anzeigen"; $a->strings["show more"] = "mehr anzeigen";
$a->strings["newer"] = "neuer";
$a->strings["older"] = "älter";
$a->strings["first"] = "erste";
$a->strings["prev"] = "vorige";
$a->strings["next"] = "nächste";
$a->strings["last"] = "letzte";
$a->strings["Loading more entries..."] = "lade weitere Einträge...";
$a->strings["The end"] = "Das Ende";
$a->strings["No contacts"] = "Keine Kontakte";
$a->strings["%d Contact"] = [
0 => "%d Kontakt",
1 => "%d Kontakte",
];
$a->strings["View Contacts"] = "Kontakte anzeigen";
$a->strings["Save"] = "Speichern";
$a->strings["Follow"] = "Folge";
$a->strings["Search"] = "Suche";
$a->strings["@name, !forum, #tags, content"] = "@name, !forum, #tags, content";
$a->strings["Full Text"] = "Volltext";
$a->strings["Tags"] = "Tags";
$a->strings["Contacts"] = "Kontakte";
$a->strings["Forums"] = "Foren";
$a->strings["poke"] = "anstupsen";
$a->strings["poked"] = "stupste";
$a->strings["ping"] = "anpingen";
$a->strings["pinged"] = "pingte";
$a->strings["prod"] = "knuffen";
$a->strings["prodded"] = "knuffte";
$a->strings["slap"] = "ohrfeigen";
$a->strings["slapped"] = "ohrfeigte";
$a->strings["finger"] = "befummeln";
$a->strings["fingered"] = "befummelte";
$a->strings["rebuff"] = "eine Abfuhr erteilen";
$a->strings["rebuffed"] = "abfuhrerteilte";
$a->strings["Monday"] = "Montag";
$a->strings["Tuesday"] = "Dienstag";
$a->strings["Wednesday"] = "Mittwoch";
$a->strings["Thursday"] = "Donnerstag";
$a->strings["Friday"] = "Freitag";
$a->strings["Saturday"] = "Samstag";
$a->strings["Sunday"] = "Sonntag";
$a->strings["January"] = "Januar";
$a->strings["February"] = "Februar";
$a->strings["March"] = "März";
$a->strings["April"] = "April";
$a->strings["May"] = "Mai";
$a->strings["June"] = "Juni";
$a->strings["July"] = "Juli";
$a->strings["August"] = "August";
$a->strings["September"] = "September";
$a->strings["October"] = "Oktober";
$a->strings["November"] = "November";
$a->strings["December"] = "Dezember";
$a->strings["Mon"] = "Mo";
$a->strings["Tue"] = "Di";
$a->strings["Wed"] = "Mi";
$a->strings["Thu"] = "Do";
$a->strings["Fri"] = "Fr";
$a->strings["Sat"] = "Sa";
$a->strings["Sun"] = "So";
$a->strings["Jan"] = "Jan";
$a->strings["Feb"] = "Feb";
$a->strings["Mar"] = "März";
$a->strings["Apr"] = "Apr";
$a->strings["Jul"] = "Juli";
$a->strings["Aug"] = "Aug";
$a->strings["Sep"] = "Sep";
$a->strings["Oct"] = "Okt";
$a->strings["Nov"] = "Nov";
$a->strings["Dec"] = "Dez";
$a->strings["Content warning: %s"] = "Inhaltswarnung: %s";
$a->strings["View Video"] = "Video ansehen";
$a->strings["bytes"] = "Byte";
$a->strings["Click to open/close"] = "Zum öffnen/schließen klicken";
$a->strings["View on separate page"] = "Auf separater Seite ansehen";
$a->strings["view on separate page"] = "auf separater Seite ansehen";
$a->strings["link to source"] = "Link zum Originalbeitrag";
$a->strings["activity"] = "Aktivität";
$a->strings["comment"] = [
0 => "Kommentar",
1 => "Kommentare",
];
$a->strings["post"] = "Beitrag";
$a->strings["Item filed"] = "Beitrag abgelegt";
$a->strings["No friends to display."] = "Keine Kontakte zum Anzeigen."; $a->strings["No friends to display."] = "Keine Kontakte zum Anzeigen.";
$a->strings["Connect"] = "Verbinden"; $a->strings["Connect"] = "Verbinden";
$a->strings["Authorize application connection"] = "Verbindung der Applikation autorisieren"; $a->strings["Authorize application connection"] = "Verbindung der Applikation autorisieren";
@ -403,14 +402,6 @@ $a->strings["All Contacts (with secure profile access)"] = "Alle Kontakte (mit g
$a->strings["Account approved."] = "Konto freigegeben."; $a->strings["Account approved."] = "Konto freigegeben.";
$a->strings["Registration revoked for %s"] = "Registrierung für %s wurde zurückgezogen"; $a->strings["Registration revoked for %s"] = "Registrierung für %s wurde zurückgezogen";
$a->strings["Please login."] = "Bitte melde Dich an."; $a->strings["Please login."] = "Bitte melde Dich an.";
$a->strings["Remove term"] = "Begriff entfernen";
$a->strings["Saved Searches"] = "Gespeicherte Suchen";
$a->strings["Only logged in users are permitted to perform a search."] = "Nur eingeloggten Benutzern ist das Suchen gestattet.";
$a->strings["Too Many Requests"] = "Zu viele Abfragen";
$a->strings["Only one search per minute is permitted for not logged in users."] = "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet.";
$a->strings["No results."] = "Keine Ergebnisse.";
$a->strings["Items tagged with: %s"] = "Beiträge die mit %s getaggt sind";
$a->strings["Results for: %s"] = "Ergebnisse für: %s";
$a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s folgt %2\$s %3\$s"; $a->strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s folgt %2\$s %3\$s";
$a->strings["Tag removed"] = "Tag entfernt"; $a->strings["Tag removed"] = "Tag entfernt";
$a->strings["Remove Item Tag"] = "Gegenstands-Tag entfernen"; $a->strings["Remove Item Tag"] = "Gegenstands-Tag entfernen";
@ -449,63 +440,6 @@ $a->strings["Contact not found."] = "Kontakt nicht gefunden.";
$a->strings["Friend suggestion sent."] = "Kontaktvorschlag gesendet."; $a->strings["Friend suggestion sent."] = "Kontaktvorschlag gesendet.";
$a->strings["Suggest Friends"] = "Kontakte vorschlagen"; $a->strings["Suggest Friends"] = "Kontakte vorschlagen";
$a->strings["Suggest a friend for %s"] = "Schlage %s einen Kontakt vor"; $a->strings["Suggest a friend for %s"] = "Schlage %s einen Kontakt vor";
$a->strings["Personal Notes"] = "Persönliche Notizen";
$a->strings["Photo Albums"] = "Fotoalben";
$a->strings["Recent Photos"] = "Neueste Fotos";
$a->strings["Upload New Photos"] = "Neue Fotos hochladen";
$a->strings["everybody"] = "jeder";
$a->strings["Contact information unavailable"] = "Kontaktinformationen nicht verfügbar";
$a->strings["Album not found."] = "Album nicht gefunden.";
$a->strings["Delete Album"] = "Album löschen";
$a->strings["Do you really want to delete this photo album and all its photos?"] = "Möchtest Du wirklich dieses Foto-Album und all seine Foto löschen?";
$a->strings["Delete Photo"] = "Foto löschen";
$a->strings["Do you really want to delete this photo?"] = "Möchtest Du wirklich dieses Foto löschen?";
$a->strings["a photo"] = "einem Foto";
$a->strings["%1\$s was tagged in %2\$s by %3\$s"] = "%1\$s wurde von %3\$s in %2\$s getaggt";
$a->strings["Image upload didn't complete, please try again"] = "Der Upload des Bildes war nicht vollständig. Bitte versuche es erneut.";
$a->strings["Image file is missing"] = "Bilddatei konnte nicht gefunden werden.";
$a->strings["Server can't accept new file upload at this time, please contact your administrator"] = "Der Server kann derzeit keine neuen Datei Uploads akzeptieren. Bitte kontaktiere deinen Administrator.";
$a->strings["Image file is empty."] = "Bilddatei ist leer.";
$a->strings["No photos selected"] = "Keine Bilder ausgewählt";
$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschränkt.";
$a->strings["Upload Photos"] = "Bilder hochladen";
$a->strings["New album name: "] = "Name des neuen Albums: ";
$a->strings["or existing album name: "] = "oder existierender Albumname: ";
$a->strings["Do not show a status post for this upload"] = "Keine Status-Mitteilung für diesen Beitrag anzeigen";
$a->strings["Permissions"] = "Berechtigungen";
$a->strings["Show to Groups"] = "Zeige den Gruppen";
$a->strings["Show to Contacts"] = "Zeige den Kontakten";
$a->strings["Edit Album"] = "Album bearbeiten";
$a->strings["Show Newest First"] = "Zeige neueste zuerst";
$a->strings["Show Oldest First"] = "Zeige älteste zuerst";
$a->strings["View Photo"] = "Foto betrachten";
$a->strings["Permission denied. Access to this item may be restricted."] = "Zugriff verweigert. Zugriff zu diesem Eintrag könnte eingeschränkt sein.";
$a->strings["Photo not available"] = "Foto nicht verfügbar";
$a->strings["View photo"] = "Fotos ansehen";
$a->strings["Edit photo"] = "Foto bearbeiten";
$a->strings["Use as profile photo"] = "Als Profilbild verwenden";
$a->strings["Private Message"] = "Private Nachricht";
$a->strings["View Full Size"] = "Betrachte Originalgröße";
$a->strings["Tags: "] = "Tags: ";
$a->strings["[Remove any tag]"] = "[Tag entfernen]";
$a->strings["New album name"] = "Name des neuen Albums";
$a->strings["Caption"] = "Bildunterschrift";
$a->strings["Add a Tag"] = "Tag hinzufügen";
$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping";
$a->strings["Do not rotate"] = "Nicht rotieren";
$a->strings["Rotate CW (right)"] = "Drehen US (rechts)";
$a->strings["Rotate CCW (left)"] = "Drehen EUS (links)";
$a->strings["I like this (toggle)"] = "Ich mag das (toggle)";
$a->strings["I don't like this (toggle)"] = "Ich mag das nicht (toggle)";
$a->strings["This is you"] = "Das bist Du";
$a->strings["Comment"] = "Kommentar";
$a->strings["Map"] = "Karte";
$a->strings["View Album"] = "Album betrachten";
$a->strings["Do you really want to delete this video?"] = "Möchtest Du dieses Video wirklich löschen?";
$a->strings["Delete Video"] = "Video Löschen";
$a->strings["No videos selected"] = "Keine Videos ausgewählt";
$a->strings["Recent Videos"] = "Neueste Videos";
$a->strings["Upload New Videos"] = "Neues Video hochladen";
$a->strings["Access to this profile has been restricted."] = "Der Zugriff zu diesem Profil wurde eingeschränkt."; $a->strings["Access to this profile has been restricted."] = "Der Zugriff zu diesem Profil wurde eingeschränkt.";
$a->strings["Events"] = "Veranstaltungen"; $a->strings["Events"] = "Veranstaltungen";
$a->strings["View"] = "Ansehen"; $a->strings["View"] = "Ansehen";
@ -605,6 +539,7 @@ $a->strings["Only show archived contacts"] = "Nur archivierte Kontakte anzeigen"
$a->strings["Hidden"] = "Verborgen"; $a->strings["Hidden"] = "Verborgen";
$a->strings["Only show hidden contacts"] = "Nur verborgene Kontakte anzeigen"; $a->strings["Only show hidden contacts"] = "Nur verborgene Kontakte anzeigen";
$a->strings["Search your contacts"] = "Suche in deinen Kontakten"; $a->strings["Search your contacts"] = "Suche in deinen Kontakten";
$a->strings["Results for: %s"] = "Ergebnisse für: %s";
$a->strings["Find"] = "Finde"; $a->strings["Find"] = "Finde";
$a->strings["Update"] = "Aktualisierungen"; $a->strings["Update"] = "Aktualisierungen";
$a->strings["Archive"] = "Archivieren"; $a->strings["Archive"] = "Archivieren";
@ -619,6 +554,7 @@ $a->strings["Advanced Contact Settings"] = "Fortgeschrittene Kontakteinstellunge
$a->strings["Mutual Friendship"] = "Beidseitige Freundschaft"; $a->strings["Mutual Friendship"] = "Beidseitige Freundschaft";
$a->strings["is a fan of yours"] = "ist ein Fan von dir"; $a->strings["is a fan of yours"] = "ist ein Fan von dir";
$a->strings["you are a fan of"] = "Du bist Fan von"; $a->strings["you are a fan of"] = "Du bist Fan von";
$a->strings["This is you"] = "Das bist Du";
$a->strings["Toggle Blocked status"] = "Geblockt-Status ein-/ausschalten"; $a->strings["Toggle Blocked status"] = "Geblockt-Status ein-/ausschalten";
$a->strings["Toggle Ignored status"] = "Ignoriert-Status ein-/ausschalten"; $a->strings["Toggle Ignored status"] = "Ignoriert-Status ein-/ausschalten";
$a->strings["Toggle Archive status"] = "Archiviert-Status ein-/ausschalten"; $a->strings["Toggle Archive status"] = "Archiviert-Status ein-/ausschalten";
@ -637,22 +573,6 @@ $a->strings["Existing Page Delegates"] = "Vorhandene Bevollmächtigte für die S
$a->strings["Potential Delegates"] = "Potentielle Bevollmächtigte"; $a->strings["Potential Delegates"] = "Potentielle Bevollmächtigte";
$a->strings["Add"] = "Hinzufügen"; $a->strings["Add"] = "Hinzufügen";
$a->strings["No entries."] = "Keine Einträge."; $a->strings["No entries."] = "Keine Einträge.";
$a->strings["Event can not end before it has started."] = "Die Veranstaltung kann nicht enden bevor sie beginnt.";
$a->strings["Event title and start time are required."] = "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden.";
$a->strings["Create New Event"] = "Neue Veranstaltung erstellen";
$a->strings["Event details"] = "Veranstaltungsdetails";
$a->strings["Starting date and Title are required."] = "Anfangszeitpunkt und Titel werden benötigt";
$a->strings["Event Starts:"] = "Veranstaltungsbeginn:";
$a->strings["Required"] = "Benötigt";
$a->strings["Finish date/time is not known or not relevant"] = "Enddatum/-zeit ist nicht bekannt oder nicht relevant";
$a->strings["Event Finishes:"] = "Veranstaltungsende:";
$a->strings["Adjust for viewer timezone"] = "An Zeitzone des Betrachters anpassen";
$a->strings["Description:"] = "Beschreibung";
$a->strings["Title:"] = "Titel:";
$a->strings["Share this event"] = "Veranstaltung teilen";
$a->strings["Basic"] = "Allgemein";
$a->strings["Failed to remove event"] = "Entfernen der Veranstaltung fehlgeschlagen";
$a->strings["Event removed"] = "Veranstaltung enfternt";
$a->strings["You must be logged in to use this module"] = "Du musst eingeloggt sein um dieses Modul benutzen zu können."; $a->strings["You must be logged in to use this module"] = "Du musst eingeloggt sein um dieses Modul benutzen zu können.";
$a->strings["Source URL"] = "URL der Quelle"; $a->strings["Source URL"] = "URL der Quelle";
$a->strings["Post successful."] = "Beitrag erfolgreich veröffentlicht."; $a->strings["Post successful."] = "Beitrag erfolgreich veröffentlicht.";
@ -739,13 +659,6 @@ $a->strings["Source text"] = "Quelltext";
$a->strings["BBCode"] = "BBCode"; $a->strings["BBCode"] = "BBCode";
$a->strings["Markdown"] = "Markdown"; $a->strings["Markdown"] = "Markdown";
$a->strings["HTML"] = "HTML"; $a->strings["HTML"] = "HTML";
$a->strings["Community option not available."] = "Optionen für die Gemeinschaftsseite nicht verfügbar.";
$a->strings["Not available."] = "Nicht verfügbar.";
$a->strings["Local Community"] = "Lokale Gemeinschaft";
$a->strings["Posts from local users on this server"] = "Beiträge von Nutzern dieses Servers";
$a->strings["Global Community"] = "Globale Gemeinschaft";
$a->strings["Posts from users of the whole federated network"] = "Beiträge von Nutzern des gesamten föderalen Netzwerks";
$a->strings["This community stream shows all public posts received by this node. They may not reflect the opinions of this nodes users."] = "Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers.";
$a->strings["This is Friendica, version"] = "Dies ist Friendica, Version"; $a->strings["This is Friendica, version"] = "Dies ist Friendica, Version";
$a->strings["running at web location"] = "die unter folgender Webadresse zu finden ist"; $a->strings["running at web location"] = "die unter folgender Webadresse zu finden ist";
$a->strings["Please visit <a href=\"https://friendi.ca\">Friendi.ca</a> to learn more about the Friendica project."] = "Bitte besuche <a href=\"https://friendi.ca\">Friendi.ca</a> um mehr über das Friendica Projekt zu erfahren."; $a->strings["Please visit <a href=\"https://friendi.ca\">Friendi.ca</a> to learn more about the Friendica project."] = "Bitte besuche <a href=\"https://friendi.ca\">Friendi.ca</a> um mehr über das Friendica Projekt zu erfahren.";
@ -780,29 +693,6 @@ $a->strings["You are cordially invited to join me and other close friends on Fri
$a->strings["You will need to supply this invitation code: \$invite_code"] = "Du benötigst den folgenden Einladungscode: \$invite_code"; $a->strings["You will need to supply this invitation code: \$invite_code"] = "Du benötigst den folgenden Einladungscode: \$invite_code";
$a->strings["Once you have registered, please connect with me via my profile page at:"] = "Sobald Du registriert bist, kontaktiere mich bitte auf meiner Profilseite:"; $a->strings["Once you have registered, please connect with me via my profile page at:"] = "Sobald Du registriert bist, kontaktiere mich bitte auf meiner Profilseite:";
$a->strings["For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca"] = "Für weitere Informationen über das Friendica Projekt und warum wir es für ein wichtiges Projekt halten, besuche bitte http://friendi.ca."; $a->strings["For more information about the Friendica project and why we feel it is important, please visit http://friendi.ca"] = "Für weitere Informationen über das Friendica Projekt und warum wir es für ein wichtiges Projekt halten, besuche bitte http://friendi.ca.";
$a->strings["add"] = "hinzufügen";
$a->strings["Warning: This group contains %s member from a network that doesn't allow non public messages."] = [
0 => "Warnung: Diese Gruppe beinhaltet %s Person aus einem Netzwerk das keine nicht öffentlichen Beiträge empfangen kann.",
1 => "Warnung: Diese Gruppe beinhaltet %s Personen aus Netzwerken die keine nicht-öffentlichen Beiträge empfangen können.",
];
$a->strings["Messages in this group won't be send to these receivers."] = "Beiträge in dieser Gruppe werden deshalb nicht an diese Personen zugestellt werden.";
$a->strings["No such group"] = "Es gibt keine solche Gruppe";
$a->strings["Group is empty"] = "Gruppe ist leer";
$a->strings["Group: %s"] = "Gruppe: %s";
$a->strings["Private messages to this person are at risk of public disclosure."] = "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen.";
$a->strings["Invalid contact."] = "Ungültiger Kontakt.";
$a->strings["Commented Order"] = "Neueste Kommentare";
$a->strings["Sort by Comment Date"] = "Nach Kommentardatum sortieren";
$a->strings["Posted Order"] = "Neueste Beiträge";
$a->strings["Sort by Post Date"] = "Nach Beitragsdatum sortieren";
$a->strings["Personal"] = "Persönlich";
$a->strings["Posts that mention or involve you"] = "Beiträge, in denen es um Dich geht";
$a->strings["New"] = "Neue";
$a->strings["Activity Stream - by date"] = "Aktivitäten-Stream - nach Datum";
$a->strings["Shared Links"] = "Geteilte Links";
$a->strings["Interesting Links"] = "Interessante Links";
$a->strings["Starred"] = "Markierte";
$a->strings["Favourite Posts"] = "Favorisierte Beiträge";
$a->strings["Contact settings applied."] = "Einstellungen zum Kontakt angewandt."; $a->strings["Contact settings applied."] = "Einstellungen zum Kontakt angewandt.";
$a->strings["Contact update failed."] = "Konnte den Kontakt nicht aktualisieren."; $a->strings["Contact update failed."] = "Konnte den Kontakt nicht aktualisieren.";
$a->strings["<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact may stop working."] = "<strong>ACHTUNG: Das sind Experten-Einstellungen!</strong> Wenn Du etwas Falsches eingibst, funktioniert die Kommunikation mit diesem Kontakt evtl. nicht mehr."; $a->strings["<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact may stop working."] = "<strong>ACHTUNG: Das sind Experten-Einstellungen!</strong> Wenn Du etwas Falsches eingibst, funktioniert die Kommunikation mit diesem Kontakt evtl. nicht mehr.";
@ -889,11 +779,172 @@ $a->strings["Delete Group"] = "Gruppe löschen";
$a->strings["Group Editor"] = "Gruppeneditor"; $a->strings["Group Editor"] = "Gruppeneditor";
$a->strings["Edit Group Name"] = "Gruppen Name bearbeiten"; $a->strings["Edit Group Name"] = "Gruppen Name bearbeiten";
$a->strings["Members"] = "Mitglieder"; $a->strings["Members"] = "Mitglieder";
$a->strings["Group is empty"] = "Gruppe ist leer";
$a->strings["Remove contact from group"] = "Entferne den Kontakt aus der Gruppe"; $a->strings["Remove contact from group"] = "Entferne den Kontakt aus der Gruppe";
$a->strings["Add contact to group"] = "Füge den Kontakt zur Gruppe hinzu"; $a->strings["Add contact to group"] = "Füge den Kontakt zur Gruppe hinzu";
$a->strings["OpenID protocol error. No ID returned."] = "OpenID Protokollfehler. Keine ID zurückgegeben."; $a->strings["OpenID protocol error. No ID returned."] = "OpenID Protokollfehler. Keine ID zurückgegeben.";
$a->strings["Account not found and OpenID registration is not permitted on this site."] = "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet."; $a->strings["Account not found and OpenID registration is not permitted on this site."] = "Nutzerkonto wurde nicht gefunden und OpenID-Registrierung ist auf diesem Server nicht gestattet.";
$a->strings["Login failed."] = "Anmeldung fehlgeschlagen."; $a->strings["Login failed."] = "Anmeldung fehlgeschlagen.";
$a->strings["Profile not found."] = "Profil nicht gefunden.";
$a->strings["This may occasionally happen if contact was requested by both persons and it has already been approved."] = "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde.";
$a->strings["Response from remote site was not understood."] = "Antwort der Gegenstelle unverständlich.";
$a->strings["Unexpected response from remote site: "] = "Unerwartete Antwort der Gegenstelle: ";
$a->strings["Confirmation completed successfully."] = "Bestätigung erfolgreich abgeschlossen.";
$a->strings["Temporary failure. Please wait and try again."] = "Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal.";
$a->strings["Introduction failed or was revoked."] = "Kontaktanfrage schlug fehl oder wurde zurückgezogen.";
$a->strings["Remote site reported: "] = "Gegenstelle meldet: ";
$a->strings["Unable to set contact photo."] = "Konnte das Bild des Kontakts nicht speichern.";
$a->strings["No user record found for '%s' "] = "Für '%s' wurde kein Nutzer gefunden";
$a->strings["Our site encryption key is apparently messed up."] = "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend nicht in Ordnung.";
$a->strings["Empty site URL was provided or URL could not be decrypted by us."] = "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden.";
$a->strings["Contact record was not found for you on our site."] = "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden.";
$a->strings["Site public key not available in contact record for URL %s."] = "Die Kontaktdaten für URL %s enthalten keinen Public Key für den Server.";
$a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = "Die ID, die uns Dein System angeboten hat, ist hier bereits vergeben. Bitte versuche es noch einmal.";
$a->strings["Unable to set your contact credentials on our system."] = "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden.";
$a->strings["Unable to update your contact profile details on our system"] = "Die Updates für Dein Profil konnten nicht gespeichert werden";
$a->strings["[Name Withheld]"] = "[Name unterdrückt]";
$a->strings["This introduction has already been accepted."] = "Diese Kontaktanfrage wurde bereits akzeptiert.";
$a->strings["Profile location is not valid or does not contain profile information."] = "Profiladresse ist ungültig oder stellt keine Profildaten zur Verfügung.";
$a->strings["Warning: profile location has no identifiable owner name."] = "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden.";
$a->strings["Warning: profile location has no profile photo."] = "Warnung: Es gibt kein Profilbild bei der angegebenen Profiladresse.";
$a->strings["%d required parameter was not found at the given location"] = [
0 => "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden",
1 => "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden",
];
$a->strings["Introduction complete."] = "Kontaktanfrage abgeschlossen.";
$a->strings["Unrecoverable protocol error."] = "Nicht behebbarer Protokollfehler.";
$a->strings["Profile unavailable."] = "Profil nicht verfügbar.";
$a->strings["%s has received too many connection requests today."] = "%s hat heute zu viele Kontaktanfragen erhalten.";
$a->strings["Spam protection measures have been invoked."] = "Maßnahmen zum Spamschutz wurden ergriffen.";
$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen.";
$a->strings["Invalid locator"] = "Ungültiger Locator";
$a->strings["You have already introduced yourself here."] = "Du hast Dich hier bereits vorgestellt.";
$a->strings["Apparently you are already friends with %s."] = "Es scheint so, als ob Du bereits mit %s in Kontakt stehst.";
$a->strings["Invalid profile URL."] = "Ungültige Profil-URL.";
$a->strings["Disallowed profile URL."] = "Nicht erlaubte Profil-URL.";
$a->strings["Your introduction has been sent."] = "Deine Kontaktanfrage wurde gesendet.";
$a->strings["Remote subscription can't be done for your network. Please subscribe directly on your system."] = "Entferntes abon­nie­ren kann für dein Netzwerk nicht durchgeführt werden. Bitte nutze direkt die Abonnieren-Funktion deines Systems. ";
$a->strings["Please login to confirm introduction."] = "Bitte melde Dich an, um die Kontaktanfrage zu bestätigen.";
$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Momentan bist Du mit einer anderen Identität angemeldet. Bitte melde Dich mit <strong>diesem</strong> Profil an.";
$a->strings["Confirm"] = "Bestätigen";
$a->strings["Hide this contact"] = "Verberge diesen Kontakt";
$a->strings["Welcome home %s."] = "Willkommen zurück %s.";
$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige Deine Kontaktanfrage bei %s.";
$a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:";
$a->strings["If you are not yet a member of the free social web, <a href=\"%s\">follow this link to find a public Friendica site and join us today</a>."] = "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, <a href=\"%s\">folge diesem Link</a> um einen öffentlichen Friendica Server zu finden und beizutreten.";
$a->strings["Friend/Connection Request"] = "Kontaktanfrage";
$a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@gnusocial.de"] = "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@gnusocial.de";
$a->strings["Friendica"] = "Friendica";
$a->strings["GNU Social (Pleroma, Mastodon)"] = "GNU Social (Pleroma, Mastodon)";
$a->strings["Diaspora (Socialhome, Hubzilla)"] = "Diaspora (Socialhome, Hubzilla)";
$a->strings[" - please do not use this form. Instead, enter %s into your Diaspora search bar."] = " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste.";
$a->strings["Invalid request identifier."] = "Invalid request identifier.";
$a->strings["Discard"] = "Verwerfen";
$a->strings["Notifications"] = "Benachrichtigungen";
$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen";
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
$a->strings["Home Notifications"] = "Pinnwand Benachrichtigungen";
$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen";
$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen";
$a->strings["Notification type: "] = "Benachrichtigungstyp: ";
$a->strings["suggested by %s"] = "vorgeschlagen von %s";
$a->strings["Approve"] = "Genehmigen";
$a->strings["Claims to be known to you: "] = "Behauptet Dich zu kennen: ";
$a->strings["yes"] = "ja";
$a->strings["no"] = "nein";
$a->strings["Shall your connection be bidirectional or not?"] = "Soll die Verbindung beidseitig sein oder nicht?";
$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s.";
$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Teilenden akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten.";
$a->strings["Friend"] = "Kontakt";
$a->strings["Sharer"] = "Teilenden";
$a->strings["Subscriber"] = "Abonnent";
$a->strings["No introductions."] = "Keine Kontaktanfragen.";
$a->strings["Show unread"] = "Ungelesene anzeigen";
$a->strings["Show all"] = "Alle anzeigen";
$a->strings["No more %s notifications."] = "Keine weiteren %s Benachrichtigungen";
$a->strings["Profile deleted."] = "Profil gelöscht.";
$a->strings["Profile-"] = "Profil-";
$a->strings["New profile created."] = "Neues Profil angelegt.";
$a->strings["Profile unavailable to clone."] = "Profil nicht zum Duplizieren verfügbar.";
$a->strings["Profile Name is required."] = "Profilname ist erforderlich.";
$a->strings["Marital Status"] = "Familienstand";
$a->strings["Romantic Partner"] = "Romanze";
$a->strings["Work/Employment"] = "Arbeit / Beschäftigung";
$a->strings["Religion"] = "Religion";
$a->strings["Political Views"] = "Politische Ansichten";
$a->strings["Gender"] = "Geschlecht";
$a->strings["Sexual Preference"] = "Sexuelle Vorlieben";
$a->strings["XMPP"] = "XMPP";
$a->strings["Homepage"] = "Webseite";
$a->strings["Interests"] = "Interessen";
$a->strings["Address"] = "Adresse";
$a->strings["Location"] = "Wohnort";
$a->strings["Profile updated."] = "Profil aktualisiert.";
$a->strings["Hide contacts and friends:"] = "Kontakte und Freunde verbergen";
$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Liste der Kontakte vor Betrachtern dieses Profils verbergen?";
$a->strings["Show more profile fields:"] = "Zeige mehr Profil-Felder:";
$a->strings["Profile Actions"] = "Profilaktionen";
$a->strings["Edit Profile Details"] = "Profil bearbeiten";
$a->strings["Change Profile Photo"] = "Profilbild ändern";
$a->strings["View this profile"] = "Dieses Profil anzeigen";
$a->strings["Edit visibility"] = "Sichtbarkeit bearbeiten";
$a->strings["Create a new profile using these settings"] = "Neues Profil anlegen und diese Einstellungen verwenden";
$a->strings["Clone this profile"] = "Dieses Profil duplizieren";
$a->strings["Delete this profile"] = "Dieses Profil löschen";
$a->strings["Basic information"] = "Grundinformationen";
$a->strings["Profile picture"] = "Profilbild";
$a->strings["Preferences"] = "Vorlieben";
$a->strings["Status information"] = "Status Informationen";
$a->strings["Additional information"] = "Zusätzliche Informationen";
$a->strings["Personal"] = "Persönlich";
$a->strings["Relation"] = "Beziehung";
$a->strings["Miscellaneous"] = "Verschiedenes";
$a->strings["Your Gender:"] = "Dein Geschlecht:";
$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Beziehungsstatus:";
$a->strings["Sexual Preference:"] = "Sexuelle Vorlieben:";
$a->strings["Example: fishing photography software"] = "Beispiel: Fischen Fotografie Software";
$a->strings["Profile Name:"] = "Profilname:";
$a->strings["Required"] = "Benötigt";
$a->strings["This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet."] = "Dies ist Dein <strong>öffentliches</strong> Profil.<br />Es <strong>könnte</strong> für jeden Nutzer des Internets sichtbar sein.";
$a->strings["Your Full Name:"] = "Dein kompletter Name:";
$a->strings["Title/Description:"] = "Titel/Beschreibung:";
$a->strings["Street Address:"] = "Adresse:";
$a->strings["Locality/City:"] = "Wohnort:";
$a->strings["Region/State:"] = "Region/Bundesstaat:";
$a->strings["Postal/Zip Code:"] = "Postleitzahl:";
$a->strings["Country:"] = "Land:";
$a->strings["Age: "] = "Alter: ";
$a->strings["Who: (if applicable)"] = "Wer: (falls anwendbar)";
$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiele: cathy123, Cathy Williams, cathy@example.com";
$a->strings["Since [date]:"] = "Seit [Datum]:";
$a->strings["Tell us about yourself..."] = "Erzähle uns ein bisschen von Dir …";
$a->strings["XMPP (Jabber) address:"] = "XMPP (Jabber) Adresse";
$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = "Die XMPP Adresse wird an deine Kontakte verteilt werden, so dass sie auch über XMPP mit dir in Kontakt treten können.";
$a->strings["Homepage URL:"] = "Adresse der Homepage:";
$a->strings["Hometown:"] = "Heimatort:";
$a->strings["Political Views:"] = "Politische Ansichten:";
$a->strings["Religious Views:"] = "Religiöse Ansichten:";
$a->strings["Public Keywords:"] = "Öffentliche Schlüsselwörter:";
$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "(Wird verwendet, um potentielle Kontakte zu finden, kann von Kontakten eingesehen werden)";
$a->strings["Private Keywords:"] = "Private Schlüsselwörter:";
$a->strings["(Used for searching profiles, never shown to others)"] = "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)";
$a->strings["Likes:"] = "Likes:";
$a->strings["Dislikes:"] = "Dislikes:";
$a->strings["Musical interests"] = "Musikalische Interessen";
$a->strings["Books, literature"] = "Bücher, Literatur";
$a->strings["Television"] = "Fernsehen";
$a->strings["Film/dance/culture/entertainment"] = "Filme/Tänze/Kultur/Unterhaltung";
$a->strings["Hobbies/Interests"] = "Hobbies/Interessen";
$a->strings["Love/romance"] = "Liebe/Romantik";
$a->strings["Work/employment"] = "Arbeit/Anstellung";
$a->strings["School/education"] = "Schule/Ausbildung";
$a->strings["Contact information and Social Networks"] = "Kontaktinformationen und Soziale Netzwerke";
$a->strings["Profile Image"] = "Profilbild";
$a->strings["visible to everybody"] = "sichtbar für jeden";
$a->strings["Edit/Manage Profiles"] = "Bearbeite/Verwalte Profile";
$a->strings["Change profile photo"] = "Profilbild ändern";
$a->strings["Create New Profile"] = "Neues Profil anlegen";
$a->strings["Theme settings updated."] = "Themeneinstellungen aktualisiert."; $a->strings["Theme settings updated."] = "Themeneinstellungen aktualisiert.";
$a->strings["Information"] = "Information"; $a->strings["Information"] = "Information";
$a->strings["Overview"] = "Übersicht"; $a->strings["Overview"] = "Übersicht";
@ -961,7 +1012,6 @@ $a->strings["No remote contact is blocked from this node."] = "Derzeit werden ke
$a->strings["Blocked Remote Contacts"] = "Blockierte Kontakte von anderen Knoten"; $a->strings["Blocked Remote Contacts"] = "Blockierte Kontakte von anderen Knoten";
$a->strings["Block New Remote Contact"] = "Blockieren von weiteren Kontakten"; $a->strings["Block New Remote Contact"] = "Blockieren von weiteren Kontakten";
$a->strings["Photo"] = "Foto:"; $a->strings["Photo"] = "Foto:";
$a->strings["Address"] = "Adresse";
$a->strings["%s total blocked contact"] = [ $a->strings["%s total blocked contact"] = [
0 => "Insgesamt %s blockierter Kontakt", 0 => "Insgesamt %s blockierter Kontakt",
1 => "Insgesamt %s blockierte Kontakte", 1 => "Insgesamt %s blockierte Kontakte",
@ -1083,6 +1133,7 @@ $a->strings["Block public"] = "Öffentlichen Zugriff blockieren";
$a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."] = "Klicken, um öffentlichen Zugriff auf sonst öffentliche Profile zu blockieren, wenn man nicht eingeloggt ist."; $a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."] = "Klicken, um öffentlichen Zugriff auf sonst öffentliche Profile zu blockieren, wenn man nicht eingeloggt ist.";
$a->strings["Force publish"] = "Erzwinge Veröffentlichung"; $a->strings["Force publish"] = "Erzwinge Veröffentlichung";
$a->strings["Check to force all profiles on this site to be listed in the site directory."] = "Klicken, um Anzeige aller Profile dieses Servers im Verzeichnis zu erzwingen."; $a->strings["Check to force all profiles on this site to be listed in the site directory."] = "Klicken, um Anzeige aller Profile dieses Servers im Verzeichnis zu erzwingen.";
$a->strings["Enabling this may violate privacy laws like the GDPR"] = "Wenn du diese Option aktivierst, verstößt das unter Umständen gegen Gesetze wie die EU-DSGVO.";
$a->strings["Global directory URL"] = "URL des weltweiten Verzeichnisses"; $a->strings["Global directory URL"] = "URL des weltweiten Verzeichnisses";
$a->strings["URL to the global directory. If this is not set, the global directory is completely unavailable to the application."] = "URL des weltweiten Verzeichnisses. Wenn diese nicht gesetzt ist, ist das Verzeichnis für die Applikation nicht erreichbar."; $a->strings["URL to the global directory. If this is not set, the global directory is completely unavailable to the application."] = "URL des weltweiten Verzeichnisses. Wenn diese nicht gesetzt ist, ist das Verzeichnis für die Applikation nicht erreichbar.";
$a->strings["Private posts by default for new users"] = "Private Beiträge als Standard für neue Nutzer"; $a->strings["Private posts by default for new users"] = "Private Beiträge als Standard für neue Nutzer";
@ -1241,7 +1292,6 @@ $a->strings["User waiting for permanent deletion"] = "Nutzer wartet auf permanen
$a->strings["Request date"] = "Anfragedatum"; $a->strings["Request date"] = "Anfragedatum";
$a->strings["No registrations."] = "Keine Neuanmeldungen."; $a->strings["No registrations."] = "Keine Neuanmeldungen.";
$a->strings["Note from the user"] = "Hinweis vom Nutzer"; $a->strings["Note from the user"] = "Hinweis vom Nutzer";
$a->strings["Approve"] = "Genehmigen";
$a->strings["Deny"] = "Verwehren"; $a->strings["Deny"] = "Verwehren";
$a->strings["Site admin"] = "Seitenadministrator"; $a->strings["Site admin"] = "Seitenadministrator";
$a->strings["Account expired"] = "Account ist abgelaufen"; $a->strings["Account expired"] = "Account ist abgelaufen";
@ -1284,173 +1334,114 @@ $a->strings["Off"] = "Aus";
$a->strings["On"] = "An"; $a->strings["On"] = "An";
$a->strings["Lock feature %s"] = "Feature festlegen: %s"; $a->strings["Lock feature %s"] = "Feature festlegen: %s";
$a->strings["Manage Additional Features"] = "Zusätzliche Features Verwalten"; $a->strings["Manage Additional Features"] = "Zusätzliche Features Verwalten";
$a->strings["Profile not found."] = "Profil nicht gefunden."; $a->strings["Community option not available."] = "Optionen für die Gemeinschaftsseite nicht verfügbar.";
$a->strings["This may occasionally happen if contact was requested by both persons and it has already been approved."] = "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde."; $a->strings["Not available."] = "Nicht verfügbar.";
$a->strings["Response from remote site was not understood."] = "Antwort der Gegenstelle unverständlich."; $a->strings["Local Community"] = "Lokale Gemeinschaft";
$a->strings["Unexpected response from remote site: "] = "Unerwartete Antwort der Gegenstelle: "; $a->strings["Posts from local users on this server"] = "Beiträge von Nutzern dieses Servers";
$a->strings["Confirmation completed successfully."] = "Bestätigung erfolgreich abgeschlossen."; $a->strings["Global Community"] = "Globale Gemeinschaft";
$a->strings["Temporary failure. Please wait and try again."] = "Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal."; $a->strings["Posts from users of the whole federated network"] = "Beiträge von Nutzern des gesamten föderalen Netzwerks";
$a->strings["Introduction failed or was revoked."] = "Kontaktanfrage schlug fehl oder wurde zurückgezogen."; $a->strings["No results."] = "Keine Ergebnisse.";
$a->strings["Remote site reported: "] = "Gegenstelle meldet: "; $a->strings["This community stream shows all public posts received by this node. They may not reflect the opinions of this nodes users."] = "Diese Gemeinschaftsseite zeigt alle öffentlichen Beiträge, die auf diesem Knoten eingegangen sind. Der Inhalt entspricht nicht zwingend der Meinung der Nutzer dieses Servers.";
$a->strings["Unable to set contact photo."] = "Konnte das Bild des Kontakts nicht speichern."; $a->strings["Event can not end before it has started."] = "Die Veranstaltung kann nicht enden bevor sie beginnt.";
$a->strings["No user record found for '%s' "] = "Für '%s' wurde kein Nutzer gefunden"; $a->strings["Event title and start time are required."] = "Der Veranstaltungstitel und die Anfangszeit müssen angegeben werden.";
$a->strings["Our site encryption key is apparently messed up."] = "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend nicht in Ordnung."; $a->strings["Create New Event"] = "Neue Veranstaltung erstellen";
$a->strings["Empty site URL was provided or URL could not be decrypted by us."] = "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden."; $a->strings["Event details"] = "Veranstaltungsdetails";
$a->strings["Contact record was not found for you on our site."] = "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden."; $a->strings["Starting date and Title are required."] = "Anfangszeitpunkt und Titel werden benötigt";
$a->strings["Site public key not available in contact record for URL %s."] = "Die Kontaktdaten für URL %s enthalten keinen Public Key für den Server."; $a->strings["Event Starts:"] = "Veranstaltungsbeginn:";
$a->strings["The ID provided by your system is a duplicate on our system. It should work if you try again."] = "Die ID, die uns Dein System angeboten hat, ist hier bereits vergeben. Bitte versuche es noch einmal."; $a->strings["Finish date/time is not known or not relevant"] = "Enddatum/-zeit ist nicht bekannt oder nicht relevant";
$a->strings["Unable to set your contact credentials on our system."] = "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden."; $a->strings["Event Finishes:"] = "Veranstaltungsende:";
$a->strings["Unable to update your contact profile details on our system"] = "Die Updates für Dein Profil konnten nicht gespeichert werden"; $a->strings["Adjust for viewer timezone"] = "An Zeitzone des Betrachters anpassen";
$a->strings["[Name Withheld]"] = "[Name unterdrückt]"; $a->strings["Description:"] = "Beschreibung";
$a->strings["This introduction has already been accepted."] = "Diese Kontaktanfrage wurde bereits akzeptiert."; $a->strings["Title:"] = "Titel:";
$a->strings["Profile location is not valid or does not contain profile information."] = "Profiladresse ist ungültig oder stellt keine Profildaten zur Verfügung."; $a->strings["Share this event"] = "Veranstaltung teilen";
$a->strings["Warning: profile location has no identifiable owner name."] = "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden."; $a->strings["Basic"] = "Allgemein";
$a->strings["Warning: profile location has no profile photo."] = "Warnung: Es gibt kein Profilbild bei der angegebenen Profiladresse."; $a->strings["Permissions"] = "Berechtigungen";
$a->strings["%d required parameter was not found at the given location"] = [ $a->strings["Failed to remove event"] = "Entfernen der Veranstaltung fehlgeschlagen";
0 => "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden", $a->strings["Event removed"] = "Veranstaltung enfternt";
1 => "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden",
];
$a->strings["Introduction complete."] = "Kontaktanfrage abgeschlossen.";
$a->strings["Unrecoverable protocol error."] = "Nicht behebbarer Protokollfehler.";
$a->strings["Profile unavailable."] = "Profil nicht verfügbar.";
$a->strings["%s has received too many connection requests today."] = "%s hat heute zu viele Kontaktanfragen erhalten.";
$a->strings["Spam protection measures have been invoked."] = "Maßnahmen zum Spamschutz wurden ergriffen.";
$a->strings["Friends are advised to please try again in 24 hours."] = "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen.";
$a->strings["Invalid locator"] = "Ungültiger Locator";
$a->strings["You have already introduced yourself here."] = "Du hast Dich hier bereits vorgestellt.";
$a->strings["Apparently you are already friends with %s."] = "Es scheint so, als ob Du bereits mit %s in Kontakt stehst.";
$a->strings["Invalid profile URL."] = "Ungültige Profil-URL.";
$a->strings["Disallowed profile URL."] = "Nicht erlaubte Profil-URL.";
$a->strings["Your introduction has been sent."] = "Deine Kontaktanfrage wurde gesendet.";
$a->strings["Remote subscription can't be done for your network. Please subscribe directly on your system."] = "Entferntes abon­nie­ren kann für dein Netzwerk nicht durchgeführt werden. Bitte nutze direkt die Abonnieren-Funktion deines Systems. ";
$a->strings["Please login to confirm introduction."] = "Bitte melde Dich an, um die Kontaktanfrage zu bestätigen.";
$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Momentan bist Du mit einer anderen Identität angemeldet. Bitte melde Dich mit <strong>diesem</strong> Profil an.";
$a->strings["Confirm"] = "Bestätigen";
$a->strings["Hide this contact"] = "Verberge diesen Kontakt";
$a->strings["Welcome home %s."] = "Willkommen zurück %s.";
$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige Deine Kontaktanfrage bei %s.";
$a->strings["Please enter your 'Identity Address' from one of the following supported communications networks:"] = "Bitte gib die Adresse Deines Profils in einem der unterstützten sozialen Netzwerke an:";
$a->strings["If you are not yet a member of the free social web, <a href=\"%s\">follow this link to find a public Friendica site and join us today</a>."] = "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, <a href=\"%s\">folge diesem Link</a> um einen öffentlichen Friendica Server zu finden und beizutreten.";
$a->strings["Friend/Connection Request"] = "Kontaktanfrage";
$a->strings["Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@gnusocial.de"] = "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@gnusocial.de";
$a->strings["Friendica"] = "Friendica";
$a->strings["GNU Social (Pleroma, Mastodon)"] = "GNU Social (Pleroma, Mastodon)";
$a->strings["Diaspora (Socialhome, Hubzilla)"] = "Diaspora (Socialhome, Hubzilla)";
$a->strings[" - please do not use this form. Instead, enter %s into your Diaspora search bar."] = " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in Deiner Diaspora Suchleiste.";
$a->strings["Unable to locate original post."] = "Konnte den Originalbeitrag nicht finden."; $a->strings["Unable to locate original post."] = "Konnte den Originalbeitrag nicht finden.";
$a->strings["Empty post discarded."] = "Leerer Beitrag wurde verworfen."; $a->strings["Empty post discarded."] = "Leerer Beitrag wurde verworfen.";
$a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica."; $a->strings["This message was sent to you by %s, a member of the Friendica social network."] = "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica.";
$a->strings["You may visit them online at %s"] = "Du kannst sie online unter %s besuchen"; $a->strings["You may visit them online at %s"] = "Du kannst sie online unter %s besuchen";
$a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest."; $a->strings["Please contact the sender by replying to this post if you do not wish to receive these messages."] = "Falls Du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem Du auf diese Nachricht antwortest.";
$a->strings["%s posted an update."] = "%s hat ein Update veröffentlicht."; $a->strings["%s posted an update."] = "%s hat ein Update veröffentlicht.";
$a->strings["Invalid request identifier."] = "Invalid request identifier."; $a->strings["Remove term"] = "Begriff entfernen";
$a->strings["Discard"] = "Verwerfen"; $a->strings["Saved Searches"] = "Gespeicherte Suchen";
$a->strings["Notifications"] = "Benachrichtigungen"; $a->strings["add"] = "hinzufügen";
$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen"; $a->strings["Warning: This group contains %s member from a network that doesn't allow non public messages."] = [
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen"; 0 => "Warnung: Diese Gruppe beinhaltet %s Person aus einem Netzwerk das keine nicht öffentlichen Beiträge empfangen kann.",
$a->strings["Home Notifications"] = "Pinnwand Benachrichtigungen"; 1 => "Warnung: Diese Gruppe beinhaltet %s Personen aus Netzwerken die keine nicht-öffentlichen Beiträge empfangen können.",
$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen"; ];
$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen"; $a->strings["Messages in this group won't be send to these receivers."] = "Beiträge in dieser Gruppe werden deshalb nicht an diese Personen zugestellt werden.";
$a->strings["Notification type: "] = "Benachrichtigungstyp: "; $a->strings["No such group"] = "Es gibt keine solche Gruppe";
$a->strings["suggested by %s"] = "vorgeschlagen von %s"; $a->strings["Group: %s"] = "Gruppe: %s";
$a->strings["Claims to be known to you: "] = "Behauptet Dich zu kennen: "; $a->strings["Private messages to this person are at risk of public disclosure."] = "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen.";
$a->strings["yes"] = "ja"; $a->strings["Invalid contact."] = "Ungültiger Kontakt.";
$a->strings["no"] = "nein"; $a->strings["Commented Order"] = "Neueste Kommentare";
$a->strings["Shall your connection be bidirectional or not?"] = "Soll die Verbindung beidseitig sein oder nicht?"; $a->strings["Sort by Comment Date"] = "Nach Kommentardatum sortieren";
$a->strings["Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed."] = "Akzeptierst du %s als Kontakt, erlaubst du damit das Lesen deiner Beiträge und abonnierst selbst auch die Beiträge von %s."; $a->strings["Posted Order"] = "Neueste Beiträge";
$a->strings["Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Abonnent akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."; $a->strings["Sort by Post Date"] = "Nach Beitragsdatum sortieren";
$a->strings["Accepting %s as a sharer allows them to subscribe to your posts, but you will not receive updates from them in your news feed."] = "Wenn du %s als Teilenden akzeptierst, erlaubst du damit das Lesen deiner Beiträge, wirst aber selbst die Beiträge der anderen Seite nicht erhalten."; $a->strings["Posts that mention or involve you"] = "Beiträge, in denen es um Dich geht";
$a->strings["Friend"] = "Kontakt"; $a->strings["New"] = "Neue";
$a->strings["Sharer"] = "Teilenden"; $a->strings["Activity Stream - by date"] = "Aktivitäten-Stream - nach Datum";
$a->strings["Subscriber"] = "Abonnent"; $a->strings["Shared Links"] = "Geteilte Links";
$a->strings["No introductions."] = "Keine Kontaktanfragen."; $a->strings["Interesting Links"] = "Interessante Links";
$a->strings["Show unread"] = "Ungelesene anzeigen"; $a->strings["Starred"] = "Markierte";
$a->strings["Show all"] = "Alle anzeigen"; $a->strings["Favourite Posts"] = "Favorisierte Beiträge";
$a->strings["No more %s notifications."] = "Keine weiteren %s Benachrichtigungen"; $a->strings["Personal Notes"] = "Persönliche Notizen";
$a->strings["Photo Albums"] = "Fotoalben";
$a->strings["Recent Photos"] = "Neueste Fotos";
$a->strings["Upload New Photos"] = "Neue Fotos hochladen";
$a->strings["everybody"] = "jeder";
$a->strings["Contact information unavailable"] = "Kontaktinformationen nicht verfügbar";
$a->strings["Album not found."] = "Album nicht gefunden.";
$a->strings["Delete Album"] = "Album löschen";
$a->strings["Do you really want to delete this photo album and all its photos?"] = "Möchtest Du wirklich dieses Foto-Album und all seine Foto löschen?";
$a->strings["Delete Photo"] = "Foto löschen";
$a->strings["Do you really want to delete this photo?"] = "Möchtest Du wirklich dieses Foto löschen?";
$a->strings["a photo"] = "einem Foto";
$a->strings["%1\$s was tagged in %2\$s by %3\$s"] = "%1\$s wurde von %3\$s in %2\$s getaggt";
$a->strings["Image upload didn't complete, please try again"] = "Der Upload des Bildes war nicht vollständig. Bitte versuche es erneut.";
$a->strings["Image file is missing"] = "Bilddatei konnte nicht gefunden werden.";
$a->strings["Server can't accept new file upload at this time, please contact your administrator"] = "Der Server kann derzeit keine neuen Datei Uploads akzeptieren. Bitte kontaktiere deinen Administrator.";
$a->strings["Image file is empty."] = "Bilddatei ist leer.";
$a->strings["No photos selected"] = "Keine Bilder ausgewählt";
$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschränkt.";
$a->strings["Upload Photos"] = "Bilder hochladen";
$a->strings["New album name: "] = "Name des neuen Albums: ";
$a->strings["or existing album name: "] = "oder existierender Albumname: ";
$a->strings["Do not show a status post for this upload"] = "Keine Status-Mitteilung für diesen Beitrag anzeigen";
$a->strings["Show to Groups"] = "Zeige den Gruppen";
$a->strings["Show to Contacts"] = "Zeige den Kontakten";
$a->strings["Edit Album"] = "Album bearbeiten";
$a->strings["Show Newest First"] = "Zeige neueste zuerst";
$a->strings["Show Oldest First"] = "Zeige älteste zuerst";
$a->strings["View Photo"] = "Foto betrachten";
$a->strings["Permission denied. Access to this item may be restricted."] = "Zugriff verweigert. Zugriff zu diesem Eintrag könnte eingeschränkt sein.";
$a->strings["Photo not available"] = "Foto nicht verfügbar";
$a->strings["View photo"] = "Fotos ansehen";
$a->strings["Edit photo"] = "Foto bearbeiten";
$a->strings["Use as profile photo"] = "Als Profilbild verwenden";
$a->strings["Private Message"] = "Private Nachricht";
$a->strings["View Full Size"] = "Betrachte Originalgröße";
$a->strings["Tags: "] = "Tags: ";
$a->strings["[Remove any tag]"] = "[Tag entfernen]";
$a->strings["New album name"] = "Name des neuen Albums";
$a->strings["Caption"] = "Bildunterschrift";
$a->strings["Add a Tag"] = "Tag hinzufügen";
$a->strings["Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"] = "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping";
$a->strings["Do not rotate"] = "Nicht rotieren";
$a->strings["Rotate CW (right)"] = "Drehen US (rechts)";
$a->strings["Rotate CCW (left)"] = "Drehen EUS (links)";
$a->strings["I like this (toggle)"] = "Ich mag das (toggle)";
$a->strings["I don't like this (toggle)"] = "Ich mag das nicht (toggle)";
$a->strings["Comment"] = "Kommentar";
$a->strings["Map"] = "Karte";
$a->strings["View Album"] = "Album betrachten";
$a->strings["Requested profile is not available."] = "Das angefragte Profil ist nicht vorhanden."; $a->strings["Requested profile is not available."] = "Das angefragte Profil ist nicht vorhanden.";
$a->strings["%s's timeline"] = "Timeline von %s"; $a->strings["%s's timeline"] = "Timeline von %s";
$a->strings["%s's posts"] = "Beiträge von %s"; $a->strings["%s's posts"] = "Beiträge von %s";
$a->strings["%s's comments"] = "Kommentare von %s"; $a->strings["%s's comments"] = "Kommentare von %s";
$a->strings["Tips for New Members"] = "Tipps für neue Nutzer"; $a->strings["Tips for New Members"] = "Tipps für neue Nutzer";
$a->strings["Profile deleted."] = "Profil gelöscht.";
$a->strings["Profile-"] = "Profil-";
$a->strings["New profile created."] = "Neues Profil angelegt.";
$a->strings["Profile unavailable to clone."] = "Profil nicht zum Duplizieren verfügbar.";
$a->strings["Profile Name is required."] = "Profilname ist erforderlich.";
$a->strings["Marital Status"] = "Familienstand";
$a->strings["Romantic Partner"] = "Romanze";
$a->strings["Work/Employment"] = "Arbeit / Beschäftigung";
$a->strings["Religion"] = "Religion";
$a->strings["Political Views"] = "Politische Ansichten";
$a->strings["Gender"] = "Geschlecht";
$a->strings["Sexual Preference"] = "Sexuelle Vorlieben";
$a->strings["XMPP"] = "XMPP";
$a->strings["Homepage"] = "Webseite";
$a->strings["Interests"] = "Interessen";
$a->strings["Location"] = "Wohnort";
$a->strings["Profile updated."] = "Profil aktualisiert.";
$a->strings["Hide contacts and friends:"] = "Kontakte und Freunde verbergen";
$a->strings["Hide your contact/friend list from viewers of this profile?"] = "Liste der Kontakte vor Betrachtern dieses Profils verbergen?";
$a->strings["Show more profile fields:"] = "Zeige mehr Profil-Felder:";
$a->strings["Profile Actions"] = "Profilaktionen";
$a->strings["Edit Profile Details"] = "Profil bearbeiten";
$a->strings["Change Profile Photo"] = "Profilbild ändern";
$a->strings["View this profile"] = "Dieses Profil anzeigen";
$a->strings["Edit visibility"] = "Sichtbarkeit bearbeiten";
$a->strings["Create a new profile using these settings"] = "Neues Profil anlegen und diese Einstellungen verwenden";
$a->strings["Clone this profile"] = "Dieses Profil duplizieren";
$a->strings["Delete this profile"] = "Dieses Profil löschen";
$a->strings["Basic information"] = "Grundinformationen";
$a->strings["Profile picture"] = "Profilbild";
$a->strings["Preferences"] = "Vorlieben";
$a->strings["Status information"] = "Status Informationen";
$a->strings["Additional information"] = "Zusätzliche Informationen";
$a->strings["Relation"] = "Beziehung";
$a->strings["Miscellaneous"] = "Verschiedenes";
$a->strings["Your Gender:"] = "Dein Geschlecht:";
$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Beziehungsstatus:";
$a->strings["Sexual Preference:"] = "Sexuelle Vorlieben:";
$a->strings["Example: fishing photography software"] = "Beispiel: Fischen Fotografie Software";
$a->strings["Profile Name:"] = "Profilname:";
$a->strings["This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet."] = "Dies ist Dein <strong>öffentliches</strong> Profil.<br />Es <strong>könnte</strong> für jeden Nutzer des Internets sichtbar sein.";
$a->strings["Your Full Name:"] = "Dein kompletter Name:";
$a->strings["Title/Description:"] = "Titel/Beschreibung:";
$a->strings["Street Address:"] = "Adresse:";
$a->strings["Locality/City:"] = "Wohnort:";
$a->strings["Region/State:"] = "Region/Bundesstaat:";
$a->strings["Postal/Zip Code:"] = "Postleitzahl:";
$a->strings["Country:"] = "Land:";
$a->strings["Age: "] = "Alter: ";
$a->strings["Who: (if applicable)"] = "Wer: (falls anwendbar)";
$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiele: cathy123, Cathy Williams, cathy@example.com";
$a->strings["Since [date]:"] = "Seit [Datum]:";
$a->strings["Tell us about yourself..."] = "Erzähle uns ein bisschen von Dir …";
$a->strings["XMPP (Jabber) address:"] = "XMPP (Jabber) Adresse";
$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = "Die XMPP Adresse wird an deine Kontakte verteilt werden, so dass sie auch über XMPP mit dir in Kontakt treten können.";
$a->strings["Homepage URL:"] = "Adresse der Homepage:";
$a->strings["Hometown:"] = "Heimatort:";
$a->strings["Political Views:"] = "Politische Ansichten:";
$a->strings["Religious Views:"] = "Religiöse Ansichten:";
$a->strings["Public Keywords:"] = "Öffentliche Schlüsselwörter:";
$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "(Wird verwendet, um potentielle Kontakte zu finden, kann von Kontakten eingesehen werden)";
$a->strings["Private Keywords:"] = "Private Schlüsselwörter:";
$a->strings["(Used for searching profiles, never shown to others)"] = "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)";
$a->strings["Likes:"] = "Likes:";
$a->strings["Dislikes:"] = "Dislikes:";
$a->strings["Musical interests"] = "Musikalische Interessen";
$a->strings["Books, literature"] = "Bücher, Literatur";
$a->strings["Television"] = "Fernsehen";
$a->strings["Film/dance/culture/entertainment"] = "Filme/Tänze/Kultur/Unterhaltung";
$a->strings["Hobbies/Interests"] = "Hobbies/Interessen";
$a->strings["Love/romance"] = "Liebe/Romantik";
$a->strings["Work/employment"] = "Arbeit/Anstellung";
$a->strings["School/education"] = "Schule/Ausbildung";
$a->strings["Contact information and Social Networks"] = "Kontaktinformationen und Soziale Netzwerke";
$a->strings["Profile Image"] = "Profilbild";
$a->strings["visible to everybody"] = "sichtbar für jeden";
$a->strings["Edit/Manage Profiles"] = "Bearbeite/Verwalte Profile";
$a->strings["Change profile photo"] = "Profilbild ändern";
$a->strings["Create New Profile"] = "Neues Profil anlegen";
$a->strings["Registration successful. Please check your email for further instructions."] = "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet."; $a->strings["Registration successful. Please check your email for further instructions."] = "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an Dich gesendet.";
$a->strings["Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login."] = "Versenden der E-Mail fehlgeschlagen. Hier sind Deine Account Details:\n\nLogin: %s\nPasswort: %s\n\nDu kannst das Passwort nach dem Anmelden ändern."; $a->strings["Failed to send email message. Here your accout details:<br> login: %s<br> password: %s<br><br>You can change your password after login."] = "Versenden der E-Mail fehlgeschlagen. Hier sind Deine Account Details:\n\nLogin: %s\nPasswort: %s\n\nDu kannst das Passwort nach dem Anmelden ändern.";
$a->strings["Registration successful."] = "Registrierung erfolgreich."; $a->strings["Registration successful."] = "Registrierung erfolgreich.";
@ -1479,6 +1470,10 @@ $a->strings["The user id is %d"] = "Die ID des Users lautet %d";
$a->strings["Remove My Account"] = "Konto löschen"; $a->strings["Remove My Account"] = "Konto löschen";
$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Dein Konto wird endgültig gelöscht. Es gibt keine Möglichkeit, es wiederherzustellen."; $a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "Dein Konto wird endgültig gelöscht. Es gibt keine Möglichkeit, es wiederherzustellen.";
$a->strings["Please enter your password for verification:"] = "Bitte gib Dein Passwort zur Verifikation ein:"; $a->strings["Please enter your password for verification:"] = "Bitte gib Dein Passwort zur Verifikation ein:";
$a->strings["Only logged in users are permitted to perform a search."] = "Nur eingeloggten Benutzern ist das Suchen gestattet.";
$a->strings["Too Many Requests"] = "Zu viele Abfragen";
$a->strings["Only one search per minute is permitted for not logged in users."] = "Es ist nur eine Suchanfrage pro Minute für nicht eingeloggte Benutzer gestattet.";
$a->strings["Items tagged with: %s"] = "Beiträge die mit %s getaggt sind";
$a->strings["Account"] = "Nutzerkonto"; $a->strings["Account"] = "Nutzerkonto";
$a->strings["Display"] = "Anzeige"; $a->strings["Display"] = "Anzeige";
$a->strings["Social Networks"] = "Soziale Netzwerke"; $a->strings["Social Networks"] = "Soziale Netzwerke";
@ -1594,13 +1589,13 @@ $a->strings["Requires manual approval of contact requests."] = "Kontaktanfragen
$a->strings["OpenID:"] = "OpenID:"; $a->strings["OpenID:"] = "OpenID:";
$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID."; $a->strings["(Optional) Allow this OpenID to login to this account."] = "(Optional) Erlaube die Anmeldung für dieses Konto mit dieser OpenID.";
$a->strings["Publish your default profile in your local site directory?"] = "Darf Dein Standardprofil im Verzeichnis dieses Servers veröffentlicht werden?"; $a->strings["Publish your default profile in your local site directory?"] = "Darf Dein Standardprofil im Verzeichnis dieses Servers veröffentlicht werden?";
$a->strings["Your profile will be published in the global friendica directories (e.g. <a href=\"%s\">%s</a>). Your profile will be visible in public."] = "Dein Profil wird in den globalen Friendica Verzeichnissen (z.B. <a href=\"%s\">%s</a>) veröffentlicht. Dein Profil wird öffentlich auffindbar sein.";
$a->strings["Publish your default profile in the global social directory?"] = "Darf Dein Standardprofil im weltweiten Verzeichnis veröffentlicht werden?";
$a->strings["Your profile will be published in this node's <a href=\"%s\">local directory</a>. Your profile details may be publicly visible depending on the system settings."] = "Dein Profil wird im <a href=\"%s\">lokalen Verzeichnis</a> dieses Knotens veröffentlicht. Je nach Systemeinstellungen kann es öffentlich auffindbar sein."; $a->strings["Your profile will be published in this node's <a href=\"%s\">local directory</a>. Your profile details may be publicly visible depending on the system settings."] = "Dein Profil wird im <a href=\"%s\">lokalen Verzeichnis</a> dieses Knotens veröffentlicht. Je nach Systemeinstellungen kann es öffentlich auffindbar sein.";
$a->strings["Publish your default profile in the global social directory?"] = "Darf Dein Standardprofil im weltweiten Verzeichnis veröffentlicht werden?";
$a->strings["Your profile will be published in the global friendica directories (e.g. <a href=\"%s\">%s</a>). Your profile will be visible in public."] = "Dein Profil wird in den globalen Friendica Verzeichnissen (z.B. <a href=\"%s\">%s</a>) veröffentlicht. Dein Profil wird öffentlich auffindbar sein.";
$a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?"; $a->strings["Hide your contact/friend list from viewers of your default profile?"] = "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?";
$a->strings["Your contact list won't be shown in your default profile page. You can decide to show your contact list separately for each additional profile you create"] = "Die Liste deiner Kontakte wird nicht in deinem Standard-Profil angezeigt werden. Du kannst für jedes weitere Profil diese Entscheidung separat einstellen."; $a->strings["Your contact list won't be shown in your default profile page. You can decide to show your contact list separately for each additional profile you create"] = "Die Liste deiner Kontakte wird nicht in deinem Standard-Profil angezeigt werden. Du kannst für jedes weitere Profil diese Entscheidung separat einstellen.";
$a->strings["Hide your profile details from anonymous viewers?"] = "Profil-Details vor unbekannten Betrachtern verbergen?"; $a->strings["Hide your profile details from anonymous viewers?"] = "Profil-Details vor unbekannten Betrachtern verbergen?";
$a->strings["Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Disables posting public messages to Diaspora and other networks."] = "Anonyme Besucher deines Profils werden ausschließlich dein Profilbild, deinen Namen sowie deinen Spitznamen sehen. Ist diese Option aktiv, können keine öffentlichen Beiträge zu Diaspora und anderen Netzwerken veröffentlicht werden."; $a->strings["Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Your public posts and replies will still be accessible by other means."] = "Anonyme Besucher deines Profils werden ausschließlich dein Profilbild, deinen Namen sowie deinen Spitznamen sehen. Deine lffentlichen Beiträge und Kommentare werden weiterhin sichtbar sein.";
$a->strings["Allow friends to post to your profile page?"] = "Dürfen Deine Kontakte auf Deine Pinnwand schreiben?"; $a->strings["Allow friends to post to your profile page?"] = "Dürfen Deine Kontakte auf Deine Pinnwand schreiben?";
$a->strings["Your contacts may write posts on your profile wall. These posts will be distributed to your contacts"] = "Deine Kontakte können Beiträge auf deiner Pinnwand hinterlassen. Diese werden an deine Kontakte verteilt."; $a->strings["Your contacts may write posts on your profile wall. These posts will be distributed to your contacts"] = "Deine Kontakte können Beiträge auf deiner Pinnwand hinterlassen. Diese werden an deine Kontakte verteilt.";
$a->strings["Allow friends to tag your posts?"] = "Dürfen Deine Kontakte Deine Beiträge mit Schlagwörtern versehen?"; $a->strings["Allow friends to tag your posts?"] = "Dürfen Deine Kontakte Deine Beiträge mit Schlagwörtern versehen?";
@ -1664,6 +1659,11 @@ $a->strings["Change the behaviour of this account for special situations"] = "Ve
$a->strings["Relocate"] = "Umziehen"; $a->strings["Relocate"] = "Umziehen";
$a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "Wenn Du Dein Profil von einem anderen Server umgezogen hast und einige Deiner Kontakte Deine Beiträge nicht erhalten, verwende diesen Button."; $a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "Wenn Du Dein Profil von einem anderen Server umgezogen hast und einige Deiner Kontakte Deine Beiträge nicht erhalten, verwende diesen Button.";
$a->strings["Resend relocate message to contacts"] = "Umzugsbenachrichtigung erneut an Kontakte senden"; $a->strings["Resend relocate message to contacts"] = "Umzugsbenachrichtigung erneut an Kontakte senden";
$a->strings["Do you really want to delete this video?"] = "Möchtest Du dieses Video wirklich löschen?";
$a->strings["Delete Video"] = "Video Löschen";
$a->strings["No videos selected"] = "Keine Videos ausgewählt";
$a->strings["Recent Videos"] = "Neueste Videos";
$a->strings["Upload New Videos"] = "Neues Video hochladen";
$a->strings["default"] = "Standard"; $a->strings["default"] = "Standard";
$a->strings["greenzero"] = "greenzero"; $a->strings["greenzero"] = "greenzero";
$a->strings["purplezero"] = "purplezero"; $a->strings["purplezero"] = "purplezero";
@ -2048,35 +2048,6 @@ $a->strings["Edit group"] = "Gruppe bearbeiten";
$a->strings["Contacts not in any group"] = "Kontakte in keiner Gruppe"; $a->strings["Contacts not in any group"] = "Kontakte in keiner Gruppe";
$a->strings["Create a new group"] = "Neue Gruppe erstellen"; $a->strings["Create a new group"] = "Neue Gruppe erstellen";
$a->strings["Edit groups"] = "Gruppen bearbeiten"; $a->strings["Edit groups"] = "Gruppen bearbeiten";
$a->strings["Requested account is not available."] = "Das angefragte Profil ist nicht vorhanden.";
$a->strings["Edit profile"] = "Profil bearbeiten";
$a->strings["Atom feed"] = "Atom-Feed";
$a->strings["Manage/edit profiles"] = "Profile verwalten/editieren";
$a->strings["g A l F d"] = "l, d. F G \\U\\h\\r";
$a->strings["F d"] = "d. F";
$a->strings["[today]"] = "[heute]";
$a->strings["Birthday Reminders"] = "Geburtstagserinnerungen";
$a->strings["Birthdays this week:"] = "Geburtstage diese Woche:";
$a->strings["[No description]"] = "[keine Beschreibung]";
$a->strings["Event Reminders"] = "Veranstaltungserinnerungen";
$a->strings["Events this week:"] = "Veranstaltungen diese Woche";
$a->strings["Member since:"] = "Mitglied seit:";
$a->strings["j F, Y"] = "j F, Y";
$a->strings["j F"] = "j F";
$a->strings["Age:"] = "Alter:";
$a->strings["for %1\$d %2\$s"] = "für %1\$d %2\$s";
$a->strings["Religion:"] = "Religion:";
$a->strings["Hobbies/Interests:"] = "Hobbies/Interessen:";
$a->strings["Contact information and Social Networks:"] = "Kontaktinformationen und Soziale Netzwerke:";
$a->strings["Musical interests:"] = "Musikalische Interessen:";
$a->strings["Books, literature:"] = "Literatur/Bücher:";
$a->strings["Television:"] = "Fernsehen:";
$a->strings["Film/dance/culture/entertainment:"] = "Filme/Tänze/Kultur/Unterhaltung:";
$a->strings["Love/Romance:"] = "Liebesleben:";
$a->strings["Work/employment:"] = "Arbeit/Beschäftigung:";
$a->strings["School/education:"] = "Schule/Ausbildung:";
$a->strings["Forums:"] = "Foren:";
$a->strings["Only You Can See This"] = "Nur Du kannst das sehen";
$a->strings["Login failed"] = "Anmeldung fehlgeschlagen"; $a->strings["Login failed"] = "Anmeldung fehlgeschlagen";
$a->strings["Not enough information to authenticate"] = "Nicht genügend Informationen für die Authentifizierung"; $a->strings["Not enough information to authenticate"] = "Nicht genügend Informationen für die Authentifizierung";
$a->strings["An invitation is required."] = "Du benötigst eine Einladung."; $a->strings["An invitation is required."] = "Du benötigst eine Einladung.";
@ -2123,12 +2094,41 @@ $a->strings["Happy Birthday %s"] = "Herzlichen Glückwunsch %s";
$a->strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil."; $a->strings["%1\$s is attending %2\$s's %3\$s"] = "%1\$s nimmt an %2\$ss %3\$s teil.";
$a->strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s nimmt nicht an %2\$ss %3\$s teil."; $a->strings["%1\$s is not attending %2\$s's %3\$s"] = "%1\$s nimmt nicht an %2\$ss %3\$s teil.";
$a->strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s nimmt eventuell an %2\$ss %3\$s teil."; $a->strings["%1\$s may attend %2\$s's %3\$s"] = "%1\$s nimmt eventuell an %2\$ss %3\$s teil.";
$a->strings["Requested account is not available."] = "Das angefragte Profil ist nicht vorhanden.";
$a->strings["Edit profile"] = "Profil bearbeiten";
$a->strings["Atom feed"] = "Atom-Feed";
$a->strings["Manage/edit profiles"] = "Profile verwalten/editieren";
$a->strings["g A l F d"] = "l, d. F G \\U\\h\\r";
$a->strings["F d"] = "d. F";
$a->strings["[today]"] = "[heute]";
$a->strings["Birthday Reminders"] = "Geburtstagserinnerungen";
$a->strings["Birthdays this week:"] = "Geburtstage diese Woche:";
$a->strings["[No description]"] = "[keine Beschreibung]";
$a->strings["Event Reminders"] = "Veranstaltungserinnerungen";
$a->strings["Events this week:"] = "Veranstaltungen diese Woche";
$a->strings["Member since:"] = "Mitglied seit:";
$a->strings["j F, Y"] = "j F, Y";
$a->strings["j F"] = "j F";
$a->strings["Age:"] = "Alter:";
$a->strings["for %1\$d %2\$s"] = "für %1\$d %2\$s";
$a->strings["Religion:"] = "Religion:";
$a->strings["Hobbies/Interests:"] = "Hobbies/Interessen:";
$a->strings["Contact information and Social Networks:"] = "Kontaktinformationen und Soziale Netzwerke:";
$a->strings["Musical interests:"] = "Musikalische Interessen:";
$a->strings["Books, literature:"] = "Literatur/Bücher:";
$a->strings["Television:"] = "Fernsehen:";
$a->strings["Film/dance/culture/entertainment:"] = "Filme/Tänze/Kultur/Unterhaltung:";
$a->strings["Love/Romance:"] = "Liebesleben:";
$a->strings["Work/employment:"] = "Arbeit/Beschäftigung:";
$a->strings["School/education:"] = "Schule/Ausbildung:";
$a->strings["Forums:"] = "Foren:";
$a->strings["Only You Can See This"] = "Nur Du kannst das sehen";
$a->strings["Sharing notification from Diaspora network"] = "Freigabe-Benachrichtigung von Diaspora";
$a->strings["Attachments:"] = "Anhänge:";
$a->strings["%s is now following %s."] = "%s folgt nun %s"; $a->strings["%s is now following %s."] = "%s folgt nun %s";
$a->strings["following"] = "folgen"; $a->strings["following"] = "folgen";
$a->strings["%s stopped following %s."] = "%s hat aufgehört %s zu folgen"; $a->strings["%s stopped following %s."] = "%s hat aufgehört %s zu folgen";
$a->strings["stopped following"] = "wird nicht mehr gefolgt"; $a->strings["stopped following"] = "wird nicht mehr gefolgt";
$a->strings["Sharing notification from Diaspora network"] = "Freigabe-Benachrichtigung von Diaspora";
$a->strings["Attachments:"] = "Anhänge:";
$a->strings["(no subject)"] = "(kein Betreff)"; $a->strings["(no subject)"] = "(kein Betreff)";
$a->strings["Logged out."] = "Abgemeldet."; $a->strings["Logged out."] = "Abgemeldet.";
$a->strings["Create a New Account"] = "Neues Konto erstellen"; $a->strings["Create a New Account"] = "Neues Konto erstellen";

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff