Merge branch 'master' into develop

This commit is contained in:
fabrixxm 2016-09-13 17:19:57 +02:00
commit 3d6e3cbb78
59 changed files with 11590 additions and 10998 deletions

View file

@ -1,3 +1,63 @@
Version 3.5
Friendica Core:
NEW Optional local directory with possible federated contacts [heluecht]
NEW Autocompletion for @-mentions and BBCode tags [rabuzarus]
NEW Added a composer derived autoloader which allows composer autoloaders in addons/libraries [fabrixxm]
NEW theme: frio [rabuzarus, heluecht, fabrixxm]
Enhance .htaccess file (nerdoc, dissolve)
Updates to the translations (DE, ES, IS, IT, RU) [translation teams]
Updates to the documentation [tobiasd, heluecht, mexcon, silke, rabuzarus, fabrixxm, Olivier Mehani, gerhard6380, ben utzer]
Extended the BBCode by [abstract] tag used for bridged postings to networks with limited character length [heluecht]
Code cleanup [heluecht, QuixOr]
Improvements to the API and Friendica specific extensions [heluecht, fabrixxm, gerhard6380]
Improvements to the RSS/Atom feed import [mexcon]
Improvements to the communication with federated networks (Diaspora, Hubzilla, OStatus) [heluecht]
Improvements on the themes (quattro, vier, frost) [rabuzarus, fabrixxm, stieben, heluecht, Quix0r, tobiasd]
Improvements to the ACL dialog [fabrixxm, rabuzarus]
Improvements to the database structure and optimization of queries [heluecht]
Improvements to the UI (contacts, hotkeys, remember me, ARIA, code hightlighting) [rabuzarus, heluecht, tobiasd]
Improvements to the background process (poller, worker) [heluecht]
Improvements to the admin panel [tobiasd, heluecht, fabrixxm]
Improvements to the performance [heluecht]
Improvements to the installation wizzard (language selection, RINO version, check required PHP modules, default theme is now vier) [tobiasd]
Improvements to the relocation of nodes and accounts [heluecht]
Improvements to the DDoS detection [heluecht]
Improvements to the calendar/events module [heluecht, rabuzarus]
Improvements to OpenID login [strk]
Improvements to the ShaShape font [andi]
Reworked the implementation of the DFRN, Diaspora protocols [heluecht]
Reworked the notifications code [fabrixxm, rabuzarus, heluecht]
Reworked the p/config code [fabrixxm, rabuzarus]
Reworked XML generation [heluecht]
Removed now unused simplepie from library [heluecht]
Friendica Addons
Updated to the translations (DE, ES, IS, NL, PT BR), [translation teams]
Piwik [tobiasd]
Twitter Connector [heluecht]
Pumpio Connector [heluecht]
Rendertime [heluecht]
wppost [heluecht]
showmore [rabuzarus]
fromgplus [heluecht]
app.net Connector [heluecht]
GNU Social Connector [heluecht]
LDAP [Olivier Mehani]
smileybutton [rabuzarus]
retriver [mexon]
mailstream [mexon]
forumdirectory [tobiasd]
NEW notifyall (port from Hubzilla) [rabuzarus, tobiasd]
DEPRECATED cal (now in core), FB Connector, FB Post Connector, FB Sync
Closed Issues
683, 786, 796, 922, 1261, 1576, 1701, 1769, 1970, 1145, 1494,
1728, 1877, 2063, 2059, 2078, 2079, 2133, 2165, 2194, 2229, 2230,
2241, 2254, 2242, 2270, 2277, 2339, 2320, 2345, 2352, 2358, 2367,
2373, 2376, 2378, 2385, 2395, 2402, 2406, 2433, 2472, 2485, 2492,
2506, 2512, 2516, 2539, 2540, 2893, 2597, 2611, 2617, 2629, 2645,
2687, 2716, 2757, 2764
Version 3.4.3 Version 3.4.3
What's new for the users: What's new for the users:
Updates to the documentation (silke, tobiasd, annando, rebeka-catalina) Updates to the documentation (silke, tobiasd, annando, rebeka-catalina)

View file

@ -32,8 +32,7 @@ link if your cert is self-signed).
- Apache with mod-rewrite enabled and "Options All" so you can use a - Apache with mod-rewrite enabled and "Options All" so you can use a
local .htaccess file local .htaccess file
- PHP 5.2+. The later the better. PHP 5.3 is required for communications - PHP 5.4+.
with the Diaspora network and improved security.
- PHP *command line* access with register_argc_argv set to true in the - PHP *command line* access with register_argc_argv set to true in the
php.ini file [or see 'poormancron' in section 8] php.ini file [or see 'poormancron' in section 8]
@ -42,7 +41,7 @@ php.ini file [or see 'poormancron' in section 8]
- some form of email server or email gateway such that PHP mail() works - some form of email server or email gateway such that PHP mail() works
- Mysql 5.x - Mysql 5.5.3+ or an equivalant alternative for MySQL (MariaDB, Percona Server etc.)
- ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks - ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks
(Windows) [Note: other options are presented in Section 8 of this document] (Windows) [Note: other options are presented in Section 8 of this document]

View file

@ -36,9 +36,9 @@ require_once('include/dbstructure.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_CODENAME', 'Asparagus'); define ( 'FRIENDICA_CODENAME', 'Asparagus');
define ( 'FRIENDICA_VERSION', '3.5-dev' ); define ( 'FRIENDICA_VERSION', '3.5' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1200 ); define ( 'DB_UPDATE_VERSION', 1202 );
/** /**
* @brief Constant with a HTML line break. * @brief Constant with a HTML line break.
@ -392,11 +392,12 @@ define ( 'GRAVITY_COMMENT', 6);
* Process priority for the worker * Process priority for the worker
* @{ * @{
*/ */
define('PRIORITY_UNDEFINED', 0); define('PRIORITY_UNDEFINED', 0);
define('PRIORITY_SYSTEM', 10); define('PRIORITY_CRITICAL', 10);
define('PRIORITY_HIGH', 20); define('PRIORITY_HIGH', 20);
define('PRIORITY_MEDIUM', 30); define('PRIORITY_MEDIUM', 30);
define('PRIORITY_LOW', 40); define('PRIORITY_LOW', 40);
define('PRIORITY_NEGLIGIBLE',50);
/* @}*/ /* @}*/
@ -1098,6 +1099,42 @@ class App {
} }
/**
* @brief Log active processes into the "process" table
*/
function start_process() {
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
$command = basename($trace[0]["file"]);
$this->remove_inactive_processes();
$r = q("SELECT `pid` FROM `process` WHERE `pid` = %d", intval(getmypid()));
if(!dbm::is_result($r))
q("INSERT INTO `process` (`pid`,`command`,`created`) VALUES (%d, '%s', '%s')",
intval(getmypid()),
dbesc($command),
dbesc(datetime_convert()));
}
/**
* @brief Remove inactive processes
*/
function remove_inactive_processes() {
$r = q("SELECT `pid` FROM `process`");
if(dbm::is_result($r))
foreach ($r AS $process)
if (!posix_kill($process["pid"], 0))
q("DELETE FROM `process` WHERE `pid` = %d", intval($process["pid"]));
}
/**
* @brief Remove the active process from the "process" table
*/
function end_process() {
q("DELETE FROM `process` WHERE `pid` = %d", intval(getmypid()));
}
/** /**
* @brief Returns a string with a callstack. Can be used for logging. * @brief Returns a string with a callstack. Can be used for logging.
* *
@ -1266,8 +1303,20 @@ class App {
function proc_run($args) { function proc_run($args) {
// Add the php path if it is a php call // Add the php path if it is a php call
if (count($args) && ($args[0] === 'php' OR is_int($args[0]))) if (count($args) && ($args[0] === 'php' OR is_int($args[0]))) {
// If the last worker fork was less than 10 seconds before then don't fork another one.
// This should prevent the forking of masses of workers.
if (get_config("system", "worker")) {
if ((time() - get_config("system", "proc_run_started")) < 10)
return;
// Set the timestamp of the last proc_run
set_config("system", "proc_run_started", time());
}
$args[0] = ((x($this->config,'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php'); $args[0] = ((x($this->config,'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php');
}
// add baseurl to args. cli scripts can't construct it // add baseurl to args. cli scripts can't construct it
$args[] = $this->get_baseurl(); $args[] = $this->get_baseurl();
@ -1398,7 +1447,7 @@ function check_db() {
$build = DB_UPDATE_VERSION; $build = DB_UPDATE_VERSION;
} }
if($build != DB_UPDATE_VERSION) if($build != DB_UPDATE_VERSION)
proc_run(PRIORITY_SYSTEM, 'include/dbupdate.php'); proc_run(PRIORITY_CRITICAL, 'include/dbupdate.php');
} }
@ -1686,7 +1735,10 @@ function login($register = false, $hiddens=false) {
* @brief Used to end the current process, after saving session state. * @brief Used to end the current process, after saving session state.
*/ */
function killme() { function killme() {
session_write_close();
if (!get_app()->is_backend())
session_write_close();
exit; exit;
} }

View file

@ -16,7 +16,7 @@ CREATE TABLE IF NOT EXISTS `addon` (
`timestamp` bigint(20) NOT NULL DEFAULT 0, `timestamp` bigint(20) NOT NULL DEFAULT 0,
`plugin_admin` tinyint(1) NOT NULL DEFAULT 0, `plugin_admin` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE attach -- TABLE attach
@ -31,12 +31,12 @@ CREATE TABLE IF NOT EXISTS `attach` (
`data` longblob NOT NULL, `data` longblob NOT NULL,
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`allow_cid` mediumtext NOT NULL, `allow_cid` mediumtext,
`allow_gid` mediumtext NOT NULL, `allow_gid` mediumtext,
`deny_cid` mediumtext NOT NULL, `deny_cid` mediumtext,
`deny_gid` mediumtext NOT NULL, `deny_gid` mediumtext,
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE auth_codes -- TABLE auth_codes
@ -48,19 +48,19 @@ CREATE TABLE IF NOT EXISTS `auth_codes` (
`expires` int(11) NOT NULL DEFAULT 0, `expires` int(11) NOT NULL DEFAULT 0,
`scope` varchar(250) NOT NULL DEFAULT '', `scope` varchar(250) NOT NULL DEFAULT '',
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE cache -- TABLE cache
-- --
CREATE TABLE IF NOT EXISTS `cache` ( CREATE TABLE IF NOT EXISTS `cache` (
`k` varchar(255) NOT NULL, `k` varchar(255) NOT NULL,
`v` text NOT NULL, `v` text,
`expire_mode` int(11) NOT NULL DEFAULT 0, `expire_mode` int(11) NOT NULL DEFAULT 0,
`updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(`k`), PRIMARY KEY(`k`),
INDEX `updated` (`updated`) INDEX `updated` (`updated`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE challenge -- TABLE challenge
@ -73,7 +73,7 @@ CREATE TABLE IF NOT EXISTS `challenge` (
`type` varchar(255) NOT NULL DEFAULT '', `type` varchar(255) NOT NULL DEFAULT '',
`last_update` varchar(255) NOT NULL DEFAULT '', `last_update` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE clients -- TABLE clients
@ -86,7 +86,7 @@ CREATE TABLE IF NOT EXISTS `clients` (
`icon` text, `icon` text,
`uid` int(11) NOT NULL DEFAULT 0, `uid` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY(`client_id`) PRIMARY KEY(`client_id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE config -- TABLE config
@ -95,10 +95,10 @@ CREATE TABLE IF NOT EXISTS `config` (
`id` int(10) unsigned NOT NULL auto_increment, `id` int(10) unsigned NOT NULL auto_increment,
`cat` varchar(255) NOT NULL DEFAULT '', `cat` varchar(255) NOT NULL DEFAULT '',
`k` varchar(255) NOT NULL DEFAULT '', `k` varchar(255) NOT NULL DEFAULT '',
`v` text NOT NULL, `v` text,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `cat_k` (`cat`(30),`k`(30)) INDEX `cat_k` (`cat`(30),`k`(30))
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE contact -- TABLE contact
@ -115,29 +115,29 @@ CREATE TABLE IF NOT EXISTS `contact` (
`name` varchar(255) NOT NULL DEFAULT '', `name` varchar(255) NOT NULL DEFAULT '',
`nick` varchar(255) NOT NULL DEFAULT '', `nick` varchar(255) NOT NULL DEFAULT '',
`location` varchar(255) NOT NULL DEFAULT '', `location` varchar(255) NOT NULL DEFAULT '',
`about` text NOT NULL, `about` text,
`keywords` text NOT NULL, `keywords` text,
`gender` varchar(32) NOT NULL DEFAULT '', `gender` varchar(32) NOT NULL DEFAULT '',
`attag` varchar(255) NOT NULL DEFAULT '', `attag` varchar(255) NOT NULL DEFAULT '',
`avatar` varchar(255) NOT NULL DEFAULT '', `avatar` varchar(255) NOT NULL DEFAULT '',
`photo` text NOT NULL, `photo` text,
`thumb` text NOT NULL, `thumb` text,
`micro` text NOT NULL, `micro` text,
`site-pubkey` text NOT NULL, `site-pubkey` text,
`issued-id` varchar(255) NOT NULL DEFAULT '', `issued-id` varchar(255) NOT NULL DEFAULT '',
`dfrn-id` varchar(255) NOT NULL DEFAULT '', `dfrn-id` varchar(255) NOT NULL DEFAULT '',
`url` varchar(255) NOT NULL DEFAULT '', `url` varchar(255) NOT NULL DEFAULT '',
`nurl` varchar(255) NOT NULL DEFAULT '', `nurl` varchar(255) NOT NULL DEFAULT '',
`addr` varchar(255) NOT NULL DEFAULT '', `addr` varchar(255) NOT NULL DEFAULT '',
`alias` varchar(255) NOT NULL DEFAULT '', `alias` varchar(255) NOT NULL DEFAULT '',
`pubkey` text NOT NULL, `pubkey` text,
`prvkey` text NOT NULL, `prvkey` text,
`batch` varchar(255) NOT NULL DEFAULT '', `batch` varchar(255) NOT NULL DEFAULT '',
`request` text NOT NULL, `request` text,
`notify` text NOT NULL, `notify` text,
`poll` text NOT NULL, `poll` text,
`confirm` text NOT NULL, `confirm` text,
`poco` text NOT NULL, `poco` text,
`aes_allow` tinyint(1) NOT NULL DEFAULT 0, `aes_allow` tinyint(1) NOT NULL DEFAULT 0,
`ret-aes` tinyint(1) NOT NULL DEFAULT 0, `ret-aes` tinyint(1) NOT NULL DEFAULT 0,
`usehub` tinyint(1) NOT NULL DEFAULT 0, `usehub` tinyint(1) NOT NULL DEFAULT 0,
@ -161,19 +161,19 @@ CREATE TABLE IF NOT EXISTS `contact` (
`archive` tinyint(1) NOT NULL DEFAULT 0, `archive` tinyint(1) NOT NULL DEFAULT 0,
`pending` tinyint(1) NOT NULL DEFAULT 1, `pending` tinyint(1) NOT NULL DEFAULT 1,
`rating` tinyint(1) NOT NULL DEFAULT 0, `rating` tinyint(1) NOT NULL DEFAULT 0,
`reason` text NOT NULL, `reason` text,
`closeness` tinyint(2) NOT NULL DEFAULT 99, `closeness` tinyint(2) NOT NULL DEFAULT 99,
`info` mediumtext NOT NULL, `info` mediumtext,
`profile-id` int(11) NOT NULL DEFAULT 0, `profile-id` int(11) NOT NULL DEFAULT 0,
`bdyear` varchar(4) NOT NULL DEFAULT '', `bdyear` varchar(4) NOT NULL DEFAULT '',
`bd` date NOT NULL DEFAULT '0000-00-00', `bd` date NOT NULL DEFAULT '0000-00-00',
`notify_new_posts` tinyint(1) NOT NULL DEFAULT 0, `notify_new_posts` tinyint(1) NOT NULL DEFAULT 0,
`fetch_further_information` tinyint(1) NOT NULL DEFAULT 0, `fetch_further_information` tinyint(1) NOT NULL DEFAULT 0,
`ffi_keyword_blacklist` mediumtext NOT NULL, `ffi_keyword_blacklist` mediumtext,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`), INDEX `uid` (`uid`),
INDEX `nurl` (`nurl`) INDEX `nurl` (`nurl`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE conv -- TABLE conv
@ -181,15 +181,15 @@ CREATE TABLE IF NOT EXISTS `contact` (
CREATE TABLE IF NOT EXISTS `conv` ( CREATE TABLE IF NOT EXISTS `conv` (
`id` int(10) unsigned NOT NULL auto_increment, `id` int(10) unsigned NOT NULL auto_increment,
`guid` varchar(64) NOT NULL DEFAULT '', `guid` varchar(64) NOT NULL DEFAULT '',
`recips` mediumtext NOT NULL, `recips` mediumtext,
`uid` int(11) NOT NULL DEFAULT 0, `uid` int(11) NOT NULL DEFAULT 0,
`creator` varchar(255) NOT NULL DEFAULT '', `creator` varchar(255) NOT NULL DEFAULT '',
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`subject` mediumtext NOT NULL, `subject` mediumtext,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`) INDEX `uid` (`uid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE deliverq -- TABLE deliverq
@ -200,7 +200,7 @@ CREATE TABLE IF NOT EXISTS `deliverq` (
`item` int(11) NOT NULL DEFAULT 0, `item` int(11) NOT NULL DEFAULT 0,
`contact` int(11) NOT NULL DEFAULT 0, `contact` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE event -- TABLE event
@ -214,20 +214,20 @@ CREATE TABLE IF NOT EXISTS `event` (
`edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`finish` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `finish` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`summary` text NOT NULL, `summary` text,
`desc` text NOT NULL, `desc` text,
`location` text NOT NULL, `location` text,
`type` varchar(255) NOT NULL DEFAULT '', `type` varchar(255) NOT NULL DEFAULT '',
`nofinish` tinyint(1) NOT NULL DEFAULT 0, `nofinish` tinyint(1) NOT NULL DEFAULT 0,
`adjust` tinyint(1) NOT NULL DEFAULT 1, `adjust` tinyint(1) NOT NULL DEFAULT 1,
`ignore` tinyint(1) unsigned NOT NULL DEFAULT 0, `ignore` tinyint(1) unsigned NOT NULL DEFAULT 0,
`allow_cid` mediumtext NOT NULL, `allow_cid` mediumtext,
`allow_gid` mediumtext NOT NULL, `allow_gid` mediumtext,
`deny_cid` mediumtext NOT NULL, `deny_cid` mediumtext,
`deny_gid` mediumtext NOT NULL, `deny_gid` mediumtext,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`) INDEX `uid` (`uid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE fcontact -- TABLE fcontact
@ -248,11 +248,11 @@ CREATE TABLE IF NOT EXISTS `fcontact` (
`priority` tinyint(1) NOT NULL DEFAULT 0, `priority` tinyint(1) NOT NULL DEFAULT 0,
`network` varchar(32) NOT NULL DEFAULT '', `network` varchar(32) NOT NULL DEFAULT '',
`alias` varchar(255) NOT NULL DEFAULT '', `alias` varchar(255) NOT NULL DEFAULT '',
`pubkey` text NOT NULL, `pubkey` text,
`updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `addr` (`addr`) INDEX `addr` (`addr`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE ffinder -- TABLE ffinder
@ -263,7 +263,7 @@ CREATE TABLE IF NOT EXISTS `ffinder` (
`cid` int(10) unsigned NOT NULL DEFAULT 0, `cid` int(10) unsigned NOT NULL DEFAULT 0,
`fid` int(10) unsigned NOT NULL DEFAULT 0, `fid` int(10) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE fserver -- TABLE fserver
@ -272,10 +272,10 @@ CREATE TABLE IF NOT EXISTS `fserver` (
`id` int(11) NOT NULL auto_increment, `id` int(11) NOT NULL auto_increment,
`server` varchar(255) NOT NULL DEFAULT '', `server` varchar(255) NOT NULL DEFAULT '',
`posturl` varchar(255) NOT NULL DEFAULT '', `posturl` varchar(255) NOT NULL DEFAULT '',
`key` text NOT NULL, `key` text,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `server` (`server`) INDEX `server` (`server`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE fsuggest -- TABLE fsuggest
@ -288,10 +288,10 @@ CREATE TABLE IF NOT EXISTS `fsuggest` (
`url` varchar(255) NOT NULL DEFAULT '', `url` varchar(255) NOT NULL DEFAULT '',
`request` varchar(255) NOT NULL DEFAULT '', `request` varchar(255) NOT NULL DEFAULT '',
`photo` varchar(255) NOT NULL DEFAULT '', `photo` varchar(255) NOT NULL DEFAULT '',
`note` text NOT NULL, `note` text,
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE gcign -- TABLE gcign
@ -303,7 +303,7 @@ CREATE TABLE IF NOT EXISTS `gcign` (
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`), INDEX `uid` (`uid`),
INDEX `gcid` (`gcid`) INDEX `gcid` (`gcid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE gcontact -- TABLE gcontact
@ -321,8 +321,8 @@ CREATE TABLE IF NOT EXISTS `gcontact` (
`last_contact` datetime DEFAULT '0000-00-00 00:00:00', `last_contact` datetime DEFAULT '0000-00-00 00:00:00',
`last_failure` datetime DEFAULT '0000-00-00 00:00:00', `last_failure` datetime DEFAULT '0000-00-00 00:00:00',
`location` varchar(255) NOT NULL DEFAULT '', `location` varchar(255) NOT NULL DEFAULT '',
`about` text NOT NULL, `about` text,
`keywords` text NOT NULL, `keywords` text,
`gender` varchar(32) NOT NULL DEFAULT '', `gender` varchar(32) NOT NULL DEFAULT '',
`birthday` varchar(32) NOT NULL DEFAULT '0000-00-00', `birthday` varchar(32) NOT NULL DEFAULT '0000-00-00',
`community` tinyint(1) NOT NULL DEFAULT 0, `community` tinyint(1) NOT NULL DEFAULT 0,
@ -330,7 +330,7 @@ CREATE TABLE IF NOT EXISTS `gcontact` (
`nsfw` tinyint(1) NOT NULL DEFAULT 0, `nsfw` tinyint(1) NOT NULL DEFAULT 0,
`network` varchar(255) NOT NULL DEFAULT '', `network` varchar(255) NOT NULL DEFAULT '',
`addr` varchar(255) NOT NULL DEFAULT '', `addr` varchar(255) NOT NULL DEFAULT '',
`notify` text NOT NULL, `notify` text,
`alias` varchar(255) NOT NULL DEFAULT '', `alias` varchar(255) NOT NULL DEFAULT '',
`generation` tinyint(3) NOT NULL DEFAULT 0, `generation` tinyint(3) NOT NULL DEFAULT 0,
`server_url` varchar(255) NOT NULL DEFAULT '', `server_url` varchar(255) NOT NULL DEFAULT '',
@ -340,7 +340,7 @@ CREATE TABLE IF NOT EXISTS `gcontact` (
INDEX `nick` (`nick`), INDEX `nick` (`nick`),
INDEX `addr` (`addr`), INDEX `addr` (`addr`),
INDEX `updated` (`updated`) INDEX `updated` (`updated`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE glink -- TABLE glink
@ -356,7 +356,7 @@ CREATE TABLE IF NOT EXISTS `glink` (
INDEX `cid_uid_gcid_zcid` (`cid`,`uid`,`gcid`,`zcid`), INDEX `cid_uid_gcid_zcid` (`cid`,`uid`,`gcid`,`zcid`),
INDEX `gcid` (`gcid`), INDEX `gcid` (`gcid`),
INDEX `zcid` (`zcid`) INDEX `zcid` (`zcid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE group -- TABLE group
@ -369,7 +369,7 @@ CREATE TABLE IF NOT EXISTS `group` (
`name` varchar(255) NOT NULL DEFAULT '', `name` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`) INDEX `uid` (`uid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE group_member -- TABLE group_member
@ -381,7 +381,7 @@ CREATE TABLE IF NOT EXISTS `group_member` (
`contact-id` int(10) unsigned NOT NULL DEFAULT 0, `contact-id` int(10) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid_gid_contactid` (`uid`,`gid`,`contact-id`) INDEX `uid_gid_contactid` (`uid`,`gid`,`contact-id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE gserver -- TABLE gserver
@ -392,7 +392,7 @@ CREATE TABLE IF NOT EXISTS `gserver` (
`nurl` varchar(255) NOT NULL DEFAULT '', `nurl` varchar(255) NOT NULL DEFAULT '',
`version` varchar(255) NOT NULL DEFAULT '', `version` varchar(255) NOT NULL DEFAULT '',
`site_name` varchar(255) NOT NULL DEFAULT '', `site_name` varchar(255) NOT NULL DEFAULT '',
`info` text NOT NULL, `info` text,
`register_policy` tinyint(1) NOT NULL DEFAULT 0, `register_policy` tinyint(1) NOT NULL DEFAULT 0,
`poco` varchar(255) NOT NULL DEFAULT '', `poco` varchar(255) NOT NULL DEFAULT '',
`noscrape` varchar(255) NOT NULL DEFAULT '', `noscrape` varchar(255) NOT NULL DEFAULT '',
@ -404,7 +404,7 @@ CREATE TABLE IF NOT EXISTS `gserver` (
`last_failure` datetime DEFAULT '0000-00-00 00:00:00', `last_failure` datetime DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `nurl` (`nurl`) INDEX `nurl` (`nurl`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE hook -- TABLE hook
@ -417,7 +417,7 @@ CREATE TABLE IF NOT EXISTS `hook` (
`priority` int(11) unsigned NOT NULL DEFAULT 0, `priority` int(11) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `hook_file_function` (`hook`(30),`file`(60),`function`(30)) INDEX `hook_file_function` (`hook`(30),`file`(60),`function`(30))
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE intro -- TABLE intro
@ -429,13 +429,13 @@ CREATE TABLE IF NOT EXISTS `intro` (
`contact-id` int(11) NOT NULL DEFAULT 0, `contact-id` int(11) NOT NULL DEFAULT 0,
`knowyou` tinyint(1) NOT NULL DEFAULT 0, `knowyou` tinyint(1) NOT NULL DEFAULT 0,
`duplex` tinyint(1) NOT NULL DEFAULT 0, `duplex` tinyint(1) NOT NULL DEFAULT 0,
`note` text NOT NULL, `note` text,
`hash` varchar(255) NOT NULL DEFAULT '', `hash` varchar(255) NOT NULL DEFAULT '',
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`blocked` tinyint(1) NOT NULL DEFAULT 1, `blocked` tinyint(1) NOT NULL DEFAULT 1,
`ignore` tinyint(1) NOT NULL DEFAULT 0, `ignore` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE item -- TABLE item
@ -468,27 +468,27 @@ CREATE TABLE IF NOT EXISTS `item` (
`author-link` varchar(255) NOT NULL DEFAULT '', `author-link` varchar(255) NOT NULL DEFAULT '',
`author-avatar` varchar(255) NOT NULL DEFAULT '', `author-avatar` varchar(255) NOT NULL DEFAULT '',
`title` varchar(255) NOT NULL DEFAULT '', `title` varchar(255) NOT NULL DEFAULT '',
`body` mediumtext NOT NULL, `body` mediumtext,
`app` varchar(255) NOT NULL DEFAULT '', `app` varchar(255) NOT NULL DEFAULT '',
`verb` varchar(255) NOT NULL DEFAULT '', `verb` varchar(255) NOT NULL DEFAULT '',
`object-type` varchar(255) NOT NULL DEFAULT '', `object-type` varchar(255) NOT NULL DEFAULT '',
`object` text NOT NULL, `object` text,
`target-type` varchar(255) NOT NULL DEFAULT '', `target-type` varchar(255) NOT NULL DEFAULT '',
`target` text NOT NULL, `target` text,
`postopts` text NOT NULL, `postopts` text,
`plink` varchar(255) NOT NULL DEFAULT '', `plink` varchar(255) NOT NULL DEFAULT '',
`resource-id` varchar(255) NOT NULL DEFAULT '', `resource-id` varchar(255) NOT NULL DEFAULT '',
`event-id` int(11) NOT NULL DEFAULT 0, `event-id` int(11) NOT NULL DEFAULT 0,
`tag` mediumtext NOT NULL, `tag` mediumtext,
`attach` mediumtext NOT NULL, `attach` mediumtext,
`inform` mediumtext NOT NULL, `inform` mediumtext,
`file` mediumtext NOT NULL, `file` mediumtext,
`location` varchar(255) NOT NULL DEFAULT '', `location` varchar(255) NOT NULL DEFAULT '',
`coord` varchar(255) NOT NULL DEFAULT '', `coord` varchar(255) NOT NULL DEFAULT '',
`allow_cid` mediumtext NOT NULL, `allow_cid` mediumtext,
`allow_gid` mediumtext NOT NULL, `allow_gid` mediumtext,
`deny_cid` mediumtext NOT NULL, `deny_cid` mediumtext,
`deny_gid` mediumtext NOT NULL, `deny_gid` mediumtext,
`private` tinyint(1) NOT NULL DEFAULT 0, `private` tinyint(1) NOT NULL DEFAULT 0,
`pubmail` tinyint(1) NOT NULL DEFAULT 0, `pubmail` tinyint(1) NOT NULL DEFAULT 0,
`moderated` tinyint(1) NOT NULL DEFAULT 0, `moderated` tinyint(1) NOT NULL DEFAULT 0,
@ -504,7 +504,7 @@ CREATE TABLE IF NOT EXISTS `item` (
`mention` tinyint(1) NOT NULL DEFAULT 0, `mention` tinyint(1) NOT NULL DEFAULT 0,
`network` varchar(32) NOT NULL DEFAULT '', `network` varchar(32) NOT NULL DEFAULT '',
`rendered-hash` varchar(32) NOT NULL DEFAULT '', `rendered-hash` varchar(32) NOT NULL DEFAULT '',
`rendered-html` mediumtext NOT NULL, `rendered-html` mediumtext,
`global` tinyint(1) NOT NULL DEFAULT 0, `global` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `guid` (`guid`), INDEX `guid` (`guid`),
@ -543,7 +543,7 @@ CREATE TABLE IF NOT EXISTS `item` (
INDEX `uid_eventid` (`uid`,`event-id`), INDEX `uid_eventid` (`uid`,`event-id`),
INDEX `uid_authorlink` (`uid`,`author-link`), INDEX `uid_authorlink` (`uid`,`author-link`),
INDEX `uid_ownerlink` (`uid`,`owner-link`) INDEX `uid_ownerlink` (`uid`,`owner-link`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE item_id -- TABLE item_id
@ -559,7 +559,7 @@ CREATE TABLE IF NOT EXISTS `item_id` (
INDEX `sid` (`sid`), INDEX `sid` (`sid`),
INDEX `service` (`service`), INDEX `service` (`service`),
INDEX `iid` (`iid`) INDEX `iid` (`iid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE locks -- TABLE locks
@ -570,7 +570,7 @@ CREATE TABLE IF NOT EXISTS `locks` (
`locked` tinyint(1) NOT NULL DEFAULT 0, `locked` tinyint(1) NOT NULL DEFAULT 0,
`created` datetime DEFAULT '0000-00-00 00:00:00', `created` datetime DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE mail -- TABLE mail
@ -585,7 +585,7 @@ CREATE TABLE IF NOT EXISTS `mail` (
`contact-id` varchar(255) NOT NULL DEFAULT '', `contact-id` varchar(255) NOT NULL DEFAULT '',
`convid` int(11) unsigned NOT NULL DEFAULT 0, `convid` int(11) unsigned NOT NULL DEFAULT 0,
`title` varchar(255) NOT NULL DEFAULT '', `title` varchar(255) NOT NULL DEFAULT '',
`body` mediumtext NOT NULL, `body` mediumtext,
`seen` tinyint(1) NOT NULL DEFAULT 0, `seen` tinyint(1) NOT NULL DEFAULT 0,
`reply` tinyint(1) NOT NULL DEFAULT 0, `reply` tinyint(1) NOT NULL DEFAULT 0,
`replied` tinyint(1) NOT NULL DEFAULT 0, `replied` tinyint(1) NOT NULL DEFAULT 0,
@ -600,7 +600,7 @@ CREATE TABLE IF NOT EXISTS `mail` (
INDEX `reply` (`reply`), INDEX `reply` (`reply`),
INDEX `uri` (`uri`), INDEX `uri` (`uri`),
INDEX `parent-uri` (`parent-uri`) INDEX `parent-uri` (`parent-uri`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE mailacct -- TABLE mailacct
@ -613,14 +613,14 @@ CREATE TABLE IF NOT EXISTS `mailacct` (
`ssltype` varchar(16) NOT NULL DEFAULT '', `ssltype` varchar(16) NOT NULL DEFAULT '',
`mailbox` varchar(255) NOT NULL DEFAULT '', `mailbox` varchar(255) NOT NULL DEFAULT '',
`user` varchar(255) NOT NULL DEFAULT '', `user` varchar(255) NOT NULL DEFAULT '',
`pass` text NOT NULL, `pass` text,
`reply_to` varchar(255) NOT NULL DEFAULT '', `reply_to` varchar(255) NOT NULL DEFAULT '',
`action` int(11) NOT NULL DEFAULT 0, `action` int(11) NOT NULL DEFAULT 0,
`movetofolder` varchar(255) NOT NULL DEFAULT '', `movetofolder` varchar(255) NOT NULL DEFAULT '',
`pubmail` tinyint(1) NOT NULL DEFAULT 0, `pubmail` tinyint(1) NOT NULL DEFAULT 0,
`last_check` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `last_check` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE manage -- TABLE manage
@ -631,7 +631,7 @@ CREATE TABLE IF NOT EXISTS `manage` (
`mid` int(11) NOT NULL DEFAULT 0, `mid` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid_mid` (`uid`,`mid`) INDEX `uid_mid` (`uid`,`mid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE notify -- TABLE notify
@ -644,7 +644,7 @@ CREATE TABLE IF NOT EXISTS `notify` (
`url` varchar(255) NOT NULL DEFAULT '', `url` varchar(255) NOT NULL DEFAULT '',
`photo` varchar(255) NOT NULL DEFAULT '', `photo` varchar(255) NOT NULL DEFAULT '',
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`msg` mediumtext NOT NULL, `msg` mediumtext,
`uid` int(11) NOT NULL DEFAULT 0, `uid` int(11) NOT NULL DEFAULT 0,
`link` varchar(255) NOT NULL DEFAULT '', `link` varchar(255) NOT NULL DEFAULT '',
`iid` int(11) NOT NULL DEFAULT 0, `iid` int(11) NOT NULL DEFAULT 0,
@ -654,7 +654,7 @@ CREATE TABLE IF NOT EXISTS `notify` (
`otype` varchar(16) NOT NULL DEFAULT '', `otype` varchar(16) NOT NULL DEFAULT '',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`) INDEX `uid` (`uid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE notify-threads -- TABLE notify-threads
@ -668,18 +668,18 @@ CREATE TABLE IF NOT EXISTS `notify-threads` (
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `master-parent-item` (`master-parent-item`), INDEX `master-parent-item` (`master-parent-item`),
INDEX `receiver-uid` (`receiver-uid`) INDEX `receiver-uid` (`receiver-uid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE oembed -- TABLE oembed
-- --
CREATE TABLE IF NOT EXISTS `oembed` ( CREATE TABLE IF NOT EXISTS `oembed` (
`url` varchar(255) NOT NULL, `url` varchar(255) NOT NULL,
`content` text NOT NULL, `content` text,
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(`url`), PRIMARY KEY(`url`),
INDEX `created` (`created`) INDEX `created` (`created`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE parsed_url -- TABLE parsed_url
@ -688,11 +688,11 @@ CREATE TABLE IF NOT EXISTS `parsed_url` (
`url` varchar(255) NOT NULL, `url` varchar(255) NOT NULL,
`guessing` tinyint(1) NOT NULL DEFAULT 0, `guessing` tinyint(1) NOT NULL DEFAULT 0,
`oembed` tinyint(1) NOT NULL DEFAULT 0, `oembed` tinyint(1) NOT NULL DEFAULT 0,
`content` text NOT NULL, `content` text,
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(`url`,`guessing`,`oembed`), PRIMARY KEY(`url`,`guessing`,`oembed`),
INDEX `created` (`created`) INDEX `created` (`created`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE pconfig -- TABLE pconfig
@ -702,10 +702,10 @@ CREATE TABLE IF NOT EXISTS `pconfig` (
`uid` int(11) NOT NULL DEFAULT 0, `uid` int(11) NOT NULL DEFAULT 0,
`cat` varchar(255) NOT NULL DEFAULT '', `cat` varchar(255) NOT NULL DEFAULT '',
`k` varchar(255) NOT NULL DEFAULT '', `k` varchar(255) NOT NULL DEFAULT '',
`v` mediumtext NOT NULL, `v` mediumtext,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid_cat_k` (`uid`,`cat`(30),`k`(30)) INDEX `uid_cat_k` (`uid`,`cat`(30),`k`(30))
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE photo -- TABLE photo
@ -719,7 +719,7 @@ CREATE TABLE IF NOT EXISTS `photo` (
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`title` varchar(255) NOT NULL DEFAULT '', `title` varchar(255) NOT NULL DEFAULT '',
`desc` text NOT NULL, `desc` text,
`album` varchar(255) NOT NULL DEFAULT '', `album` varchar(255) NOT NULL DEFAULT '',
`filename` varchar(255) NOT NULL DEFAULT '', `filename` varchar(255) NOT NULL DEFAULT '',
`type` varchar(128) NOT NULL DEFAULT 'image/jpeg', `type` varchar(128) NOT NULL DEFAULT 'image/jpeg',
@ -729,15 +729,15 @@ CREATE TABLE IF NOT EXISTS `photo` (
`data` mediumblob NOT NULL, `data` mediumblob NOT NULL,
`scale` tinyint(3) NOT NULL DEFAULT 0, `scale` tinyint(3) NOT NULL DEFAULT 0,
`profile` tinyint(1) NOT NULL DEFAULT 0, `profile` tinyint(1) NOT NULL DEFAULT 0,
`allow_cid` mediumtext NOT NULL, `allow_cid` mediumtext,
`allow_gid` mediumtext NOT NULL, `allow_gid` mediumtext,
`deny_cid` mediumtext NOT NULL, `deny_cid` mediumtext,
`deny_gid` mediumtext NOT NULL, `deny_gid` mediumtext,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`), INDEX `uid` (`uid`),
INDEX `resource-id` (`resource-id`), INDEX `resource-id` (`resource-id`),
INDEX `guid` (`guid`) INDEX `guid` (`guid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE poll -- TABLE poll
@ -745,19 +745,19 @@ CREATE TABLE IF NOT EXISTS `photo` (
CREATE TABLE IF NOT EXISTS `poll` ( CREATE TABLE IF NOT EXISTS `poll` (
`id` int(11) NOT NULL auto_increment, `id` int(11) NOT NULL auto_increment,
`uid` int(11) NOT NULL DEFAULT 0, `uid` int(11) NOT NULL DEFAULT 0,
`q0` mediumtext NOT NULL, `q0` mediumtext,
`q1` mediumtext NOT NULL, `q1` mediumtext,
`q2` mediumtext NOT NULL, `q2` mediumtext,
`q3` mediumtext NOT NULL, `q3` mediumtext,
`q4` mediumtext NOT NULL, `q4` mediumtext,
`q5` mediumtext NOT NULL, `q5` mediumtext,
`q6` mediumtext NOT NULL, `q6` mediumtext,
`q7` mediumtext NOT NULL, `q7` mediumtext,
`q8` mediumtext NOT NULL, `q8` mediumtext,
`q9` mediumtext NOT NULL, `q9` mediumtext,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`) INDEX `uid` (`uid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE poll_result -- TABLE poll_result
@ -769,7 +769,7 @@ CREATE TABLE IF NOT EXISTS `poll_result` (
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `poll_id` (`poll_id`), INDEX `poll_id` (`poll_id`),
INDEX `choice` (`choice`) INDEX `choice` (`choice`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE profile -- TABLE profile
@ -791,26 +791,26 @@ CREATE TABLE IF NOT EXISTS `profile` (
`hometown` varchar(255) NOT NULL DEFAULT '', `hometown` varchar(255) NOT NULL DEFAULT '',
`gender` varchar(32) NOT NULL DEFAULT '', `gender` varchar(32) NOT NULL DEFAULT '',
`marital` varchar(255) NOT NULL DEFAULT '', `marital` varchar(255) NOT NULL DEFAULT '',
`with` text NOT NULL, `with` text,
`howlong` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `howlong` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`sexual` varchar(255) NOT NULL DEFAULT '', `sexual` varchar(255) NOT NULL DEFAULT '',
`politic` varchar(255) NOT NULL DEFAULT '', `politic` varchar(255) NOT NULL DEFAULT '',
`religion` varchar(255) NOT NULL DEFAULT '', `religion` varchar(255) NOT NULL DEFAULT '',
`pub_keywords` text NOT NULL, `pub_keywords` text,
`prv_keywords` text NOT NULL, `prv_keywords` text,
`likes` text NOT NULL, `likes` text,
`dislikes` text NOT NULL, `dislikes` text,
`about` text NOT NULL, `about` text,
`summary` varchar(255) NOT NULL DEFAULT '', `summary` varchar(255) NOT NULL DEFAULT '',
`music` text NOT NULL, `music` text,
`book` text NOT NULL, `book` text,
`tv` text NOT NULL, `tv` text,
`film` text NOT NULL, `film` text,
`interest` text NOT NULL, `interest` text,
`romance` text NOT NULL, `romance` text,
`work` text NOT NULL, `work` text,
`education` text NOT NULL, `education` text,
`contact` text NOT NULL, `contact` text,
`homepage` varchar(255) NOT NULL DEFAULT '', `homepage` varchar(255) NOT NULL DEFAULT '',
`photo` varchar(255) NOT NULL DEFAULT '', `photo` varchar(255) NOT NULL DEFAULT '',
`thumb` varchar(255) NOT NULL DEFAULT '', `thumb` varchar(255) NOT NULL DEFAULT '',
@ -818,7 +818,7 @@ CREATE TABLE IF NOT EXISTS `profile` (
`net-publish` tinyint(1) NOT NULL DEFAULT 0, `net-publish` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `hometown` (`hometown`) INDEX `hometown` (`hometown`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE profile_check -- TABLE profile_check
@ -831,7 +831,7 @@ CREATE TABLE IF NOT EXISTS `profile_check` (
`sec` varchar(255) NOT NULL DEFAULT '', `sec` varchar(255) NOT NULL DEFAULT '',
`expire` int(11) NOT NULL DEFAULT 0, `expire` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE push_subscriber -- TABLE push_subscriber
@ -846,7 +846,7 @@ CREATE TABLE IF NOT EXISTS `push_subscriber` (
`last_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `last_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`secret` varchar(255) NOT NULL DEFAULT '', `secret` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE queue -- TABLE queue
@ -857,7 +857,7 @@ CREATE TABLE IF NOT EXISTS `queue` (
`network` varchar(32) NOT NULL DEFAULT '', `network` varchar(32) NOT NULL DEFAULT '',
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`last` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `last` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`content` mediumtext NOT NULL, `content` mediumtext,
`batch` tinyint(1) NOT NULL DEFAULT 0, `batch` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `cid` (`cid`), INDEX `cid` (`cid`),
@ -865,7 +865,7 @@ CREATE TABLE IF NOT EXISTS `queue` (
INDEX `last` (`last`), INDEX `last` (`last`),
INDEX `network` (`network`), INDEX `network` (`network`),
INDEX `batch` (`batch`) INDEX `batch` (`batch`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE register -- TABLE register
@ -878,7 +878,7 @@ CREATE TABLE IF NOT EXISTS `register` (
`password` varchar(255) NOT NULL DEFAULT '', `password` varchar(255) NOT NULL DEFAULT '',
`language` varchar(16) NOT NULL DEFAULT '', `language` varchar(16) NOT NULL DEFAULT '',
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE search -- TABLE search
@ -890,7 +890,7 @@ CREATE TABLE IF NOT EXISTS `search` (
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `uid` (`uid`), INDEX `uid` (`uid`),
INDEX `term` (`term`) INDEX `term` (`term`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE session -- TABLE session
@ -898,12 +898,12 @@ CREATE TABLE IF NOT EXISTS `search` (
CREATE TABLE IF NOT EXISTS `session` ( CREATE TABLE IF NOT EXISTS `session` (
`id` bigint(20) unsigned NOT NULL auto_increment, `id` bigint(20) unsigned NOT NULL auto_increment,
`sid` varchar(255) NOT NULL DEFAULT '', `sid` varchar(255) NOT NULL DEFAULT '',
`data` text NOT NULL, `data` text,
`expire` int(10) unsigned NOT NULL DEFAULT 0, `expire` int(10) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `sid` (`sid`), INDEX `sid` (`sid`),
INDEX `expire` (`expire`) INDEX `expire` (`expire`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE sign -- TABLE sign
@ -911,12 +911,12 @@ CREATE TABLE IF NOT EXISTS `session` (
CREATE TABLE IF NOT EXISTS `sign` ( CREATE TABLE IF NOT EXISTS `sign` (
`id` int(10) unsigned NOT NULL auto_increment, `id` int(10) unsigned NOT NULL auto_increment,
`iid` int(10) unsigned NOT NULL DEFAULT 0, `iid` int(10) unsigned NOT NULL DEFAULT 0,
`signed_text` mediumtext NOT NULL, `signed_text` mediumtext,
`signature` text NOT NULL, `signature` text,
`signer` varchar(255) NOT NULL DEFAULT '', `signer` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `iid` (`iid`) INDEX `iid` (`iid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE spam -- TABLE spam
@ -933,7 +933,7 @@ CREATE TABLE IF NOT EXISTS `spam` (
INDEX `spam` (`spam`), INDEX `spam` (`spam`),
INDEX `ham` (`ham`), INDEX `ham` (`ham`),
INDEX `term` (`term`) INDEX `term` (`term`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE term -- TABLE term
@ -958,7 +958,7 @@ CREATE TABLE IF NOT EXISTS `term` (
INDEX `uid_otype_type_term_global_created` (`uid`,`otype`,`type`,`term`,`global`,`created`), INDEX `uid_otype_type_term_global_created` (`uid`,`otype`,`type`,`term`,`global`,`created`),
INDEX `otype_type_term_tid` (`otype`,`type`,`term`,`tid`), INDEX `otype_type_term_tid` (`otype`,`type`,`term`,`tid`),
INDEX `guid` (`guid`) INDEX `guid` (`guid`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE thread -- TABLE thread
@ -1002,20 +1002,20 @@ CREATE TABLE IF NOT EXISTS `thread` (
INDEX `wall_private_received` (`wall`,`private`,`received`), INDEX `wall_private_received` (`wall`,`private`,`received`),
INDEX `uid_created` (`uid`,`created`), INDEX `uid_created` (`uid`,`created`),
INDEX `uid_commented` (`uid`,`commented`) INDEX `uid_commented` (`uid`,`commented`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE tokens -- TABLE tokens
-- --
CREATE TABLE IF NOT EXISTS `tokens` ( CREATE TABLE IF NOT EXISTS `tokens` (
`id` varchar(40) NOT NULL, `id` varchar(40) NOT NULL,
`secret` text NOT NULL, `secret` text,
`client_id` varchar(20) NOT NULL DEFAULT '', `client_id` varchar(20) NOT NULL DEFAULT '',
`expires` int(11) NOT NULL DEFAULT 0, `expires` int(11) NOT NULL DEFAULT 0,
`scope` varchar(200) NOT NULL DEFAULT '', `scope` varchar(200) NOT NULL DEFAULT '',
`uid` int(11) NOT NULL DEFAULT 0, `uid` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`) PRIMARY KEY(`id`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE user -- TABLE user
@ -1035,10 +1035,10 @@ CREATE TABLE IF NOT EXISTS `user` (
`default-location` varchar(255) NOT NULL DEFAULT '', `default-location` varchar(255) NOT NULL DEFAULT '',
`allow_location` tinyint(1) NOT NULL DEFAULT 0, `allow_location` tinyint(1) NOT NULL DEFAULT 0,
`theme` varchar(255) NOT NULL DEFAULT '', `theme` varchar(255) NOT NULL DEFAULT '',
`pubkey` text NOT NULL, `pubkey` text,
`prvkey` text NOT NULL, `prvkey` text,
`spubkey` text NOT NULL, `spubkey` text,
`sprvkey` text NOT NULL, `sprvkey` text,
`verified` tinyint(1) unsigned NOT NULL DEFAULT 0, `verified` tinyint(1) unsigned NOT NULL DEFAULT 0,
`blocked` tinyint(1) unsigned NOT NULL DEFAULT 0, `blocked` tinyint(1) unsigned NOT NULL DEFAULT 0,
`blockwall` tinyint(1) unsigned NOT NULL DEFAULT 0, `blockwall` tinyint(1) unsigned NOT NULL DEFAULT 0,
@ -1058,14 +1058,14 @@ CREATE TABLE IF NOT EXISTS `user` (
`expire_notification_sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `expire_notification_sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`service_class` varchar(32) NOT NULL DEFAULT '', `service_class` varchar(32) NOT NULL DEFAULT '',
`def_gid` int(11) NOT NULL DEFAULT 0, `def_gid` int(11) NOT NULL DEFAULT 0,
`allow_cid` mediumtext NOT NULL, `allow_cid` mediumtext,
`allow_gid` mediumtext NOT NULL, `allow_gid` mediumtext,
`deny_cid` mediumtext NOT NULL, `deny_cid` mediumtext,
`deny_gid` mediumtext NOT NULL, `deny_gid` mediumtext,
`openidserver` text NOT NULL, `openidserver` text,
PRIMARY KEY(`uid`), PRIMARY KEY(`uid`),
INDEX `nickname` (`nickname`) INDEX `nickname` (`nickname`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE userd -- TABLE userd
@ -1075,19 +1075,19 @@ CREATE TABLE IF NOT EXISTS `userd` (
`username` varchar(255) NOT NULL, `username` varchar(255) NOT NULL,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `username` (`username`) INDEX `username` (`username`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;
-- --
-- TABLE workerqueue -- TABLE workerqueue
-- --
CREATE TABLE IF NOT EXISTS `workerqueue` ( CREATE TABLE IF NOT EXISTS `workerqueue` (
`id` int(11) NOT NULL auto_increment, `id` int(11) NOT NULL auto_increment,
`parameter` text NOT NULL, `parameter` text,
`priority` tinyint(3) unsigned NOT NULL DEFAULT 0, `priority` tinyint(3) unsigned NOT NULL DEFAULT 0,
`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`pid` int(11) NOT NULL DEFAULT 0, `pid` int(11) NOT NULL DEFAULT 0,
`executed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `executed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `created` (`created`) INDEX `created` (`created`)
) DEFAULT CHARSET=utf8; ) DEFAULT CHARSET=utf8mb4;

View file

@ -16,7 +16,7 @@ Contact us
The discussion of Friendica development takes place in the following Friendica forums: The discussion of Friendica development takes place in the following Friendica forums:
* The main [forum for Friendica development](https://friendika.openmindspace.org/profile/friendicadevelopers) * The main [forum for Friendica development](https://helpers.pyxis.uberspace.de/profile/developers)
* The [forum for Friendica theme development](https://friendica.eu/profile/ftdevs) * The [forum for Friendica theme development](https://friendica.eu/profile/ftdevs)
Help other users Help other users
@ -79,7 +79,7 @@ If you want to get involved here:
* Look at the first steps that were made (e.g. the clean theme). * Look at the first steps that were made (e.g. the clean theme).
Ask us to find out whom to talk to about their experiences. Ask us to find out whom to talk to about their experiences.
* Talk to design people if you know any. * Talk to design people if you know any.
* Let us know about your plans [in the dev forum](https://friendika.openmindspace.org/profile/friendicadevelopers) and the [theme developer forum](https://friendica.eu/profile/ftdevs). * Let us know about your plans [in the dev forum](https://helpers.pyxis.uberspace.de/profile/developers) and the [theme developer forum](https://friendica.eu/profile/ftdevs).
Do not worry about cross-posting. Do not worry about cross-posting.
###Client software ###Client software

View file

@ -28,7 +28,7 @@ Friendica Documentation and Resources
**Admin Manual** **Admin Manual**
* [Install](help/Install) * [Install](help/Install)
* [Settings](help/Settings) * [Settings & Admin Panel](help/Settings)
* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors) * [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors)
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd) * [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)
* [Message Flow](help/Message-Flow) * [Message Flow](help/Message-Flow)

View file

@ -10,7 +10,7 @@ Not every PHP/MySQL hosting provider will be able to support Friendica.
Many will. Many will.
But **please** review the requirements and confirm these with your hosting provider prior to installation. But **please** review the requirements and confirm these with your hosting provider prior to installation.
Also if you encounter installation issues, please let us know via the [helper](http://helpers.pyxis.uberspace.de/profile/helpers) or the [developer](https://friendika.openmindspace.org/profile/friendicadevelopers) forum or [file an issue](https://github.com/friendica/friendica/issues). Also if you encounter installation issues, please let us know via the [helper](http://helpers.pyxis.uberspace.de/profile/helpers) or the [developer](https://helpers.pyxis.uberspace.de/profile/developers) forum or [file an issue](https://github.com/friendica/friendica/issues).
Please be as clear as you can about your operating environment and provide as much detail as possible about any error messages you may see, so that we can prevent it from happening in the future. Please be as clear as you can about your operating environment and provide as much detail as possible about any error messages you may see, so that we can prevent it from happening in the future.
Due to the large variety of operating systems and PHP platforms in existence we may have only limited ability to debug your PHP installation or acquire any missing modules - but we will do our best to solve any general code issues. Due to the large variety of operating systems and PHP platforms in existence we may have only limited ability to debug your PHP installation or acquire any missing modules - but we will do our best to solve any general code issues.
If you do not have a Friendica account yet, you can register a temporary one at [tryfriendica.de](https://tryfriendica.de) and join the forums mentioned above from there. If you do not have a Friendica account yet, you can register a temporary one at [tryfriendica.de](https://tryfriendica.de) and join the forums mentioned above from there.
@ -26,12 +26,12 @@ Requirements
--- ---
* Apache with mod-rewrite enabled and "Options All" so you can use a local .htaccess file * Apache with mod-rewrite enabled and "Options All" so you can use a local .htaccess file
* PHP 5.2+. The later the better. You'll need 5.3 for encryption of key exchange conversations. On a Windows environment, 5.2+ might not work as the function dns_get_record() is only available with version 5.3. * PHP 5.4+.
* PHP *command line* access with register_argc_argv set to true in the php.ini file * PHP *command line* access with register_argc_argv set to true in the php.ini file
* curl, gd, mysql, hash and openssl extensions * curl, gd, mysql, hash and openssl extensions
* some form of email server or email gateway such that PHP mail() works * some form of email server or email gateway such that PHP mail() works
* mcrypt (optional; used for server-to-server message encryption) * mcrypt (optional; used for server-to-server message encryption)
* Mysql 5.x or an equivalant alternative for MySQL (MariaDB etc.) * Mysql 5.5.3+ or an equivalant alternative for MySQL (MariaDB, Percona Server etc.)
* the ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks (Windows) (Note: other options are presented in Section 7 of this document.) * the ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks (Windows) (Note: other options are presented in Section 7 of this document.)
* Installation into a top-level domain or sub-domain (without a directory/path component in the URL) is preferred. Directory paths will not be as convenient to use and have not been thoroughly tested. * Installation into a top-level domain or sub-domain (without a directory/path component in the URL) is preferred. Directory paths will not be as convenient to use and have not been thoroughly tested.
* If your hosting provider doesn't allow Unix shell access, you might have trouble getting everything to work. * If your hosting provider doesn't allow Unix shell access, you might have trouble getting everything to work.

View file

@ -29,7 +29,7 @@ Friendica - Dokumentation und Ressourcen
**Technische Dokumentation** **Technische Dokumentation**
* [Installation](help/Install) * [Installation](help/Install)
* [Konfigurationen](help/Settings) * [Konfigurationen & Admin-Panel](help/Settings)
* [Plugins](help/Plugins) * [Plugins](help/Plugins)
* [Konnektoren (Connectors) installieren (Twitter/GNU Social)](help/Installing-Connectors) * [Konnektoren (Connectors) installieren (Twitter/GNU Social)](help/Installing-Connectors)
* [Installation eines ejabberd Servers (XMPP-Chat) mit synchronisierten Anmeldedaten](help/install-ejabberd) (EN) * [Installation eines ejabberd Servers (XMPP-Chat) mit synchronisierten Anmeldedaten](help/install-ejabberd) (EN)

View file

@ -57,7 +57,7 @@ line to your .htconfig.php:
* qsearch_limit - Default value is 100. * qsearch_limit - Default value is 100.
* relay_server - Experimental Diaspora feature. Address of the relay server where public posts should be send to. For example https://podrelay.net * relay_server - Experimental Diaspora feature. Address of the relay server where public posts should be send to. For example https://podrelay.net
* relay_subscribe (Boolean) - Enables the receiving of public posts from the relay. They will be included in the search and on the community page when it is set up to show all public items. * relay_subscribe (Boolean) - Enables the receiving of public posts from the relay. They will be included in the search and on the community page when it is set up to show all public items.
* relay_scope - Can be "all" or "tags". "all" means that every public post should be received. "tags" means that only posts witt selected tags should be received. * relay_scope - Can be "all" or "tags". "all" means that every public post should be received. "tags" means that only posts with selected tags should be received.
* relay_server_tags - Comma separated list of tags for the "tags" subscription (see "relay_scrope") * relay_server_tags - Comma separated list of tags for the "tags" subscription (see "relay_scrope")
* relay_user_tags (Boolean) - If enabled, the tags from the saved searches will used for the "tags" subscription in addition to the "relay_server_tags". * relay_user_tags (Boolean) - If enabled, the tags from the saved searches will used for the "tags" subscription in addition to the "relay_server_tags".
* remove_multiplicated_lines (Boolean) - If enabled, multiple linefeeds in items are stripped to a single one. * remove_multiplicated_lines (Boolean) - If enabled, multiple linefeeds in items are stripped to a single one.

View file

@ -27,7 +27,7 @@ Friendica Documentation and Resources
**Technical Documentation** **Technical Documentation**
* [Install](help/Install) * [Install](help/Install)
* [Settings](help/Settings) * [Settings & Admin Panel](help/Settings)
* [Plugins](help/Plugins) * [Plugins](help/Plugins)
* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors) * [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors)
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd) * [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)

View file

@ -16,6 +16,11 @@ $db_user = 'mysqlusername';
$db_pass = 'mysqlpassword'; $db_pass = 'mysqlpassword';
$db_data = 'mysqldatabasename'; $db_data = 'mysqldatabasename';
// Set the database connection charset to UTF8.
// Changing this value will likely corrupt the special characters.
// You have been warned.
$a->config['system']['db_charset'] = "utf8mb4";
// Choose a legal default timezone. If you are unsure, use "America/Los_Angeles". // Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
// It can be changed later and only applies to timestamps for anonymous viewers. // It can be changed later and only applies to timestamps for anonymous viewers.

View file

@ -788,6 +788,9 @@ class Probe {
isset($data["pubkey"]) AND ($hcard != "")) { isset($data["pubkey"]) AND ($hcard != "")) {
$data["network"] = NETWORK_DIASPORA; $data["network"] = NETWORK_DIASPORA;
// The Diaspora handle must always be lowercase
$data["addr"] = strtolower($data["addr"]);
// We have to overwrite the detected value for "notify" since Hubzilla doesn't send it // We have to overwrite the detected value for "notify" since Hubzilla doesn't send it
$data["notify"] = $data["baseurl"]."/receive/users/".$data["guid"]; $data["notify"] = $data["baseurl"]."/receive/users/".$data["guid"];
$data["batch"] = $data["baseurl"]."/receive/public"; $data["batch"] = $data["baseurl"]."/receive/public";

View file

@ -2362,29 +2362,54 @@
'attendno' => array(), 'attendno' => array(),
'attendmaybe' => array() 'attendmaybe' => array()
); );
$items = q('SELECT * FROM item $items = q('SELECT * FROM item
WHERE uid=%d AND `thr-parent`="%s" AND visible AND NOT deleted', WHERE uid=%d AND `thr-parent`="%s" AND visible AND NOT deleted',
intval($item['uid']), intval($item['uid']),
dbesc($item['uri'])); dbesc($item['uri']));
foreach ($items as $i){ foreach ($items as $i){
builtin_activity_puller($i, $activities); // not used as result should be structured like other user data
//builtin_activity_puller($i, $activities);
// get user data and add it to the array of the activity
$user = api_get_user($a, $i['author-link']);
switch($i['verb']) {
case ACTIVITY_LIKE:
$activities['like'][] = $user;
break;
case ACTIVITY_DISLIKE:
$activities['dislike'][] = $user;
break;
case ACTIVITY_ATTEND:
$activities['attendyes'][] = $user;
break;
case ACTIVITY_ATTENDNO:
$activities['attendno'][] = $user;
break;
case ACTIVITY_ATTENDMAYBE:
$activities['attendmaybe'][] = $user;
break;
default:
break;
}
} }
if ($type == "xml") { if ($type == "xml") {
$xml_activities = array(); $xml_activities = array();
foreach ($activities as $k => $v) foreach ($activities as $k => $v) {
// change xml element from "like" to "friendica:like"
$xml_activities["friendica:".$k] = $v; $xml_activities["friendica:".$k] = $v;
// add user data into xml output
$k_user = 0;
foreach ($v as $user)
$xml_activities["friendica:".$k][$k_user++.":user"] = $user;
}
$activities = $xml_activities; $activities = $xml_activities;
} }
$res = array(); return $activities;
$uri = $item['uri']."-l";
foreach($activities as $k => $v) {
$res[$k] = (x($v,$uri)?count($v[$uri]):0);
#$res[$k] = ( x($v,$uri) ? array_map("api_contactlink_to_array", $v[$uri]) : array() );
}
return $res;
} }
/** /**

View file

@ -34,7 +34,6 @@ function bb_map_location($match) {
function bb_attachment($Text, $simplehtml = false, $tryoembed = true) { function bb_attachment($Text, $simplehtml = false, $tryoembed = true) {
$data = get_attachment_data($Text); $data = get_attachment_data($Text);
if (!$data) if (!$data)
return $Text; return $Text;
@ -85,7 +84,7 @@ function bb_attachment($Text, $simplehtml = false, $tryoembed = true) {
$text .= $oembed; $text .= $oembed;
if (trim($data["description"]) != "") if (trim($data["description"]) != "")
$text .= sprintf('<blockquote>%s</blockquote></span>', trim($data["description"])); $text .= sprintf('<blockquote>%s</blockquote></span>', trim(bbcode($data["description"])));
} }
} }
return $data["text"].$text.$data["after"]; return $data["text"].$text.$data["after"];
@ -921,6 +920,9 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal
$Text = preg_replace("(\[h5\](.*?)\[\/h5\])ism",'<h5>$1</h5>',$Text); $Text = preg_replace("(\[h5\](.*?)\[\/h5\])ism",'<h5>$1</h5>',$Text);
$Text = preg_replace("(\[h6\](.*?)\[\/h6\])ism",'<h6>$1</h6>',$Text); $Text = preg_replace("(\[h6\](.*?)\[\/h6\])ism",'<h6>$1</h6>',$Text);
// Check for paragraph
$Text = preg_replace("(\[p\](.*?)\[\/p\])ism",'<p>$1</p>',$Text);
// Check for bold text // Check for bold text
$Text = preg_replace("(\[b\](.*?)\[\/b\])ism",'<strong>$1</strong>',$Text); $Text = preg_replace("(\[b\](.*?)\[\/b\])ism",'<strong>$1</strong>',$Text);

View file

@ -11,7 +11,7 @@ function cli_startup() {
if(is_null($a)) { if(is_null($a)) {
$a = new App; $a = new App;
} }
if(is_null($db)) { if(is_null($db)) {
@include(".htconfig.php"); @include(".htconfig.php");
require_once("dba.php"); require_once("dba.php");

View file

@ -390,7 +390,6 @@ function item_fieldlists() {
/* /*
These Fields are not added below (yet). They are here to for bug search. These Fields are not added below (yet). They are here to for bug search.
`item`.`type`, `item`.`type`,
`item`.`object`,
`item`.`extid`, `item`.`extid`,
`item`.`received`, `item`.`received`,
`item`.`changed`, `item`.`changed`,
@ -399,7 +398,6 @@ These Fields are not added below (yet). They are here to for bug search.
`item`.`target`, `item`.`target`,
`item`.`resource-id`, `item`.`resource-id`,
`item`.`tag`, `item`.`tag`,
`item`.`attach`,
`item`.`inform`, `item`.`inform`,
`item`.`pubmail`, `item`.`pubmail`,
`item`.`visible`, `item`.`visible`,
@ -424,8 +422,8 @@ These Fields are not added below (yet). They are here to for bug search.
`item`.`verb`, `item`.`object-type`, `item`.`postopts`, `item`.`plink`, `item`.`verb`, `item`.`object-type`, `item`.`postopts`, `item`.`plink`,
`item`.`guid`, `item`.`wall`, `item`.`private`, `item`.`starred`, `item`.`guid`, `item`.`wall`, `item`.`private`, `item`.`starred`,
`item`.`title`, `item`.`body`, `item`.`file`, `item`.`event-id`, `item`.`title`, `item`.`body`, `item`.`file`, `item`.`event-id`,
`item`.`location`, `item`.`coord`, `item`.`app`, `item`.`location`, `item`.`coord`, `item`.`app`, `item`.`attach`,
`item`.`rendered-hash`, `item`.`rendered-html`, `item`.`rendered-hash`, `item`.`rendered-html`, `item`.`object`,
`item`.`allow_cid`, `item`.`allow_gid`, `item`.`deny_cid`, `item`.`deny_gid`, `item`.`allow_cid`, `item`.`allow_gid`, `item`.`deny_cid`, `item`.`deny_gid`,
`item`.`id` AS `item_id`, `item`.`network` AS `item_network`, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`,
@ -887,7 +885,7 @@ function best_link_url($item,&$sparkle,$ssl_state = false) {
$clean_url = normalise_link($item['author-link']); $clean_url = normalise_link($item['author-link']);
if (local_user()) { if (local_user()) {
$r = q("SELECT `id` FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `nurl` = '%s' LIMIT 1", $r = q("SELECT `id` FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `nurl` = '%s' AND NOT `pending` LIMIT 1",
dbesc(NETWORK_DFRN), intval(local_user()), dbesc(normalise_link($clean_url))); dbesc(NETWORK_DFRN), intval(local_user()), dbesc(normalise_link($clean_url)));
if ($r) { if ($r) {
$best_url = 'redir/'.$r[0]['id']; $best_url = 'redir/'.$r[0]['id'];

View file

@ -27,7 +27,6 @@ function cron_run(&$argv, &$argc){
unset($db_host, $db_user, $db_pass, $db_data); unset($db_host, $db_user, $db_pass, $db_data);
}; };
require_once('include/session.php'); require_once('include/session.php');
require_once('include/datetime.php'); require_once('include/datetime.php');
require_once('include/items.php'); require_once('include/items.php');
@ -70,7 +69,7 @@ function cron_run(&$argv, &$argc){
// run queue delivery process in the background // run queue delivery process in the background
proc_run(PRIORITY_LOW,"include/queue.php"); proc_run(PRIORITY_NEGLIGIBLE,"include/queue.php");
// run the process to discover global contacts in the background // run the process to discover global contacts in the background

View file

@ -27,7 +27,6 @@ function cronjobs_run(&$argv, &$argc){
unset($db_host, $db_user, $db_pass, $db_data); unset($db_host, $db_user, $db_pass, $db_data);
}; };
require_once('include/session.php'); require_once('include/session.php');
require_once('include/datetime.php'); require_once('include/datetime.php');
require_once('include/ostatus.php'); require_once('include/ostatus.php');

View file

@ -66,6 +66,8 @@ class dba {
if(! mysqli_connect_errno()) { if(! mysqli_connect_errno()) {
$this->connected = true; $this->connected = true;
} }
if (isset($a->config["system"]["db_charset"]))
$this->db->set_charset($a->config["system"]["db_charset"]);
} }
else { else {
$this->mysqli = false; $this->mysqli = false;
@ -73,6 +75,8 @@ class dba {
if($this->db && mysql_select_db($db,$this->db)) { if($this->db && mysql_select_db($db,$this->db)) {
$this->connected = true; $this->connected = true;
} }
if (isset($a->config["system"]["db_charset"]))
mysql_set_charset($a->config["system"]["db_charset"], $this->db);
} }
if(! $this->connected) { if(! $this->connected) {
$this->db = null; $this->db = null;
@ -95,6 +99,14 @@ class dba {
$this->error = ''; $this->error = '';
// Check the connection (This can reconnect the connection - if configured)
if ($this->mysqli)
$connected = $this->db->ping();
else
$connected = mysql_ping($this->db);
$connstr = ($connected ? "Connected": "Disonnected");
$stamp1 = microtime(true); $stamp1 = microtime(true);
if($this->mysqli) if($this->mysqli)
@ -122,14 +134,17 @@ class dba {
} }
if($this->mysqli) { if($this->mysqli) {
if($this->db->errno) if($this->db->errno) {
$this->error = $this->db->error; $this->error = $this->db->error;
$this->errorno = $this->db->errno;
}
} elseif(mysql_errno($this->db)) {
$this->error = mysql_error($this->db);
$this->errorno = mysql_errno($this->db);
} }
elseif(mysql_errno($this->db))
$this->error = mysql_error($this->db);
if(strlen($this->error)) { if(strlen($this->error)) {
logger('dba: ' . $this->error); logger('DB Error ('.$connstr.') '.$this->errorno.': '.$this->error);
} }
if($this->debug) { if($this->debug) {

View file

@ -20,8 +20,8 @@ class dbm {
foreach ($r AS $process) { foreach ($r AS $process) {
$state = trim($process["State"]); $state = trim($process["State"]);
// Filter out all idle processes // Filter out all non blocking processes
if (!in_array($state, array("", "init", "statistics"))) { if (!in_array($state, array("", "init", "statistics", "updating"))) {
++$states[$state]; ++$states[$state];
++$processes; ++$processes;
} }

View file

@ -260,6 +260,13 @@ function db_field_command($parameters, $create = true) {
function db_create_table($name, $fields, $verbose, $action, $indexes=null) { function db_create_table($name, $fields, $verbose, $action, $indexes=null) {
global $a, $db; global $a, $db;
if (isset($a->config["system"]["db_charset"]))
$charset = $a->config["system"]["db_charset"];
elseif ($verbose)
$charset = "utf8mb4";
else
$charset = "utf8";
$r = true; $r = true;
$sql = ""; $sql = "";
@ -282,7 +289,7 @@ function db_create_table($name, $fields, $verbose, $action, $indexes=null) {
$sql = implode(",\n\t", $sql_rows); $sql = implode(",\n\t", $sql_rows);
$sql = sprintf("CREATE TABLE IF NOT EXISTS `%s` (\n\t", dbesc($name)).$sql."\n) DEFAULT CHARSET=utf8"; $sql = sprintf("CREATE TABLE IF NOT EXISTS `%s` (\n\t", dbesc($name)).$sql."\n) DEFAULT CHARSET=".$charset;
if ($verbose) if ($verbose)
echo $sql.";\n"; echo $sql.";\n";
@ -365,10 +372,10 @@ function db_definition() {
"data" => array("type" => "longblob", "not null" => "1"), "data" => array("type" => "longblob", "not null" => "1"),
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"allow_cid" => array("type" => "mediumtext", "not null" => "1"), "allow_cid" => array("type" => "mediumtext"),
"allow_gid" => array("type" => "mediumtext", "not null" => "1"), "allow_gid" => array("type" => "mediumtext"),
"deny_cid" => array("type" => "mediumtext", "not null" => "1"), "deny_cid" => array("type" => "mediumtext"),
"deny_gid" => array("type" => "mediumtext", "not null" => "1"), "deny_gid" => array("type" => "mediumtext"),
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("id"), "PRIMARY" => array("id"),
@ -389,7 +396,7 @@ function db_definition() {
$database["cache"] = array( $database["cache"] = array(
"fields" => array( "fields" => array(
"k" => array("type" => "varchar(255)", "not null" => "1", "primary" => "1"), "k" => array("type" => "varchar(255)", "not null" => "1", "primary" => "1"),
"v" => array("type" => "text", "not null" => "1"), "v" => array("type" => "text"),
"expire_mode" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "expire_mode" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
), ),
@ -429,7 +436,7 @@ function db_definition() {
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
"cat" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "cat" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"k" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "k" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"v" => array("type" => "text", "not null" => "1"), "v" => array("type" => "text"),
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("id"), "PRIMARY" => array("id"),
@ -449,29 +456,29 @@ function db_definition() {
"name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"nick" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "nick" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"about" => array("type" => "text", "not null" => "1"), "about" => array("type" => "text"),
"keywords" => array("type" => "text", "not null" => "1"), "keywords" => array("type" => "text"),
"gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
"attag" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "attag" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"photo" => array("type" => "text", "not null" => "1"), "photo" => array("type" => "text"),
"thumb" => array("type" => "text", "not null" => "1"), "thumb" => array("type" => "text"),
"micro" => array("type" => "text", "not null" => "1"), "micro" => array("type" => "text"),
"site-pubkey" => array("type" => "text", "not null" => "1"), "site-pubkey" => array("type" => "text"),
"issued-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "issued-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"dfrn-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "dfrn-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"nurl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "nurl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"addr" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "addr" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"pubkey" => array("type" => "text", "not null" => "1"), "pubkey" => array("type" => "text"),
"prvkey" => array("type" => "text", "not null" => "1"), "prvkey" => array("type" => "text"),
"batch" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "batch" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"request" => array("type" => "text", "not null" => "1"), "request" => array("type" => "text"),
"notify" => array("type" => "text", "not null" => "1"), "notify" => array("type" => "text"),
"poll" => array("type" => "text", "not null" => "1"), "poll" => array("type" => "text"),
"confirm" => array("type" => "text", "not null" => "1"), "confirm" => array("type" => "text"),
"poco" => array("type" => "text", "not null" => "1"), "poco" => array("type" => "text"),
"aes_allow" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "aes_allow" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"ret-aes" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "ret-aes" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"usehub" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "usehub" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
@ -495,15 +502,15 @@ function db_definition() {
"archive" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "archive" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"pending" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"), "pending" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"),
"rating" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "rating" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"reason" => array("type" => "text", "not null" => "1"), "reason" => array("type" => "text"),
"closeness" => array("type" => "tinyint(2)", "not null" => "1", "default" => "99"), "closeness" => array("type" => "tinyint(2)", "not null" => "1", "default" => "99"),
"info" => array("type" => "mediumtext", "not null" => "1"), "info" => array("type" => "mediumtext"),
"profile-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "profile-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"bdyear" => array("type" => "varchar(4)", "not null" => "1", "default" => ""), "bdyear" => array("type" => "varchar(4)", "not null" => "1", "default" => ""),
"bd" => array("type" => "date", "not null" => "1", "default" => "0000-00-00"), "bd" => array("type" => "date", "not null" => "1", "default" => "0000-00-00"),
"notify_new_posts" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "notify_new_posts" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"fetch_further_information" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "fetch_further_information" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"ffi_keyword_blacklist" => array("type" => "mediumtext", "not null" => "1"), "ffi_keyword_blacklist" => array("type" => "mediumtext"),
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("id"), "PRIMARY" => array("id"),
@ -515,12 +522,12 @@ function db_definition() {
"fields" => array( "fields" => array(
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
"guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""), "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""),
"recips" => array("type" => "mediumtext", "not null" => "1"), "recips" => array("type" => "mediumtext"),
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"creator" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "creator" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"subject" => array("type" => "mediumtext", "not null" => "1"), "subject" => array("type" => "mediumtext"),
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("id"), "PRIMARY" => array("id"),
@ -548,17 +555,17 @@ function db_definition() {
"edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"start" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "start" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"finish" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "finish" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"summary" => array("type" => "text", "not null" => "1"), "summary" => array("type" => "text"),
"desc" => array("type" => "text", "not null" => "1"), "desc" => array("type" => "text"),
"location" => array("type" => "text", "not null" => "1"), "location" => array("type" => "text"),
"type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"nofinish" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "nofinish" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"adjust" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"), "adjust" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"),
"ignore" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"), "ignore" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"),
"allow_cid" => array("type" => "mediumtext", "not null" => "1"), "allow_cid" => array("type" => "mediumtext"),
"allow_gid" => array("type" => "mediumtext", "not null" => "1"), "allow_gid" => array("type" => "mediumtext"),
"deny_cid" => array("type" => "mediumtext", "not null" => "1"), "deny_cid" => array("type" => "mediumtext"),
"deny_gid" => array("type" => "mediumtext", "not null" => "1"), "deny_gid" => array("type" => "mediumtext"),
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("id"), "PRIMARY" => array("id"),
@ -582,7 +589,7 @@ function db_definition() {
"priority" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "priority" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
"alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"pubkey" => array("type" => "text", "not null" => "1"), "pubkey" => array("type" => "text"),
"updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
), ),
"indexes" => array( "indexes" => array(
@ -606,7 +613,7 @@ function db_definition() {
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
"server" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "server" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"posturl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "posturl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"key" => array("type" => "text", "not null" => "1"), "key" => array("type" => "text"),
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("id"), "PRIMARY" => array("id"),
@ -622,7 +629,7 @@ function db_definition() {
"url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"request" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "request" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"note" => array("type" => "text", "not null" => "1"), "note" => array("type" => "text"),
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
), ),
"indexes" => array( "indexes" => array(
@ -655,8 +662,8 @@ function db_definition() {
"last_contact" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), "last_contact" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"),
"last_failure" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), "last_failure" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"),
"location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"about" => array("type" => "text", "not null" => "1"), "about" => array("type" => "text"),
"keywords" => array("type" => "text", "not null" => "1"), "keywords" => array("type" => "text"),
"gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
"birthday" => array("type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00"), "birthday" => array("type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00"),
"community" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "community" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
@ -664,7 +671,7 @@ function db_definition() {
"nsfw" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "nsfw" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"network" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "network" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"addr" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "addr" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"notify" => array("type" => "text", "not null" => "1"), "notify" => array("type" => "text"),
"alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"generation" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"), "generation" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"),
"server_url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "server_url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@ -726,7 +733,7 @@ function db_definition() {
"nurl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "nurl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"version" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "version" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"site_name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "site_name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"info" => array("type" => "text", "not null" => "1"), "info" => array("type" => "text"),
"register_policy" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "register_policy" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"poco" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "poco" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"noscrape" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "noscrape" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@ -763,7 +770,7 @@ function db_definition() {
"contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "contact-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"knowyou" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "knowyou" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"duplex" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "duplex" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"note" => array("type" => "text", "not null" => "1"), "note" => array("type" => "text"),
"hash" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "hash" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"datetime" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "datetime" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"blocked" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"), "blocked" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"),
@ -802,27 +809,27 @@ function db_definition() {
"author-link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "author-link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"author-avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "author-avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"body" => array("type" => "mediumtext", "not null" => "1"), "body" => array("type" => "mediumtext"),
"app" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "app" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"verb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "verb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"object-type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "object-type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"object" => array("type" => "text", "not null" => "1"), "object" => array("type" => "text"),
"target-type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "target-type" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"target" => array("type" => "text", "not null" => "1"), "target" => array("type" => "text"),
"postopts" => array("type" => "text", "not null" => "1"), "postopts" => array("type" => "text"),
"plink" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "plink" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"resource-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "resource-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"event-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "event-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"tag" => array("type" => "mediumtext", "not null" => "1"), "tag" => array("type" => "mediumtext"),
"attach" => array("type" => "mediumtext", "not null" => "1"), "attach" => array("type" => "mediumtext"),
"inform" => array("type" => "mediumtext", "not null" => "1"), "inform" => array("type" => "mediumtext"),
"file" => array("type" => "mediumtext", "not null" => "1"), "file" => array("type" => "mediumtext"),
"location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"coord" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "coord" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"allow_cid" => array("type" => "mediumtext", "not null" => "1"), "allow_cid" => array("type" => "mediumtext"),
"allow_gid" => array("type" => "mediumtext", "not null" => "1"), "allow_gid" => array("type" => "mediumtext"),
"deny_cid" => array("type" => "mediumtext", "not null" => "1"), "deny_cid" => array("type" => "mediumtext"),
"deny_gid" => array("type" => "mediumtext", "not null" => "1"), "deny_gid" => array("type" => "mediumtext"),
"private" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "private" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"pubmail" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "pubmail" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"moderated" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "moderated" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
@ -838,7 +845,7 @@ function db_definition() {
"mention" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "mention" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
"rendered-hash" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "rendered-hash" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
"rendered-html" => array("type" => "mediumtext", "not null" => "1"), "rendered-html" => array("type" => "mediumtext"),
"global" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "global" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
), ),
"indexes" => array( "indexes" => array(
@ -919,7 +926,7 @@ function db_definition() {
"contact-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "contact-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"convid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), "convid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"),
"title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"body" => array("type" => "mediumtext", "not null" => "1"), "body" => array("type" => "mediumtext"),
"seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "seen" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"reply" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "reply" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"replied" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "replied" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
@ -947,7 +954,7 @@ function db_definition() {
"ssltype" => array("type" => "varchar(16)", "not null" => "1", "default" => ""), "ssltype" => array("type" => "varchar(16)", "not null" => "1", "default" => ""),
"mailbox" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "mailbox" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"user" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "user" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"pass" => array("type" => "text", "not null" => "1"), "pass" => array("type" => "text"),
"reply_to" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "reply_to" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"action" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "action" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"movetofolder" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "movetofolder" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@ -978,7 +985,7 @@ function db_definition() {
"url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"msg" => array("type" => "mediumtext", "not null" => "1"), "msg" => array("type" => "mediumtext"),
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"iid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "iid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
@ -1009,7 +1016,7 @@ function db_definition() {
$database["oembed"] = array( $database["oembed"] = array(
"fields" => array( "fields" => array(
"url" => array("type" => "varchar(255)", "not null" => "1", "primary" => "1"), "url" => array("type" => "varchar(255)", "not null" => "1", "primary" => "1"),
"content" => array("type" => "text", "not null" => "1"), "content" => array("type" => "text"),
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
), ),
"indexes" => array( "indexes" => array(
@ -1022,7 +1029,7 @@ function db_definition() {
"url" => array("type" => "varchar(255)", "not null" => "1", "primary" => "1"), "url" => array("type" => "varchar(255)", "not null" => "1", "primary" => "1"),
"guessing" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0", "primary" => "1"), "guessing" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0", "primary" => "1"),
"oembed" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0", "primary" => "1"), "oembed" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0", "primary" => "1"),
"content" => array("type" => "text", "not null" => "1"), "content" => array("type" => "text"),
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
), ),
"indexes" => array( "indexes" => array(
@ -1036,7 +1043,7 @@ function db_definition() {
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"cat" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "cat" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"k" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "k" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"v" => array("type" => "mediumtext", "not null" => "1"), "v" => array("type" => "mediumtext"),
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("id"), "PRIMARY" => array("id"),
@ -1053,7 +1060,7 @@ function db_definition() {
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"desc" => array("type" => "text", "not null" => "1"), "desc" => array("type" => "text"),
"album" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "album" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"filename" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "filename" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"type" => array("type" => "varchar(128)", "not null" => "1", "default" => "image/jpeg"), "type" => array("type" => "varchar(128)", "not null" => "1", "default" => "image/jpeg"),
@ -1063,10 +1070,10 @@ function db_definition() {
"data" => array("type" => "mediumblob", "not null" => "1"), "data" => array("type" => "mediumblob", "not null" => "1"),
"scale" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"), "scale" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"),
"profile" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "profile" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"allow_cid" => array("type" => "mediumtext", "not null" => "1"), "allow_cid" => array("type" => "mediumtext"),
"allow_gid" => array("type" => "mediumtext", "not null" => "1"), "allow_gid" => array("type" => "mediumtext"),
"deny_cid" => array("type" => "mediumtext", "not null" => "1"), "deny_cid" => array("type" => "mediumtext"),
"deny_gid" => array("type" => "mediumtext", "not null" => "1"), "deny_gid" => array("type" => "mediumtext"),
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("id"), "PRIMARY" => array("id"),
@ -1079,16 +1086,16 @@ function db_definition() {
"fields" => array( "fields" => array(
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
"uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"q0" => array("type" => "mediumtext", "not null" => "1"), "q0" => array("type" => "mediumtext"),
"q1" => array("type" => "mediumtext", "not null" => "1"), "q1" => array("type" => "mediumtext"),
"q2" => array("type" => "mediumtext", "not null" => "1"), "q2" => array("type" => "mediumtext"),
"q3" => array("type" => "mediumtext", "not null" => "1"), "q3" => array("type" => "mediumtext"),
"q4" => array("type" => "mediumtext", "not null" => "1"), "q4" => array("type" => "mediumtext"),
"q5" => array("type" => "mediumtext", "not null" => "1"), "q5" => array("type" => "mediumtext"),
"q6" => array("type" => "mediumtext", "not null" => "1"), "q6" => array("type" => "mediumtext"),
"q7" => array("type" => "mediumtext", "not null" => "1"), "q7" => array("type" => "mediumtext"),
"q8" => array("type" => "mediumtext", "not null" => "1"), "q8" => array("type" => "mediumtext"),
"q9" => array("type" => "mediumtext", "not null" => "1"), "q9" => array("type" => "mediumtext"),
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("id"), "PRIMARY" => array("id"),
@ -1107,6 +1114,17 @@ function db_definition() {
"choice" => array("choice"), "choice" => array("choice"),
) )
); );
$database["process"] = array(
"fields" => array(
"pid" => array("type" => "int(10) unsigned", "not null" => "1", "primary" => "1"),
"command" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
),
"indexes" => array(
"PRIMARY" => array("pid"),
"command" => array("command"),
)
);
$database["profile"] = array( $database["profile"] = array(
"fields" => array( "fields" => array(
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
@ -1125,26 +1143,26 @@ function db_definition() {
"hometown" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "hometown" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
"marital" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "marital" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"with" => array("type" => "text", "not null" => "1"), "with" => array("type" => "text"),
"howlong" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "howlong" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"sexual" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "sexual" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"politic" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "politic" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"religion" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "religion" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"pub_keywords" => array("type" => "text", "not null" => "1"), "pub_keywords" => array("type" => "text"),
"prv_keywords" => array("type" => "text", "not null" => "1"), "prv_keywords" => array("type" => "text"),
"likes" => array("type" => "text", "not null" => "1"), "likes" => array("type" => "text"),
"dislikes" => array("type" => "text", "not null" => "1"), "dislikes" => array("type" => "text"),
"about" => array("type" => "text", "not null" => "1"), "about" => array("type" => "text"),
"summary" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "summary" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"music" => array("type" => "text", "not null" => "1"), "music" => array("type" => "text"),
"book" => array("type" => "text", "not null" => "1"), "book" => array("type" => "text"),
"tv" => array("type" => "text", "not null" => "1"), "tv" => array("type" => "text"),
"film" => array("type" => "text", "not null" => "1"), "film" => array("type" => "text"),
"interest" => array("type" => "text", "not null" => "1"), "interest" => array("type" => "text"),
"romance" => array("type" => "text", "not null" => "1"), "romance" => array("type" => "text"),
"work" => array("type" => "text", "not null" => "1"), "work" => array("type" => "text"),
"education" => array("type" => "text", "not null" => "1"), "education" => array("type" => "text"),
"contact" => array("type" => "text", "not null" => "1"), "contact" => array("type" => "text"),
"homepage" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "homepage" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"thumb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "thumb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
@ -1191,7 +1209,7 @@ function db_definition() {
"network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"last" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "last" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"content" => array("type" => "mediumtext", "not null" => "1"), "content" => array("type" => "mediumtext"),
"batch" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "batch" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
), ),
"indexes" => array( "indexes" => array(
@ -1232,7 +1250,7 @@ function db_definition() {
"fields" => array( "fields" => array(
"id" => array("type" => "bigint(20) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "id" => array("type" => "bigint(20) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
"sid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "sid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"data" => array("type" => "text", "not null" => "1"), "data" => array("type" => "text"),
"expire" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), "expire" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
), ),
"indexes" => array( "indexes" => array(
@ -1245,8 +1263,8 @@ function db_definition() {
"fields" => array( "fields" => array(
"id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
"iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), "iid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"),
"signed_text" => array("type" => "mediumtext", "not null" => "1"), "signed_text" => array("type" => "mediumtext"),
"signature" => array("type" => "text", "not null" => "1"), "signature" => array("type" => "text"),
"signer" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "signer" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
), ),
"indexes" => array( "indexes" => array(
@ -1343,7 +1361,7 @@ function db_definition() {
$database["tokens"] = array( $database["tokens"] = array(
"fields" => array( "fields" => array(
"id" => array("type" => "varchar(40)", "not null" => "1", "primary" => "1"), "id" => array("type" => "varchar(40)", "not null" => "1", "primary" => "1"),
"secret" => array("type" => "text", "not null" => "1"), "secret" => array("type" => "text"),
"client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => ""), "client_id" => array("type" => "varchar(20)", "not null" => "1", "default" => ""),
"expires" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "expires" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"scope" => array("type" => "varchar(200)", "not null" => "1", "default" => ""), "scope" => array("type" => "varchar(200)", "not null" => "1", "default" => ""),
@ -1369,10 +1387,10 @@ function db_definition() {
"default-location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "default-location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"allow_location" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "allow_location" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"theme" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "theme" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"pubkey" => array("type" => "text", "not null" => "1"), "pubkey" => array("type" => "text"),
"prvkey" => array("type" => "text", "not null" => "1"), "prvkey" => array("type" => "text"),
"spubkey" => array("type" => "text", "not null" => "1"), "spubkey" => array("type" => "text"),
"sprvkey" => array("type" => "text", "not null" => "1"), "sprvkey" => array("type" => "text"),
"verified" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"), "verified" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"),
"blocked" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"), "blocked" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"),
"blockwall" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"), "blockwall" => array("type" => "tinyint(1) unsigned", "not null" => "1", "default" => "0"),
@ -1392,11 +1410,11 @@ function db_definition() {
"expire_notification_sent" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "expire_notification_sent" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"service_class" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "service_class" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
"def_gid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "def_gid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"allow_cid" => array("type" => "mediumtext", "not null" => "1"), "allow_cid" => array("type" => "mediumtext"),
"allow_gid" => array("type" => "mediumtext", "not null" => "1"), "allow_gid" => array("type" => "mediumtext"),
"deny_cid" => array("type" => "mediumtext", "not null" => "1"), "deny_cid" => array("type" => "mediumtext"),
"deny_gid" => array("type" => "mediumtext", "not null" => "1"), "deny_gid" => array("type" => "mediumtext"),
"openidserver" => array("type" => "text", "not null" => "1"), "openidserver" => array("type" => "text"),
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("uid"), "PRIMARY" => array("uid"),
@ -1416,7 +1434,7 @@ function db_definition() {
$database["workerqueue"] = array( $database["workerqueue"] = array(
"fields" => array( "fields" => array(
"id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"),
"parameter" => array("type" => "text", "not null" => "1"), "parameter" => array("type" => "text"),
"priority" => array("type" => "tinyint(3) unsigned", "not null" => "1", "default" => "0"), "priority" => array("type" => "tinyint(3) unsigned", "not null" => "1", "default" => "0"),
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"pid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "pid" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
@ -1453,6 +1471,7 @@ function dbstructure_run(&$argv, &$argc) {
switch ($argv[1]) { switch ($argv[1]) {
case "update": case "update":
update_structure(true, true); update_structure(true, true);
set_config('system','build',DB_UPDATE_VERSION);
return; return;
case "dumpsql": case "dumpsql":
print_structure(db_definition()); print_structure(db_definition());

View file

@ -623,7 +623,7 @@ class diaspora {
dbesc($arr["photo"]), dbesc($arr["photo"]),
dbesc($arr["request"]), dbesc($arr["request"]),
dbesc($arr["nick"]), dbesc($arr["nick"]),
dbesc($arr["addr"]), dbesc(strtolower($arr["addr"])),
dbesc($arr["guid"]), dbesc($arr["guid"]),
dbesc($arr["batch"]), dbesc($arr["batch"]),
dbesc($arr["notify"]), dbesc($arr["notify"]),
@ -677,7 +677,7 @@ class diaspora {
$r = q("SELECT `addr` FROM `gcontact` WHERE `id` = %d AND `addr` != ''", $r = q("SELECT `addr` FROM `gcontact` WHERE `id` = %d AND `addr` != ''",
intval($gcontact_id)); intval($gcontact_id));
if ($r) if ($r)
return $r[0]["addr"]; return strtolower($r[0]["addr"]);
} }
$r = q("SELECT `network`, `addr`, `self`, `url`, `nick` FROM `contact` WHERE `id` = %d", $r = q("SELECT `network`, `addr`, `self`, `url`, `nick` FROM `contact` WHERE `id` = %d",
@ -697,7 +697,7 @@ class diaspora {
} }
} }
return $handle; return strtolower($handle);
} }
/** /**
@ -1652,7 +1652,7 @@ class diaspora {
* @return bool Success * @return bool Success
*/ */
private function receive_profile($importer, $data) { private function receive_profile($importer, $data) {
$author = notags(unxmlify($data->author)); $author = strtolower(notags(unxmlify($data->author)));
$contact = self::contact_by_handle($importer["uid"], $author); $contact = self::contact_by_handle($importer["uid"], $author);
if (!$contact) if (!$contact)

View file

@ -293,7 +293,7 @@ function event_store($arr) {
`location` = '%s', `location` = '%s',
`type` = '%s', `type` = '%s',
`adjust` = %d, `adjust` = %d,
`nofinish` = %d, `nofinish` = %d
WHERE `id` = %d AND `uid` = %d", WHERE `id` = %d AND `uid` = %d",
dbesc($arr['edited']), dbesc($arr['edited']),
@ -673,7 +673,7 @@ function event_format_export ($events, $format = 'ical', $timezone) {
$dtformat = "%Y%m%dT%H%M%S".$UTC; $dtformat = "%Y%m%dT%H%M%S".$UTC;
$o .= 'DTSTART:'.strftime($dtformat, $tmp).PHP_EOL; $o .= 'DTSTART:'.strftime($dtformat, $tmp).PHP_EOL;
} }
if ($event['finish']) { if (!$event['nofinish']) {
$tmp = strtotime($event['finish']); $tmp = strtotime($event['finish']);
$dtformat = "%Y%m%dT%H%M%S".$UTC; $dtformat = "%Y%m%dT%H%M%S".$UTC;
$o .= 'DTEND:'.strftime($dtformat, $tmp).PHP_EOL; $o .= 'DTEND:'.strftime($dtformat, $tmp).PHP_EOL;
@ -732,13 +732,13 @@ function events_by_uid($uid = 0, $sql_extra = '') {
// requested? then show all of your events, otherwise only those that // requested? then show all of your events, otherwise only those that
// don't have limitations set in allow_cid and allow_gid // don't have limitations set in allow_cid and allow_gid
if (local_user() == $uid) { if (local_user() == $uid) {
$r = q("SELECT `start`, `finish`, `adjust`, `summary`, `desc`, `location` $r = q("SELECT `start`, `finish`, `adjust`, `summary`, `desc`, `location`, `nofinish`
FROM `event` WHERE `uid`= %d AND `cid` = 0 ", FROM `event` WHERE `uid`= %d AND `cid` = 0 ",
intval($uid) intval($uid)
); );
} else { } else {
$r = q("SELECT `start`, `finish`, `adjust`, `summary`, `desc`, `location`FROM `event` $r = q("SELECT `start`, `finish`, `adjust`, `summary`, `desc`, `location`, `nofinish`
WHERE `uid` = %d AND `cid` = 0 $sql_extra ", FROM `event` WHERE `uid`= %d AND `cid` = 0 $sql_extra ",
intval($uid) intval($uid)
); );
} }

View file

@ -71,8 +71,8 @@ function profile_load(&$a, $nickname, $profile = 0, $profiledata = array()) {
$a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename']; $a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename'];
// if (!$profiledata) if (!$profiledata && !get_pconfig(local_user(),'system','always_my_theme'))
// $_SESSION['theme'] = $a->profile['theme']; $_SESSION['theme'] = $a->profile['theme'];
$_SESSION['mobile-theme'] = $a->profile['mobile-theme']; $_SESSION['mobile-theme'] = $a->profile['mobile-theme'];

View file

@ -24,7 +24,6 @@ function onepoll_run(&$argv, &$argc){
unset($db_host, $db_user, $db_pass, $db_data); unset($db_host, $db_user, $db_pass, $db_data);
}; };
require_once('include/session.php'); require_once('include/session.php');
require_once('include/datetime.php'); require_once('include/datetime.php');
require_once('include/items.php'); require_once('include/items.php');

View file

@ -82,7 +82,7 @@ function get_attachment_data($body) {
$data = array(); $data = array();
if (!preg_match("/(.*)\[attachment(.*)\](.*?)\[\/attachment\](.*)/ism", $body, $match)) if (!preg_match("/(.*)\[attachment(.*?)\](.*?)\[\/attachment\](.*)/ism", $body, $match))
return get_old_attachment_data($body); return get_old_attachment_data($body);
$attributes = $match[2]; $attributes = $match[2];

View file

@ -29,6 +29,10 @@ function poller_run(&$argv, &$argc){
unset($db_host, $db_user, $db_pass, $db_data); unset($db_host, $db_user, $db_pass, $db_data);
}; };
$a->start_process();
$mypid = getmypid();
if ($a->max_processes_reached()) if ($a->max_processes_reached())
return; return;
@ -81,15 +85,19 @@ function poller_run(&$argv, &$argc){
q("UPDATE `workerqueue` SET `executed` = '%s', `pid` = %d WHERE `id` = %d AND `executed` = '0000-00-00 00:00:00'", q("UPDATE `workerqueue` SET `executed` = '%s', `pid` = %d WHERE `id` = %d AND `executed` = '0000-00-00 00:00:00'",
dbesc(datetime_convert()), dbesc(datetime_convert()),
intval(getmypid()), intval($mypid),
intval($r[0]["id"])); intval($r[0]["id"]));
// Assure that there are no tasks executed twice // Assure that there are no tasks executed twice
$id = q("SELECT `id` FROM `workerqueue` WHERE `id` = %d AND `pid` = %d", $id = q("SELECT `pid`, `executed` FROM `workerqueue` WHERE `id` = %d", intval($r[0]["id"]));
intval($r[0]["id"]),
intval(getmypid()));
if (!$id) { if (!$id) {
logger("Queue item ".$r[0]["id"]." was executed multiple times - skip this execution", LOGGER_DEBUG); logger("Queue item ".$r[0]["id"]." vanished - skip this execution", LOGGER_DEBUG);
continue;
} elseif ((strtotime($id[0]["executed"]) <= 0) OR ($id[0]["pid"] == 0)) {
logger("Entry for queue item ".$r[0]["id"]." wasn't stored - we better stop here", LOGGER_DEBUG);
return;
} elseif ($id[0]["pid"] != $mypid) {
logger("Queue item ".$r[0]["id"]." is to be executed by process ".$id[0]["pid"]." and not by me (".$mypid.") - skip this execution", LOGGER_DEBUG);
continue; continue;
} }
@ -111,15 +119,15 @@ function poller_run(&$argv, &$argc){
$funcname = str_replace(".php", "", basename($argv[0]))."_run"; $funcname = str_replace(".php", "", basename($argv[0]))."_run";
if (function_exists($funcname)) { if (function_exists($funcname)) {
logger("Process ".getmypid()." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." ".$r[0]["parameter"]); logger("Process ".$mypid." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." ".$r[0]["parameter"]);
$funcname($argv, $argc); $funcname($argv, $argc);
if ($cooldown > 0) { if ($cooldown > 0) {
logger("Process ".getmypid()." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." - in cooldown for ".$cooldown." seconds"); logger("Process ".$mypid." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." - in cooldown for ".$cooldown." seconds");
sleep($cooldown); sleep($cooldown);
} }
logger("Process ".getmypid()." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." - done"); logger("Process ".$mypid." - Prio ".$r[0]["priority"]." - ID ".$r[0]["id"].": ".$funcname." - done");
q("DELETE FROM `workerqueue` WHERE `id` = %d", intval($r[0]["id"])); q("DELETE FROM `workerqueue` WHERE `id` = %d", intval($r[0]["id"]));
} else } else
@ -232,17 +240,20 @@ function poller_kill_stale_workers() {
// Kill long running processes // Kill long running processes
// Check if the priority is in a valid range // Check if the priority is in a valid range
if (!in_array($pid["priority"], array(PRIORITY_SYSTEM, PRIORITY_HIGH, PRIORITY_MEDIUM, PRIORITY_LOW))) if (!in_array($pid["priority"], array(PRIORITY_CRITICAL, PRIORITY_HIGH, PRIORITY_MEDIUM, PRIORITY_LOW, PRIORITY_NEGLIGIBLE)))
$pid["priority"] = PRIORITY_MEDIUM; $pid["priority"] = PRIORITY_MEDIUM;
// Define the maximum durations // Define the maximum durations
$max_duration_defaults = array(PRIORITY_SYSTEM => 360, PRIORITY_HIGH => 10, PRIORITY_MEDIUM => 60, PRIORITY_LOW => 180); $max_duration_defaults = array(PRIORITY_CRITICAL => 360, PRIORITY_HIGH => 10, PRIORITY_MEDIUM => 60, PRIORITY_LOW => 180, PRIORITY_NEGLIGIBLE => 360);
$max_duration = $max_duration_defaults[$pid["priority"]]; $max_duration = $max_duration_defaults[$pid["priority"]];
$argv = json_decode($pid["parameter"]);
$argv[0] = basename($argv[0]);
// How long is the process already running? // How long is the process already running?
$duration = (time() - strtotime($pid["executed"])) / 60; $duration = (time() - strtotime($pid["executed"])) / 60;
if ($duration > $max_duration) { if ($duration > $max_duration) {
logger("Worker process ".$pid["pid"]." (".$pid["parameter"].") took more than ".$max_duration." minutes. It will be killed now."); logger("Worker process ".$pid["pid"]." (".implode(" ", $argv).") took more than ".$max_duration." minutes. It will be killed now.");
posix_kill($pid["pid"], SIGTERM); posix_kill($pid["pid"], SIGTERM);
// We killed the stale process. // We killed the stale process.
@ -251,10 +262,10 @@ function poller_kill_stale_workers() {
q("UPDATE `workerqueue` SET `executed` = '0000-00-00 00:00:00', `created` = '%s', q("UPDATE `workerqueue` SET `executed` = '0000-00-00 00:00:00', `created` = '%s',
`priority` = %d, `pid` = 0 WHERE `pid` = %d", `priority` = %d, `pid` = 0 WHERE `pid` = %d",
dbesc(datetime_convert()), dbesc(datetime_convert()),
intval(PRIORITY_LOW), intval(PRIORITY_NEGLIGIBLE),
intval($pid["pid"])); intval($pid["pid"]));
} else } else
logger("Worker process ".$pid["pid"]." now runs for ".round($duration)." of ".$max_duration." allowed minutes. That's okay.", LOGGER_DEBUG); logger("Worker process ".$pid["pid"]." (".implode(" ", $argv).") now runs for ".round($duration)." of ".$max_duration." allowed minutes. That's okay.", LOGGER_DEBUG);
} }
} }
@ -291,12 +302,11 @@ function poller_too_much_workers() {
$s = q("SELECT `priority` FROM `workerqueue` WHERE `executed` = '0000-00-00 00:00:00' ORDER BY `priority` LIMIT 1"); $s = q("SELECT `priority` FROM `workerqueue` WHERE `executed` = '0000-00-00 00:00:00' ORDER BY `priority` LIMIT 1");
$top_priority = $s[0]["priority"]; $top_priority = $s[0]["priority"];
$s = q("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE `priority` <= %d AND `executed` != '0000-00-00 00:00:00'", $s = q("SELECT `id` FROM `workerqueue` WHERE `priority` <= %d AND `executed` != '0000-00-00 00:00:00' LIMIT 1",
intval($top_priority)); intval($top_priority));
$high_running = $s[0]["total"]; $high_running = dbm::is_result($s);
/// @todo define maximum number of fastlanes if (!$high_running AND ($top_priority > PRIORITY_UNDEFINED) AND ($top_priority < PRIORITY_NEGLIGIBLE)) {
if (($high_running == 0) AND ($top_priority != PRIORITY_UNDEFINED) AND ($top_priority < PRIORITY_LOW)) {
logger("There are jobs with priority ".$top_priority." waiting but none is executed. Open a fastlane.", LOGGER_DEBUG); logger("There are jobs with priority ".$top_priority." waiting but none is executed. Open a fastlane.", LOGGER_DEBUG);
$queues = $active + 1; $queues = $active + 1;
} }
@ -317,13 +327,16 @@ function poller_too_much_workers() {
} }
function poller_active_workers() { function poller_active_workers() {
$workers = q("SELECT COUNT(*) AS `workers` FROM `workerqueue` WHERE `executed` != '0000-00-00 00:00:00'"); $workers = q("SELECT COUNT(*) AS `processes` FROM `process` WHERE `command` = 'poller.php'");
return($workers[0]["workers"]); return($workers[0]["processes"]);
} }
if (array_search(__file__,get_included_files())===0){ if (array_search(__file__,get_included_files())===0){
poller_run($_SERVER["argv"],$_SERVER["argc"]); poller_run($_SERVER["argv"],$_SERVER["argc"]);
killme();
get_app()->end_process();
killme();
} }
?> ?>

View file

@ -159,7 +159,7 @@ function post_update_1198() {
logger("Start", LOGGER_DEBUG); logger("Start", LOGGER_DEBUG);
// Check if the first step is done (Setting "author-id" and "owner-id" in the item table) // Check if the first step is done (Setting "author-id" and "owner-id" in the item table)
$r = q("SELECT `author-link`, `owner-link`, `uid` FROM `item` WHERE `author-id` = 0 AND `owner-id` = 0 LIMIT 1000"); $r = q("SELECT `author-link`, `owner-link`, `uid` FROM `item` WHERE `author-id` = 0 AND `owner-id` = 0 LIMIT 100");
if (!$r) { if (!$r) {
// Are there unfinished entries in the thread table? // Are there unfinished entries in the thread table?
$r = q("SELECT COUNT(*) AS `total` FROM `thread` $r = q("SELECT COUNT(*) AS `total` FROM `thread`

View file

@ -17,7 +17,6 @@ function queue_run(&$argv, &$argc){
unset($db_host, $db_user, $db_pass, $db_data); unset($db_host, $db_user, $db_pass, $db_data);
}; };
require_once("include/session.php"); require_once("include/session.php");
require_once("include/datetime.php"); require_once("include/datetime.php");
require_once('include/items.php'); require_once('include/items.php');
@ -45,55 +44,57 @@ function queue_run(&$argv, &$argc){
$deadservers = array(); $deadservers = array();
$serverlist = array(); $serverlist = array();
logger('queue: start'); if (!$queue_id) {
// Handling the pubsubhubbub requests logger('queue: start');
proc_run(PRIORITY_HIGH,'include/pubsubpublish.php');
$interval = ((get_config('system','delivery_interval') === false) ? 2 : intval(get_config('system','delivery_interval'))); // Handling the pubsubhubbub requests
proc_run(PRIORITY_HIGH,'include/pubsubpublish.php');
// If we are using the worker we don't need a delivery interval $interval = ((get_config('system','delivery_interval') === false) ? 2 : intval(get_config('system','delivery_interval')));
if (get_config("system", "worker"))
$interval = false;
$r = q("select * from deliverq where 1"); // If we are using the worker we don't need a delivery interval
if($r) { if (get_config("system", "worker"))
foreach($r as $rr) { $interval = false;
logger('queue: deliverq');
proc_run(PRIORITY_HIGH,'include/delivery.php',$rr['cmd'],$rr['item'],$rr['contact']); $r = q("select * from deliverq where 1");
if($interval) if($r) {
foreach($r as $rr) {
logger('queue: deliverq');
proc_run(PRIORITY_HIGH,'include/delivery.php',$rr['cmd'],$rr['item'],$rr['contact']);
if($interval)
@time_sleep_until(microtime(true) + (float) $interval); @time_sleep_until(microtime(true) + (float) $interval);
}
} }
}
$r = q("SELECT `queue`.*, `contact`.`name`, `contact`.`uid` FROM `queue` $r = q("SELECT `queue`.*, `contact`.`name`, `contact`.`uid` FROM `queue`
INNER JOIN `contact` ON `queue`.`cid` = `contact`.`id` INNER JOIN `contact` ON `queue`.`cid` = `contact`.`id`
WHERE `queue`.`created` < UTC_TIMESTAMP() - INTERVAL 3 DAY"); WHERE `queue`.`created` < UTC_TIMESTAMP() - INTERVAL 3 DAY");
if($r) { if($r) {
foreach($r as $rr) { foreach($r as $rr) {
logger('Removing expired queue item for ' . $rr['name'] . ', uid=' . $rr['uid']); logger('Removing expired queue item for ' . $rr['name'] . ', uid=' . $rr['uid']);
logger('Expired queue data :' . $rr['content'], LOGGER_DATA); logger('Expired queue data :' . $rr['content'], LOGGER_DATA);
}
q("DELETE FROM `queue` WHERE `created` < UTC_TIMESTAMP() - INTERVAL 3 DAY");
} }
q("DELETE FROM `queue` WHERE `created` < UTC_TIMESTAMP() - INTERVAL 3 DAY");
}
if($queue_id) {
$r = q("SELECT `id` FROM `queue` WHERE `id` = %d LIMIT 1",
intval($queue_id)
);
}
else {
// For the first 12 hours we'll try to deliver every 15 minutes // For the first 12 hours we'll try to deliver every 15 minutes
// After that, we'll only attempt delivery once per hour. // After that, we'll only attempt delivery once per hour.
$r = q("SELECT `id` FROM `queue` WHERE ((`created` > UTC_TIMESTAMP() - INTERVAL 12 HOUR && `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE) OR (`last` < UTC_TIMESTAMP() - INTERVAL 1 HOUR)) ORDER BY `cid`, `created`"); $r = q("SELECT `id` FROM `queue` WHERE ((`created` > UTC_TIMESTAMP() - INTERVAL 12 HOUR && `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE) OR (`last` < UTC_TIMESTAMP() - INTERVAL 1 HOUR)) ORDER BY `cid`, `created`");
} else {
logger('queue: start for id '.$queue_id);
$r = q("SELECT `id` FROM `queue` WHERE `id` = %d LIMIT 1",
intval($queue_id)
);
} }
if(! $r){
if (!$r){
return; return;
} }
if(! $queue_id) if (!$queue_id)
call_hooks('queue_predeliver', $a, $r); call_hooks('queue_predeliver', $a, $r);
@ -107,16 +108,17 @@ function queue_run(&$argv, &$argc){
// queue_predeliver hooks may have changed the queue db details, // queue_predeliver hooks may have changed the queue db details,
// so check again if this entry still needs processing // so check again if this entry still needs processing
if($queue_id) { if($queue_id)
$qi = q("SELECT * FROM `queue` WHERE `id` = %d LIMIT 1", $qi = q("SELECT * FROM `queue` WHERE `id` = %d LIMIT 1",
intval($queue_id) intval($queue_id));
); elseif (get_config("system", "worker")) {
} logger('Call queue for id '.$q_item['id']);
else { proc_run(PRIORITY_LOW, "include/queue.php", $q_item['id']);
continue;
} else
$qi = q("SELECT * FROM `queue` WHERE `id` = %d AND `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ", $qi = q("SELECT * FROM `queue` WHERE `id` = %d AND `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ",
intval($q_item['id']) intval($q_item['id']));
);
}
if(! count($qi)) if(! count($qi))
continue; continue;

View file

@ -176,7 +176,7 @@ function delete_thread($itemid, $itemuri = "") {
intval($item["uid"]) intval($item["uid"])
); );
if (!count($r)) { if (!count($r)) {
$r = q("DELETE FROM `item` WHERE `uri` = '%s' AND `uid` = 0)", $r = q("DELETE FROM `item` WHERE `uri` = '%s' AND `uid` = 0",
dbesc($itemuri) dbesc($itemuri)
); );
logger("delete_thread: Deleted shadow for item ".$itemuri." - ".print_r($result, true), LOGGER_DEBUG); logger("delete_thread: Deleted shadow for item ".$itemuri." - ".print_r($result, true), LOGGER_DEBUG);

View file

@ -61,6 +61,18 @@ class xml {
continue; continue;
} }
$element_parts = explode(":", $key);
if ((count($element_parts) > 1) AND isset($namespaces[$element_parts[0]]))
$namespace = $namespaces[$element_parts[0]];
elseif (isset($namespaces[""])) {
$namespace = $namespaces[""];
} else
$namespace = NULL;
// Remove undefined namespaces from the key
if ((count($element_parts) > 1) AND is_null($namespace))
$key = $element_parts[1];
if (substr($key, 0, 11) == "@attributes") { if (substr($key, 0, 11) == "@attributes") {
if (!isset($element) OR !is_array($value)) if (!isset($element) OR !is_array($value))
continue; continue;
@ -78,14 +90,6 @@ class xml {
continue; continue;
} }
$element_parts = explode(":", $key);
if ((count($element_parts) > 1) AND isset($namespaces[$element_parts[0]]))
$namespace = $namespaces[$element_parts[0]];
elseif (isset($namespaces[""]))
$namespace = $namespaces[""];
else
$namespace = NULL;
if (!is_array($value)) if (!is_array($value))
$element = $xml->addChild($key, xmlify($value), $namespace); $element = $xml->addChild($key, xmlify($value), $namespace);
elseif (is_array($value)) { elseif (is_array($value)) {

View file

@ -489,7 +489,8 @@ if (isset($_GET["mode"]) AND ($_GET["mode"] == "raw")) {
echo substr($target->saveHTML(), 6, -8); echo substr($target->saveHTML(), 6, -8);
session_write_close(); if (!$a->is_backend())
session_write_close();
exit; exit;
} }
@ -514,5 +515,6 @@ if(!$template) {
require_once($template); require_once($template);
session_write_close(); if (!$a->is_backend())
session_write_close();
exit; exit;

View file

@ -304,25 +304,32 @@ function cal_content(&$a) {
// Test permissions // Test permissions
// Respect the export feature setting for all other /cal pages if it's not the own profile // Respect the export feature setting for all other /cal pages if it's not the own profile
if( ((local_user() !== $owner_uid)) && ! feature_enabled($owner_uid, "export_calendar")) { if( ((local_user() !== intval($owner_uid))) && ! feature_enabled($owner_uid, "export_calendar")) {
notice( t('Permission denied.') . EOL); notice( t('Permission denied.') . EOL);
return; goaway('cal/' . $nick);
} }
// Get the export data by uid // Get the export data by uid
$evexport = event_export($owner_uid, $format); $evexport = event_export($owner_uid, $format);
if ($evexport["success"] == false ) { if (!$evexport["success"]) {
if($evexport["content"]) if($evexport["content"])
notice( t('This calendar format is not supported') ); notice( t('This calendar format is not supported') );
else else
notice( t('No exportable data found')); notice( t('No exportable data found'));
return; // If it the own calendar return to the events page
// otherwise to the profile calendar page
if (local_user() === intval($owner_uid))
$return_path = "events";
else
$returnpath = "cal/".$nick;
goaway($return_path);
} }
// If nothing went wrong we can echo the export content // If nothing went wrong we can echo the export content
if ($evexport["success"] == true ) { if ($evexport["success"]) {
header('Content-type: text/calendar'); header('Content-type: text/calendar');
header('content-disposition: attachment; filename="' . t('calendar') . '-' . $nick . '.' . $evexport["extension"] . '"' ); header('content-disposition: attachment; filename="' . t('calendar') . '-' . $nick . '.' . $evexport["extension"] . '"' );
echo $evexport["content"]; echo $evexport["content"];

View file

@ -506,7 +506,8 @@ function events_content(&$a) {
'$acl' => $acl, '$acl' => $acl,
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$basic' => t("Basic"), '$basic' => t("Basic"),
'$advanced' => t("Advanced") '$advanced' => t("Advanced"),
'$permissions' => t('Permissions'),
)); ));

View file

@ -25,7 +25,6 @@ function hostxrd_init(&$a) {
'$zot_post' => z_root() . '/post', '$zot_post' => z_root() . '/post',
'$bigkey' => salmon_key(get_config('system','site_pubkey')), '$bigkey' => salmon_key(get_config('system','site_pubkey')),
)); ));
session_write_close();
exit(); exit();
} }

View file

@ -285,7 +285,7 @@ function notifications_content(&$a) {
'$item_label' => $it['label'], '$item_label' => $it['label'],
'$item_link' => $it['link'], '$item_link' => $it['link'],
'$item_image' => $it['image'], '$item_image' => $it['image'],
'$item_text' => $it['text'], '$item_text' => htmlentities($it['text']),
'$item_when' => $it['when'], '$item_when' => $it['when'],
'$item_seen' => $it['seen'], '$item_seen' => $it['seen'],
)); ));

View file

@ -4,22 +4,18 @@ require_once('include/bbcode.php');
require_once('include/ForumManager.php'); require_once('include/ForumManager.php');
require_once('include/group.php'); require_once('include/group.php');
require_once("mod/proxy.php"); require_once("mod/proxy.php");
require_once('include/xml.php');
function ping_init(&$a) { function ping_init(&$a) {
header("Content-type: text/xml"); $xmlhead = "<"."?xml version='1.0' encoding='UTF-8' ?".">";
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<result>";
$xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">";
if(local_user()){
if (local_user()){
// Different login session than the page that is calling us. // Different login session than the page that is calling us.
if (intval($_GET['uid']) && intval($_GET['uid']) != local_user()) {
if(intval($_GET['uid']) && intval($_GET['uid']) != local_user()) { $data = array("invalid" => 1);
echo '<invalid>1</invalid></result>'; header("Content-type: text/xml");
echo xml::from_array(array("result" => $data), $xml);
killme(); killme();
} }
@ -51,14 +47,14 @@ function ping_init(&$a) {
intval(local_user()), intval(local_user()) intval(local_user()), intval(local_user())
); );
if(dbm::is_result($r)) { if (dbm::is_result($r)) {
$arr = array('items' => $r); $arr = array('items' => $r);
call_hooks('network_ping', $arr); call_hooks('network_ping', $arr);
foreach ($r as $it) { foreach ($r as $it) {
if($it['wall']) if ($it['wall'])
$home ++; $home ++;
else else
$network ++; $network ++;
@ -84,20 +80,20 @@ function ping_init(&$a) {
if ($it['parent']!=$it['id']) { if ($it['parent']!=$it['id']) {
$comments[] = $it; $comments[] = $it;
} else { } else {
if(! $it['wall']) if (!$it['wall'])
$posts[] = $it; $posts[] = $it;
} }
} }
} }
} }
if($network) { if ($network) {
if(intval(feature_enabled(local_user(),'groups'))) { if (intval(feature_enabled(local_user(),'groups'))) {
// Find out how unseen network posts are spread across groups // Find out how unseen network posts are spread across groups
$groups_unseen = groups_count_unseen(); $groups_unseen = groups_count_unseen();
} }
if(intval(feature_enabled(local_user(),'forumlist_widget'))) { if (intval(feature_enabled(local_user(),'forumlist_widget'))) {
$forums_unseen = ForumManager::count_unseen_items(); $forums_unseen = ForumManager::count_unseen_items();
} }
} }
@ -128,7 +124,7 @@ function ping_init(&$a) {
if ($a->config['register_policy'] == REGISTER_APPROVE && is_site_admin()){ if ($a->config['register_policy'] == REGISTER_APPROVE && is_site_admin()){
$regs = q("SELECT `contact`.`name`, `contact`.`url`, `contact`.`micro`, `register`.`created`, COUNT(*) as `total` FROM `contact` RIGHT JOIN `register` ON `register`.`uid`=`contact`.`uid` WHERE `contact`.`self`=1"); $regs = q("SELECT `contact`.`name`, `contact`.`url`, `contact`.`micro`, `register`.`created`, COUNT(*) as `total` FROM `contact` RIGHT JOIN `register` ON `register`.`uid`=`contact`.`uid` WHERE `contact`.`self`=1");
if($regs) if ($regs)
$register = $regs[0]['total']; $register = $regs[0]['total'];
} else { } else {
$register = "0"; $register = "0";
@ -150,23 +146,23 @@ function ping_init(&$a) {
dbesc(datetime_convert('UTC','UTC','now')) dbesc(datetime_convert('UTC','UTC','now'))
); );
if(dbm::is_result($ev)) { if (dbm::is_result($ev)) {
$all_events = intval($ev[0]['total']); $all_events = intval($ev[0]['total']);
if($all_events) { if ($all_events) {
$str_now = datetime_convert('UTC',$a->timezone,'now','Y-m-d'); $str_now = datetime_convert('UTC',$a->timezone,'now','Y-m-d');
foreach($ev as $x) { foreach($ev as $x) {
$bd = false; $bd = false;
if($x['type'] === 'birthday') { if ($x['type'] === 'birthday') {
$birthdays ++; $birthdays ++;
$bd = true; $bd = true;
} }
else { else {
$events ++; $events ++;
} }
if(datetime_convert('UTC',((intval($x['adjust'])) ? $a->timezone : 'UTC'), $x['start'],'Y-m-d') === $str_now) { if (datetime_convert('UTC',((intval($x['adjust'])) ? $a->timezone : 'UTC'), $x['start'],'Y-m-d') === $str_now) {
$all_events_today ++; $all_events_today ++;
if($bd) if ($bd)
$birthdays_today ++; $birthdays_today ++;
else else
$events_today ++; $events_today ++;
@ -175,92 +171,58 @@ function ping_init(&$a) {
} }
} }
$data = array();
$data["intro"] = $intro;
$data["mail"] = $mail;
$data["net"] = $network;
$data["home"] = $home;
/** if ($register!=0)
* return xml from notification array $data["register"] = $register;
*
* @param array $n Notification array:
* 'href' => notification link
* 'name' => subject name
* 'url' => subject url
* 'photo' => subject photo
* 'date' => notification date
* 'seen' => bool true/false
* 'message' => notification message. "{0}" will be replaced by subject name
**/
function xmlize($n){
$contact = get_contact_details_by_url($n['url']); $groups = array();
if (isset($contact["micro"]))
$n['photo'] = proxy_url($contact["micro"], false, PROXY_SIZE_MICRO);
else
$n['photo'] = proxy_url($n['photo'], false, PROXY_SIZE_MICRO);
$n['message'] = html_entity_decode($n['message'], ENT_COMPAT | ENT_HTML401, "UTF-8"); if (dbm::is_result($groups_unseen)) {
$n['name'] = html_entity_decode($n['name'], ENT_COMPAT | ENT_HTML401, "UTF-8"); $count = 0;
// Are the nofications calles from the regular process or via the friendica app?
$regularnotifications = (intval($_GET['uid']) AND intval($_GET['_']));
$a = get_app();
if ($a->is_friendica_app() OR !$regularnotifications)
$n['message'] = str_replace("{0}", $n['name'], $n['message']);
$local_time = datetime_convert('UTC',date_default_timezone_get(),$n['date']);
call_hooks('ping_xmlize', $n);
$notsxml = '<note id="%d" href="%s" name="%s" url="%s" photo="%s" date="%s" seen="%s" timestamp="%s" >%s</note>'."\n";
return sprintf ( $notsxml, intval($n['id']),
xmlify($n['href']), xmlify(xmlify($n['name'])), xmlify($n['url']), xmlify($n['photo']),
xmlify(relative_date($n['date'])), xmlify($n['seen']), xmlify(strtotime($local_time)),
xmlify($n['message'])
);
}
echo "<intro>$intro</intro>
<mail>$mail</mail>
<net>$network</net>
<home>$home</home>\r\n";
if ($register!=0) echo "<register>$register</register>";
if ( dbm::is_result($groups_unseen) ) {
echo '<groups>';
foreach ($groups_unseen as $it) foreach ($groups_unseen as $it)
if ($it['count'] > 0) if ($it['count'] > 0) {
echo '<group id="'.$it['id'].'">'.$it['count']."</group>"; $count++;
$groups[$count.":group"] = $it['count'];
echo "</groups>"; $groups[$count.":@attributes"] = array("id" => $it['id']);
}
$data["groups"] = $groups;
} }
if ( dbm::is_result($forums_unseen) ) { $forums = array();
echo '<forums>';
if (dbm::is_result($forums_unseen)) {
$count = 0;
foreach ($forums_unseen as $it) foreach ($forums_unseen as $it)
if ($it['count'] > 0) if ($it['count'] > 0) {
echo '<forum id="'.$it['id'].'">'.$it['count']."</forum>"; $count++;
$forums[$count.":forum"] = $it['count'];
echo "</forums>"; $forums[$count.":@attributes"] = array("id" => $it['id']);
}
$data["forums"] = $forums;
} }
echo "<all-events>$all_events</all-events> $data["all-events"] = $all_events;
<all-events-today>$all_events_today</all-events-today> $data["all-events-today"] = $all_events_today;
<events>$events</events> $data["events"] = $events;
<events-today>$events_today</events-today> $data["events-today"] = $events_today;
<birthdays>$birthdays</birthdays> $data["birthdays"] = $birthdays;
<birthdays-today>$birthdays_today</birthdays-today>\r\n"; $data["birthdays-today"] = $birthdays_today;
if (dbm::is_result($notifs) && (! $sysnotify)) { if (dbm::is_result($notifs) && !$sysnotify) {
foreach ($notifs as $zz) { foreach ($notifs as $zz) {
if($zz['seen'] == 0) if ($zz['seen'] == 0)
$sysnotify ++; $sysnotify ++;
} }
} }
echo ' <notif count="'. ($sysnotify + $intro + $mail + $register) .'">';
// merge all notification types in one array // merge all notification types in one array
if ( dbm::is_result($intros) ) { if (dbm::is_result($intros)) {
foreach ($intros as $i) { foreach ($intros as $i) {
$n = array( $n = array(
'href' => $a->get_baseurl().'/notifications/intros/'.$i['id'], 'href' => $a->get_baseurl().'/notifications/intros/'.$i['id'],
@ -275,7 +237,7 @@ function ping_init(&$a) {
} }
} }
if ( dbm::is_result($mails) ) { if (dbm::is_result($mails)) {
foreach ($mails as $i) { foreach ($mails as $i) {
$n = array( $n = array(
'href' => $a->get_baseurl().'/message/'.$i['id'], 'href' => $a->get_baseurl().'/message/'.$i['id'],
@ -290,7 +252,7 @@ function ping_init(&$a) {
} }
} }
if ( dbm::is_result($regs) ) { if (dbm::is_result($regs)) {
foreach ($regs as $i) { foreach ($regs as $i) {
$n = array( $n = array(
'href' => $a->get_baseurl().'/admin/users/', 'href' => $a->get_baseurl().'/admin/users/',
@ -316,34 +278,69 @@ function ping_init(&$a) {
}; };
usort($notifs, $sort_function); usort($notifs, $sort_function);
if( dbm::is_result($notifs) ) { if (dbm::is_result($notifs)) {
// Are the nofications calles from the regular process or via the friendica app?
$regularnotifications = (intval($_GET['uid']) AND intval($_GET['_']));
$count = 0;
foreach($notifs as $n) { foreach($notifs as $n) {
echo xmlize($n); $count++;
if ($a->is_friendica_app() OR !$regularnotifications)
$n['message'] = str_replace("{0}", $n['name'], $n['message']);
$notifications[$count.":note"] = $n['message'];
$contact = get_contact_details_by_url($n['url']);
if (isset($contact["micro"]))
$n['photo'] = proxy_url($contact["micro"], false, PROXY_SIZE_MICRO);
else
$n['photo'] = proxy_url($n['photo'], false, PROXY_SIZE_MICRO);
$local_time = datetime_convert('UTC',date_default_timezone_get(),$n['date']);
call_hooks('ping_xmlize', $n);
$notifications[$count.":@attributes"] = array("id" => $n["id"],
"href" => $n['href'],
"name" => $n['name'],
"url" => $n['url'],
"photo" => $n['photo'],
"date" => relative_date($n['date']),
"seen" => $n['seen'],
"timestamp" => strtotime($local_time));
} }
} }
$data["notif"] = $notifications;
echo " </notif>"; $data["@attributes"] = array("count" => $sysnotify + $intro + $mail + $register);
} }
echo " <sysmsgs>";
if(x($_SESSION,'sysmsg')){ $sysmsg = array();
if (x($_SESSION,'sysmsg')){
$count = 0;
foreach ($_SESSION['sysmsg'] as $m){ foreach ($_SESSION['sysmsg'] as $m){
echo "<notice>".xmlify($m)."</notice>"; $count++;
$sysmsg[$count.":notice"] = $m;
} }
unset($_SESSION['sysmsg']); unset($_SESSION['sysmsg']);
} }
if(x($_SESSION,'sysmsg_info')){
if (x($_SESSION,'sysmsg_info')){
$count = 0;
foreach ($_SESSION['sysmsg_info'] as $m){ foreach ($_SESSION['sysmsg_info'] as $m){
echo "<info>".xmlify($m)."</info>"; $count++;
$sysmsg[$count.":info"] = $m;
} }
unset($_SESSION['sysmsg_info']); unset($_SESSION['sysmsg_info']);
} }
echo " </sysmsgs>"; $data["sysmsgs"] = $sysmsg;
echo"</result>
";
header("Content-type: text/xml");
echo xml::from_array(array("result" => $data), $xml);
killme(); killme();
} }

View file

@ -89,14 +89,14 @@ class Item extends BaseObject {
$a = $this->get_app(); $a = $this->get_app();
$item = $this->get_data(); $item = $this->get_data();
$edited = false; $edited = false;
if (strcmp($item['created'], $item['edited'])<>0) { if (strcmp($item['created'], $item['edited'])<>0) {
$edited = array( $edited = array(
'label' => t('This entry was edited'), 'label' => t('This entry was edited'),
'date' => datetime_convert('UTC', date_default_timezone_get(), $item['edited'], 'r'), 'date' => datetime_convert('UTC', date_default_timezone_get(), $item['edited'], 'r'),
'relative' => relative_date($item['edited']) 'relative' => relative_date($item['edited'])
); );
} }
$commentww = ''; $commentww = '';
$sparkle = ''; $sparkle = '';
$buttons = ''; $buttons = '';
@ -439,10 +439,10 @@ class Item extends BaseObject {
} }
} }
if ($this->is_toplevel()) { if ($this->is_toplevel()) {
$result['total_comments_num'] = "$total_children"; $result['total_comments_num'] = "$total_children";
$result['total_comments_text'] = tt('comment', 'comments', $total_children); $result['total_comments_text'] = tt('comment', 'comments', $total_children);
} }
$result['private'] = $item['private']; $result['private'] = $item['private'];
$result['toplevel'] = ($this->is_toplevel() ? 'toplevel_item' : ''); $result['toplevel'] = ($this->is_toplevel() ? 'toplevel_item' : '');

View file

@ -1,6 +1,6 @@
<?php <?php
define('UPDATE_VERSION' , 1200); define('UPDATE_VERSION' , 1202);
/** /**
* *

View file

@ -17,13 +17,16 @@ aweiher
axelt axelt
balderino balderino
Beanow Beanow
Beatriz Vital
Ben Roberts Ben Roberts
ben-utzer
bufalo1973 bufalo1973
Calango Jr Calango Jr
Carlos Solís Carlos Solís
Carsten Pfeiffer Carsten Pfeiffer
Cat Gray Cat Gray
Chris Case Chris Case
Christian González
Christian M. Grube Christian M. Grube
Christian Vogeley Christian Vogeley
Cohan Robinson Cohan Robinson
@ -72,6 +75,7 @@ Hubert Kościański
Jak Jak
Jakob Jakob
jensp jensp
Jeroen S
jeroenpraat jeroenpraat
Johannes Schwab Johannes Schwab
John Brazil John Brazil
@ -160,6 +164,7 @@ tomamplius
tomtom84 tomtom84
Tony Baldwin Tony Baldwin
TORminator TORminator
trebor
tschlotfeldt tschlotfeldt
Tubuntu Tubuntu
Tupambae.org Tupambae.org

View file

@ -23,7 +23,7 @@ import os, glob, subprocess
# not work in some cases. # not work in some cases.
dontinclude = ['root', 'friendica', 'bavatar', 'tony baldwin', 'Taek', 'silke m', dontinclude = ['root', 'friendica', 'bavatar', 'tony baldwin', 'Taek', 'silke m',
'leberwurscht', 'abinoam', 'fabrixxm', 'FULL NAME', 'Hauke Zuehl', 'leberwurscht', 'abinoam', 'fabrixxm', 'FULL NAME', 'Hauke Zuehl',
'Michal Supler', 'michal_s', 'Manuel Pérez'] 'Michal Supler', 'michal_s', 'Manuel Pérez', 'rabuzarus']
# this script is in the /util sub-directory of the friendica installation # this script is in the /util sub-directory of the friendica installation

File diff suppressed because it is too large Load diff

View file

@ -117,7 +117,6 @@ $a->strings["Full Name:\t%1\$s\\nSite Location:\t%2\$s\\nLogin Name:\t%3\$s (%4\
$a->strings["Please visit %s to approve or reject the request."] = "Bitte besuche %s um die Anfrage zu bearbeiten."; $a->strings["Please visit %s to approve or reject the request."] = "Bitte besuche %s um die Anfrage zu bearbeiten.";
$a->strings["Forums"] = "Foren"; $a->strings["Forums"] = "Foren";
$a->strings["External link to forum"] = "Externer Link zum Forum"; $a->strings["External link to forum"] = "Externer Link zum Forum";
$a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbankserver '%s' nicht ermitteln.";
$a->strings["l F d, Y \\@ g:i A"] = "l, d. F Y\\, H:i"; $a->strings["l F d, Y \\@ g:i A"] = "l, d. F Y\\, H:i";
$a->strings["Starts:"] = "Beginnt:"; $a->strings["Starts:"] = "Beginnt:";
$a->strings["Finishes:"] = "Endet:"; $a->strings["Finishes:"] = "Endet:";
@ -237,6 +236,7 @@ $a->strings["Image/photo"] = "Bild/Foto";
$a->strings["<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s"] = "<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s"; $a->strings["<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s"] = "<a href=\"%1\$s\" target=\"_blank\">%2\$s</a> %3\$s";
$a->strings["$1 wrote:"] = "$1 hat geschrieben:"; $a->strings["$1 wrote:"] = "$1 hat geschrieben:";
$a->strings["Encrypted content"] = "Verschlüsselter Inhalt"; $a->strings["Encrypted content"] = "Verschlüsselter Inhalt";
$a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbankserver '%s' nicht ermitteln.";
$a->strings["Logged out."] = "Abgemeldet."; $a->strings["Logged out."] = "Abgemeldet.";
$a->strings["Login failed."] = "Anmeldung fehlgeschlagen."; $a->strings["Login failed."] = "Anmeldung fehlgeschlagen.";
$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Beim Versuch Dich mit der von Dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass Du die OpenID richtig geschrieben hast."; $a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Beim Versuch Dich mit der von Dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass Du die OpenID richtig geschrieben hast.";
@ -700,6 +700,19 @@ $a->strings["%d contact not imported"] = array(
1 => "%d Kontakte nicht importiert", 1 => "%d Kontakte nicht importiert",
); );
$a->strings["Done. You can now login with your username and password"] = "Erledigt. Du kannst Dich jetzt mit Deinem Nutzernamen und Passwort anmelden"; $a->strings["Done. You can now login with your username and password"] = "Erledigt. Du kannst Dich jetzt mit Deinem Nutzernamen und Passwort anmelden";
$a->strings["System"] = "System";
$a->strings["Personal"] = "Persönlich";
$a->strings["%s commented on %s's post"] = "%s hat %ss Beitrag kommentiert";
$a->strings["%s created a new post"] = "%s hat einen neuen Beitrag erstellt";
$a->strings["%s liked %s's post"] = "%s mag %ss Beitrag";
$a->strings["%s disliked %s's post"] = "%s mag %ss Beitrag nicht";
$a->strings["%s is attending %s's event"] = "%s nimmt an %s's Event teil";
$a->strings["%s is not attending %s's event"] = "%s nimmt nicht an %s's Event teil";
$a->strings["%s may attend %s's event"] = "%s nimmt eventuell an %s's Event teil";
$a->strings["%s is now friends with %s"] = "%s ist jetzt mit %s befreundet";
$a->strings["Friend Suggestion"] = "Kontaktvorschlag";
$a->strings["Friend/Connect Request"] = "Kontakt-/Freundschaftsanfrage";
$a->strings["New Follower"] = "Neuer Bewunderer";
$a->strings["Post successful."] = "Beitrag erfolgreich veröffentlicht."; $a->strings["Post successful."] = "Beitrag erfolgreich veröffentlicht.";
$a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]"; $a->strings["[Embedded content - reload page to view]"] = "[Eingebetteter Inhalt - Seite neu laden zum Betrachten]";
$a->strings["Access denied."] = "Zugriff verweigert."; $a->strings["Access denied."] = "Zugriff verweigert.";
@ -844,79 +857,6 @@ $a->strings["No entries."] = "Keine Einträge.";
$a->strings["Credits"] = "Credits"; $a->strings["Credits"] = "Credits";
$a->strings["Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"] = "Friendica ist ein Gemeinschaftsprojekt, das nicht ohne die Hilfe vieler Personen möglich wäre. Hier ist eine Aufzählung der Personen, die zum Code oder der Übersetzung beigetragen haben. Dank an alle !"; $a->strings["Friendica is a community project, that would not be possible without the help of many people. Here is a list of those who have contributed to the code or the translation of Friendica. Thank you all!"] = "Friendica ist ein Gemeinschaftsprojekt, das nicht ohne die Hilfe vieler Personen möglich wäre. Hier ist eine Aufzählung der Personen, die zum Code oder der Übersetzung beigetragen haben. Dank an alle !";
$a->strings["- select -"] = "- auswählen -"; $a->strings["- select -"] = "- auswählen -";
$a->strings["Friendica Communications Server - Setup"] = "Friendica-Server für soziale Netzwerke Setup";
$a->strings["Could not connect to database."] = "Verbindung zur Datenbank gescheitert.";
$a->strings["Could not create table."] = "Tabelle konnte nicht angelegt werden.";
$a->strings["Your Friendica site database has been installed."] = "Die Datenbank Deiner Friendicaseite wurde installiert.";
$a->strings["You may need to import the file \"database.sql\" manually using phpmyadmin or mysql."] = "Möglicherweise musst Du die Datei \"database.sql\" manuell mit phpmyadmin oder mysql importieren.";
$a->strings["Please see the file \"INSTALL.txt\"."] = "Lies bitte die \"INSTALL.txt\".";
$a->strings["Database already in use."] = "Die Datenbank wird bereits verwendet.";
$a->strings["System check"] = "Systemtest";
$a->strings["Check again"] = "Noch einmal testen";
$a->strings["Database connection"] = "Datenbankverbindung";
$a->strings["In order to install Friendica we need to know how to connect to your database."] = "Um Friendica installieren zu können, müssen wir wissen, wie wir mit Deiner Datenbank Kontakt aufnehmen können.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite, falls Du Fragen zu diesen Einstellungen haben solltest.";
$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Die Datenbank, die Du unten angibst, sollte bereits existieren. Ist dies noch nicht der Fall, erzeuge sie bitte bevor Du mit der Installation fortfährst.";
$a->strings["Database Server Name"] = "Datenbank-Server";
$a->strings["Database Login Name"] = "Datenbank-Nutzer";
$a->strings["Database Login Password"] = "Datenbank-Passwort";
$a->strings["Database Name"] = "Datenbank-Name";
$a->strings["Site administrator email address"] = "E-Mail-Adresse des Administrators";
$a->strings["Your account email address must match this in order to use the web admin panel."] = "Die E-Mail-Adresse, die in Deinem Friendica-Account eingetragen ist, muss mit dieser Adresse übereinstimmen, damit Du das Admin-Panel benutzen kannst.";
$a->strings["Please select a default timezone for your website"] = "Bitte wähle die Standardzeitzone Deiner Webseite";
$a->strings["Site settings"] = "Server-Einstellungen";
$a->strings["System Language:"] = "Systemsprache:";
$a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Wähle die Standardsprache für deine Friendica-Installations-Oberfläche und den E-Mail-Versand";
$a->strings["Could not find a command line version of PHP in the web server PATH."] = "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden.";
$a->strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See <a href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-poller'>'Setup the poller'</a>"] = "Wenn Du keine Kommandozeilen-Version von PHP auf Deinem Server installiert hast, kannst Du keine Hintergrundprozesse via cron starten. Siehe <a href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-poller'>'Setup the poller'</a>";
$a->strings["PHP executable path"] = "Pfad zu PHP";
$a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Gib den kompletten Pfad zur ausführbaren Datei von PHP an. Du kannst dieses Feld auch frei lassen und mit der Installation fortfahren.";
$a->strings["Command line PHP"] = "Kommandozeilen-PHP";
$a->strings["PHP executable is not the php cli binary (could be cgi-fgci version)"] = "Die ausführbare Datei von PHP stimmt nicht mit der PHP cli Version überein (es könnte sich um die cgi-fgci Version handeln)";
$a->strings["Found PHP version: "] = "Gefundene PHP Version:";
$a->strings["PHP cli binary"] = "PHP CLI Binary";
$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Die Kommandozeilenversion von PHP auf Deinem System hat \"register_argc_argv\" nicht aktiviert.";
$a->strings["This is required for message delivery to work."] = "Dies wird für die Auslieferung von Nachrichten benötigt.";
$a->strings["PHP register_argc_argv"] = "PHP register_argc_argv";
$a->strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Fehler: Die Funktion \"openssl_pkey_new\" auf diesem System ist nicht in der Lage, Verschlüsselungsschlüssel zu erzeugen";
$a->strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Wenn der Server unter Windows läuft, schau Dir bitte \"http://www.php.net/manual/en/openssl.installation.php\" an.";
$a->strings["Generate encryption keys"] = "Schlüssel erzeugen";
$a->strings["libCurl PHP module"] = "PHP: libCurl-Modul";
$a->strings["GD graphics PHP module"] = "PHP: GD-Grafikmodul";
$a->strings["OpenSSL PHP module"] = "PHP: OpenSSL-Modul";
$a->strings["mysqli PHP module"] = "PHP: mysqli-Modul";
$a->strings["mb_string PHP module"] = "PHP: mb_string-Modul";
$a->strings["mcrypt PHP module"] = "PHP mcrypt Modul";
$a->strings["XML PHP module"] = "XML PHP Modul";
$a->strings["Apache mod_rewrite module"] = "Apache mod_rewrite module";
$a->strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Fehler: Das Apache-Modul mod-rewrite wird benötigt, es ist allerdings nicht installiert.";
$a->strings["Error: libCURL PHP module required but not installed."] = "Fehler: Das libCURL PHP Modul wird benötigt, ist aber nicht installiert.";
$a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Fehler: Das GD-Graphikmodul für PHP mit JPEG-Unterstützung ist nicht installiert.";
$a->strings["Error: openssl PHP module required but not installed."] = "Fehler: Das openssl-Modul von PHP ist nicht installiert.";
$a->strings["Error: mysqli PHP module required but not installed."] = "Fehler: Das mysqli-Modul von PHP ist nicht installiert.";
$a->strings["Error: mb_string PHP module required but not installed."] = "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert.";
$a->strings["Error: mcrypt PHP module required but not installed."] = "Fehler: Das mcrypt Modul von PHP ist nicht installiert";
$a->strings["If you are using php_cli, please make sure that mcrypt module is enabled in its config file"] = "Wenn du das Modul \"php_cli\" benutzt dann versichere dich, daß das mcrypt Modul in seiner Konfigurationsdatei aktiviert ist. ";
$a->strings["Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 encryption layer."] = "Die Funktion mcrypt_create_iv() ist nicht festgelegt. Dies ist notwendig um den RINO2-Encryption-Layer zu aktivieren.";
$a->strings["mcrypt_create_iv() function"] = "mcrypt_create_iv() function";
$a->strings["Error, XML PHP module required but not installed."] = "Fehler: XML PHP Modul erforderlich aber nicht installiert.";
$a->strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = "Der Installationswizard muss in der Lage sein, eine Datei im Stammverzeichnis Deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage, dies zu tun.";
$a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "In den meisten Fällen ist dies ein Problem mit den Schreibrechten. Der Webserver könnte keine Schreiberlaubnis haben, selbst wenn Du sie hast.";
$a->strings["At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Friendica top folder."] = "Nachdem Du alles ausgefüllt hast, erhältst Du einen Text, den Du in eine Datei namens .htconfig.php in Deinem Friendica-Wurzelverzeichnis kopieren musst.";
$a->strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Alternativ kannst Du diesen Schritt aber auch überspringen und die Installation manuell durchführen. Eine Anleitung dazu (Englisch) findest Du in der Datei INSTALL.txt.";
$a->strings[".htconfig.php is writable"] = "Schreibrechte auf .htconfig.php";
$a->strings["Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Friendica nutzt die Smarty3 Template Engine um die Webansichten zu rendern. Smarty3 kompiliert Templates zu PHP um das Rendern zu beschleunigen.";
$a->strings["In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder."] = "Um diese kompilierten Templates zu speichern benötigt der Webserver Schreibrechte zum Verzeichnis view/smarty3/ im obersten Ordner von Friendica.";
$a->strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "Bitte stelle sicher, dass der Nutzer unter dem der Webserver läuft (z.B. www-data) Schreibrechte zu diesem Verzeichnis hat.";
$a->strings["Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains."] = "Hinweis: aus Sicherheitsgründen solltest Du dem Webserver nur Schreibrechte für view/smarty3/ geben -- Nicht den Templatedateien (.tpl) die sie enthalten.";
$a->strings["view/smarty3 is writable"] = "view/smarty3 ist schreibbar";
$a->strings["Url rewrite in .htaccess is not working. Check your server configuration."] = "Umschreiben der URLs in der .htaccess funktioniert nicht. Überprüfe die Konfiguration des Servers.";
$a->strings["Url rewrite is working"] = "URL rewrite funktioniert";
$a->strings["ImageMagick PHP extension is installed"] = "ImageMagick PHP Erweiterung ist installiert";
$a->strings["ImageMagick supports GIF"] = "ImageMagick unterstützt GIF";
$a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text, um die Datei im Stammverzeichnis Deiner Friendica-Installation zu erzeugen.";
$a->strings["<h1>What next</h1>"] = "<h1>Wie geht es weiter?</h1>";
$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten.";
$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["Item not available."] = "Beitrag nicht verfügbar."; $a->strings["Item not available."] = "Beitrag nicht verfügbar.";
$a->strings["Item was not found."] = "Beitrag konnte nicht gefunden werden."; $a->strings["Item was not found."] = "Beitrag konnte nicht gefunden werden.";
@ -992,7 +932,6 @@ $a->strings["Commented Order"] = "Neueste Kommentare";
$a->strings["Sort by Comment Date"] = "Nach Kommentardatum sortieren"; $a->strings["Sort by Comment Date"] = "Nach Kommentardatum sortieren";
$a->strings["Posted Order"] = "Neueste Beiträge"; $a->strings["Posted Order"] = "Neueste Beiträge";
$a->strings["Sort by Post Date"] = "Nach Beitragsdatum sortieren"; $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["Posts that mention or involve you"] = "Beiträge, in denen es um Dich geht";
$a->strings["New"] = "Neue"; $a->strings["New"] = "Neue";
$a->strings["Activity Stream - by date"] = "Aktivitäten-Stream - nach Datum"; $a->strings["Activity Stream - by date"] = "Aktivitäten-Stream - nach Datum";
@ -1172,41 +1111,6 @@ $a->strings["I might attend"] = "Ich werde eventuell teilnehmen";
$a->strings["to"] = "zu"; $a->strings["to"] = "zu";
$a->strings["Wall-to-Wall"] = "Wall-to-Wall"; $a->strings["Wall-to-Wall"] = "Wall-to-Wall";
$a->strings["via Wall-To-Wall:"] = "via Wall-To-Wall:"; $a->strings["via Wall-To-Wall:"] = "via Wall-To-Wall:";
$a->strings["Invalid request identifier."] = "Invalid request identifier.";
$a->strings["Discard"] = "Verwerfen";
$a->strings["Ignore"] = "Ignorieren";
$a->strings["Show Ignored Requests"] = "Zeige ignorierte Anfragen";
$a->strings["Hide Ignored Requests"] = "Verberge ignorierte Anfragen";
$a->strings["Notification type: "] = "Benachrichtigungstyp: ";
$a->strings["Friend Suggestion"] = "Kontaktvorschlag";
$a->strings["suggested by %s"] = "vorgeschlagen von %s";
$a->strings["Hide this contact from others"] = "Verbirg diesen Kontakt vor andere";
$a->strings["Post a new friend activity"] = "Neue-Kontakt Nachricht senden";
$a->strings["if applicable"] = "falls anwendbar";
$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? \"Friend\" implies that you allow to read and you subscribe to their posts. \"Fan/Admirer\" means that you allow to read but you do not want to read theirs. Approve as: "] = "Soll Deine Beziehung beidseitig sein oder nicht? \"Kontakt\" bedeutet, ihr könnt gegenseitig die Beiträge des Anderen lesen dürft. \"Fan/Verehrer\", dass du das lesen deiner Beiträge erlaubst aber nicht die Beiträge der anderen Seite lesen möchtest. Genehmigen als:";
$a->strings["Shall your connection be bidirectional or not? \"Friend\" implies that you allow to read and you subscribe to their posts. \"Sharer\" means that you allow to read but you do not want to read theirs. Approve as: "] = "Soll Deine Beziehung beidseitig sein oder nicht? \"Freund\" bedeutet, ihr gegenseitig die Beiträge des Anderen lesen dürft. \"Teilenden\", das du das lesen deiner Beiträge erlaubst aber nicht die Beiträge der anderen Seite lesen möchtest. Genehmigen als:";
$a->strings["Friend"] = "Kontakt";
$a->strings["Sharer"] = "Teilenden";
$a->strings["Fan/Admirer"] = "Fan/Verehrer";
$a->strings["Friend/Connect Request"] = "Kontakt-/Freundschaftsanfrage";
$a->strings["New Follower"] = "Neuer Bewunderer";
$a->strings["No introductions."] = "Keine Kontaktanfragen.";
$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen";
$a->strings["%s liked %s's post"] = "%s mag %ss Beitrag";
$a->strings["%s disliked %s's post"] = "%s mag %ss Beitrag nicht";
$a->strings["%s is now friends with %s"] = "%s ist jetzt mit %s befreundet";
$a->strings["%s created a new post"] = "%s hat einen neuen Beitrag erstellt";
$a->strings["%s commented on %s's post"] = "%s hat %ss Beitrag kommentiert";
$a->strings["No more network notifications."] = "Keine weiteren Netzwerk-Benachrichtigungen.";
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
$a->strings["No more personal notifications."] = "Keine weiteren persönlichen Benachrichtigungen";
$a->strings["Home Notifications"] = "Pinnwand Benachrichtigungen";
$a->strings["No more home notifications."] = "Keine weiteren Pinnwand-Benachrichtigungen";
$a->strings["System"] = "System";
$a->strings["Theme settings updated."] = "Themeneinstellungen aktualisiert."; $a->strings["Theme settings updated."] = "Themeneinstellungen aktualisiert.";
$a->strings["Site"] = "Seite"; $a->strings["Site"] = "Seite";
$a->strings["Users"] = "Nutzer"; $a->strings["Users"] = "Nutzer";
@ -1465,6 +1369,7 @@ $a->strings["User registrations waiting for confirm"] = "Neuanmeldungen, die auf
$a->strings["User waiting for permanent deletion"] = "Nutzer wartet auf permanente Löschung"; $a->strings["User waiting for permanent deletion"] = "Nutzer wartet auf permanente Löschung";
$a->strings["Request date"] = "Anfragedatum"; $a->strings["Request date"] = "Anfragedatum";
$a->strings["No registrations."] = "Keine Neuanmeldungen."; $a->strings["No registrations."] = "Keine Neuanmeldungen.";
$a->strings["Approve"] = "Genehmigen";
$a->strings["Deny"] = "Verwehren"; $a->strings["Deny"] = "Verwehren";
$a->strings["Block"] = "Sperren"; $a->strings["Block"] = "Sperren";
$a->strings["Unblock"] = "Entsperren"; $a->strings["Unblock"] = "Entsperren";
@ -1546,9 +1451,11 @@ $a->strings["Last update:"] = "Letzte Aktualisierung: ";
$a->strings["Update public posts"] = "Öffentliche Beiträge aktualisieren"; $a->strings["Update public posts"] = "Öffentliche Beiträge aktualisieren";
$a->strings["Update now"] = "Jetzt aktualisieren"; $a->strings["Update now"] = "Jetzt aktualisieren";
$a->strings["Unignore"] = "Ignorieren aufheben"; $a->strings["Unignore"] = "Ignorieren aufheben";
$a->strings["Ignore"] = "Ignorieren";
$a->strings["Currently blocked"] = "Derzeit geblockt"; $a->strings["Currently blocked"] = "Derzeit geblockt";
$a->strings["Currently ignored"] = "Derzeit ignoriert"; $a->strings["Currently ignored"] = "Derzeit ignoriert";
$a->strings["Currently archived"] = "Momentan archiviert"; $a->strings["Currently archived"] = "Momentan archiviert";
$a->strings["Hide this contact from others"] = "Verbirg diesen Kontakt vor andere";
$a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein"; $a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein";
$a->strings["Notification for new posts"] = "Benachrichtigung bei neuen Beiträgen"; $a->strings["Notification for new posts"] = "Benachrichtigung bei neuen Beiträgen";
$a->strings["Send a notification of every new post of this contact"] = "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt."; $a->strings["Send a notification of every new post of this contact"] = "Sende eine Benachrichtigung, wann immer dieser Kontakt einen neuen Beitrag schreibt.";
@ -1629,52 +1536,6 @@ $a->strings["Please contact the sender by replying to this post if you do not wi
$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["Mood"] = "Stimmung"; $a->strings["Mood"] = "Stimmung";
$a->strings["Set your current mood and tell your friends"] = "Wähle Deine aktuelle Stimmung und erzähle sie Deinen Kontakten"; $a->strings["Set your current mood and tell your friends"] = "Wähle Deine aktuelle Stimmung und erzähle sie Deinen Kontakten";
$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["%1\$s was tagged in %2\$s by %3\$s"] = "%1\$s wurde von %3\$s in %2\$s getaggt";
$a->strings["a photo"] = "einem Foto";
$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["You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."] = "Du verwendest %1$.2f Mbyte von %2$.2f Mbyte des Foto-Speichers.";
$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["Private Photo"] = "Privates Foto";
$a->strings["Public Photo"] = "Öffentliches Foto";
$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["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["Private photo"] = "Privates Foto";
$a->strings["Public photo"] = "Öffentliches Foto";
$a->strings["Map"] = "Karte";
$a->strings["View Album"] = "Album betrachten";
$a->strings["Poke/Prod"] = "Anstupsen"; $a->strings["Poke/Prod"] = "Anstupsen";
$a->strings["poke, prod or do other things to somebody"] = "Stupse Leute an oder mache anderes mit ihnen"; $a->strings["poke, prod or do other things to somebody"] = "Stupse Leute an oder mache anderes mit ihnen";
$a->strings["Recipient"] = "Empfänger"; $a->strings["Recipient"] = "Empfänger";
@ -1786,6 +1647,7 @@ $a->strings["Import your profile to this friendica instance"] = "Importiere Dein
$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["everybody"] = "jeder";
$a->strings["Display"] = "Anzeige"; $a->strings["Display"] = "Anzeige";
$a->strings["Social Networks"] = "Soziale Netzwerke"; $a->strings["Social Networks"] = "Soziale Netzwerke";
$a->strings["Connected apps"] = "Verbundene Programme"; $a->strings["Connected apps"] = "Verbundene Programme";
@ -1917,6 +1779,8 @@ $a->strings["Maximum Friend Requests/Day:"] = "Maximale Anzahl vonKontaktanfrage
$a->strings["(to prevent spam abuse)"] = "(um SPAM zu vermeiden)"; $a->strings["(to prevent spam abuse)"] = "(um SPAM zu vermeiden)";
$a->strings["Default Post Permissions"] = "Standard-Zugriffsrechte für Beiträge"; $a->strings["Default Post Permissions"] = "Standard-Zugriffsrechte für Beiträge";
$a->strings["(click to open/close)"] = "(klicke zum öffnen/schließen)"; $a->strings["(click to open/close)"] = "(klicke zum öffnen/schließen)";
$a->strings["Show to Groups"] = "Zeige den Gruppen";
$a->strings["Show to Contacts"] = "Zeige den Kontakten";
$a->strings["Default Private Post"] = "Privater Standardbeitrag"; $a->strings["Default Private Post"] = "Privater Standardbeitrag";
$a->strings["Default Public Post"] = "Öffentlicher Standardbeitrag"; $a->strings["Default Public Post"] = "Öffentlicher Standardbeitrag";
$a->strings["Default Permissions for New Posts"] = "Standardberechtigungen für neue Beiträge"; $a->strings["Default Permissions for New Posts"] = "Standardberechtigungen für neue Beiträge";
@ -1947,8 +1811,149 @@ $a->strings["Resend relocate message to contacts"] = "Umzugsbenachrichtigung ern
$a->strings["Do you really want to delete this video?"] = "Möchtest Du dieses Video wirklich löschen?"; $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["Delete Video"] = "Video Löschen";
$a->strings["No videos selected"] = "Keine Videos ausgewählt"; $a->strings["No videos selected"] = "Keine Videos ausgewählt";
$a->strings["Access to this item is restricted."] = "Zugriff zu diesem Eintrag wurde eingeschränkt.";
$a->strings["View Album"] = "Album betrachten";
$a->strings["Recent Videos"] = "Neueste Videos"; $a->strings["Recent Videos"] = "Neueste Videos";
$a->strings["Upload New Videos"] = "Neues Video hochladen"; $a->strings["Upload New Videos"] = "Neues Video hochladen";
$a->strings["Friendica Communications Server - Setup"] = "Friendica-Server für soziale Netzwerke Setup";
$a->strings["Could not connect to database."] = "Verbindung zur Datenbank gescheitert.";
$a->strings["Could not create table."] = "Tabelle konnte nicht angelegt werden.";
$a->strings["Your Friendica site database has been installed."] = "Die Datenbank Deiner Friendicaseite wurde installiert.";
$a->strings["You may need to import the file \"database.sql\" manually using phpmyadmin or mysql."] = "Möglicherweise musst Du die Datei \"database.sql\" manuell mit phpmyadmin oder mysql importieren.";
$a->strings["Please see the file \"INSTALL.txt\"."] = "Lies bitte die \"INSTALL.txt\".";
$a->strings["Database already in use."] = "Die Datenbank wird bereits verwendet.";
$a->strings["System check"] = "Systemtest";
$a->strings["Check again"] = "Noch einmal testen";
$a->strings["Database connection"] = "Datenbankverbindung";
$a->strings["In order to install Friendica we need to know how to connect to your database."] = "Um Friendica installieren zu können, müssen wir wissen, wie wir mit Deiner Datenbank Kontakt aufnehmen können.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite, falls Du Fragen zu diesen Einstellungen haben solltest.";
$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Die Datenbank, die Du unten angibst, sollte bereits existieren. Ist dies noch nicht der Fall, erzeuge sie bitte bevor Du mit der Installation fortfährst.";
$a->strings["Database Server Name"] = "Datenbank-Server";
$a->strings["Database Login Name"] = "Datenbank-Nutzer";
$a->strings["Database Login Password"] = "Datenbank-Passwort";
$a->strings["Database Name"] = "Datenbank-Name";
$a->strings["Site administrator email address"] = "E-Mail-Adresse des Administrators";
$a->strings["Your account email address must match this in order to use the web admin panel."] = "Die E-Mail-Adresse, die in Deinem Friendica-Account eingetragen ist, muss mit dieser Adresse übereinstimmen, damit Du das Admin-Panel benutzen kannst.";
$a->strings["Please select a default timezone for your website"] = "Bitte wähle die Standardzeitzone Deiner Webseite";
$a->strings["Site settings"] = "Server-Einstellungen";
$a->strings["System Language:"] = "Systemsprache:";
$a->strings["Set the default language for your Friendica installation interface and to send emails."] = "Wähle die Standardsprache für deine Friendica-Installations-Oberfläche und den E-Mail-Versand";
$a->strings["Could not find a command line version of PHP in the web server PATH."] = "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden.";
$a->strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See <a href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-poller'>'Setup the poller'</a>"] = "Wenn Du keine Kommandozeilen-Version von PHP auf Deinem Server installiert hast, kannst Du keine Hintergrundprozesse via cron starten. Siehe <a href='https://github.com/friendica/friendica/blob/master/doc/Install.md#set-up-the-poller'>'Setup the poller'</a>";
$a->strings["PHP executable path"] = "Pfad zu PHP";
$a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Gib den kompletten Pfad zur ausführbaren Datei von PHP an. Du kannst dieses Feld auch frei lassen und mit der Installation fortfahren.";
$a->strings["Command line PHP"] = "Kommandozeilen-PHP";
$a->strings["PHP executable is not the php cli binary (could be cgi-fgci version)"] = "Die ausführbare Datei von PHP stimmt nicht mit der PHP cli Version überein (es könnte sich um die cgi-fgci Version handeln)";
$a->strings["Found PHP version: "] = "Gefundene PHP Version:";
$a->strings["PHP cli binary"] = "PHP CLI Binary";
$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Die Kommandozeilenversion von PHP auf Deinem System hat \"register_argc_argv\" nicht aktiviert.";
$a->strings["This is required for message delivery to work."] = "Dies wird für die Auslieferung von Nachrichten benötigt.";
$a->strings["PHP register_argc_argv"] = "PHP register_argc_argv";
$a->strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Fehler: Die Funktion \"openssl_pkey_new\" auf diesem System ist nicht in der Lage, Verschlüsselungsschlüssel zu erzeugen";
$a->strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Wenn der Server unter Windows läuft, schau Dir bitte \"http://www.php.net/manual/en/openssl.installation.php\" an.";
$a->strings["Generate encryption keys"] = "Schlüssel erzeugen";
$a->strings["libCurl PHP module"] = "PHP: libCurl-Modul";
$a->strings["GD graphics PHP module"] = "PHP: GD-Grafikmodul";
$a->strings["OpenSSL PHP module"] = "PHP: OpenSSL-Modul";
$a->strings["mysqli PHP module"] = "PHP: mysqli-Modul";
$a->strings["mb_string PHP module"] = "PHP: mb_string-Modul";
$a->strings["mcrypt PHP module"] = "PHP mcrypt Modul";
$a->strings["XML PHP module"] = "XML PHP Modul";
$a->strings["iconv module"] = "iconv module";
$a->strings["Apache mod_rewrite module"] = "Apache mod_rewrite module";
$a->strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Fehler: Das Apache-Modul mod-rewrite wird benötigt, es ist allerdings nicht installiert.";
$a->strings["Error: libCURL PHP module required but not installed."] = "Fehler: Das libCURL PHP Modul wird benötigt, ist aber nicht installiert.";
$a->strings["Error: GD graphics PHP module with JPEG support required but not installed."] = "Fehler: Das GD-Graphikmodul für PHP mit JPEG-Unterstützung ist nicht installiert.";
$a->strings["Error: openssl PHP module required but not installed."] = "Fehler: Das openssl-Modul von PHP ist nicht installiert.";
$a->strings["Error: mysqli PHP module required but not installed."] = "Fehler: Das mysqli-Modul von PHP ist nicht installiert.";
$a->strings["Error: mb_string PHP module required but not installed."] = "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert.";
$a->strings["Error: mcrypt PHP module required but not installed."] = "Fehler: Das mcrypt Modul von PHP ist nicht installiert";
$a->strings["Error: iconv PHP module required but not installed."] = "Fehler: Das iconv-Modul von PHP ist nicht installiert.";
$a->strings["If you are using php_cli, please make sure that mcrypt module is enabled in its config file"] = "Wenn du das Modul \"php_cli\" benutzt dann versichere dich, daß das mcrypt Modul in seiner Konfigurationsdatei aktiviert ist. ";
$a->strings["Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 encryption layer."] = "Die Funktion mcrypt_create_iv() ist nicht festgelegt. Dies ist notwendig um den RINO2-Encryption-Layer zu aktivieren.";
$a->strings["mcrypt_create_iv() function"] = "mcrypt_create_iv() function";
$a->strings["Error, XML PHP module required but not installed."] = "Fehler: XML PHP Modul erforderlich aber nicht installiert.";
$a->strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = "Der Installationswizard muss in der Lage sein, eine Datei im Stammverzeichnis Deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage, dies zu tun.";
$a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "In den meisten Fällen ist dies ein Problem mit den Schreibrechten. Der Webserver könnte keine Schreiberlaubnis haben, selbst wenn Du sie hast.";
$a->strings["At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Friendica top folder."] = "Nachdem Du alles ausgefüllt hast, erhältst Du einen Text, den Du in eine Datei namens .htconfig.php in Deinem Friendica-Wurzelverzeichnis kopieren musst.";
$a->strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Alternativ kannst Du diesen Schritt aber auch überspringen und die Installation manuell durchführen. Eine Anleitung dazu (Englisch) findest Du in der Datei INSTALL.txt.";
$a->strings[".htconfig.php is writable"] = "Schreibrechte auf .htconfig.php";
$a->strings["Friendica uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Friendica nutzt die Smarty3 Template Engine um die Webansichten zu rendern. Smarty3 kompiliert Templates zu PHP um das Rendern zu beschleunigen.";
$a->strings["In order to store these compiled templates, the web server needs to have write access to the directory view/smarty3/ under the Friendica top level folder."] = "Um diese kompilierten Templates zu speichern benötigt der Webserver Schreibrechte zum Verzeichnis view/smarty3/ im obersten Ordner von Friendica.";
$a->strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "Bitte stelle sicher, dass der Nutzer unter dem der Webserver läuft (z.B. www-data) Schreibrechte zu diesem Verzeichnis hat.";
$a->strings["Note: as a security measure, you should give the web server write access to view/smarty3/ only--not the template files (.tpl) that it contains."] = "Hinweis: aus Sicherheitsgründen solltest Du dem Webserver nur Schreibrechte für view/smarty3/ geben -- Nicht den Templatedateien (.tpl) die sie enthalten.";
$a->strings["view/smarty3 is writable"] = "view/smarty3 ist schreibbar";
$a->strings["Url rewrite in .htaccess is not working. Check your server configuration."] = "Umschreiben der URLs in der .htaccess funktioniert nicht. Überprüfe die Konfiguration des Servers.";
$a->strings["Url rewrite is working"] = "URL rewrite funktioniert";
$a->strings["ImageMagick PHP extension is installed"] = "ImageMagick PHP Erweiterung ist installiert";
$a->strings["ImageMagick supports GIF"] = "ImageMagick unterstützt GIF";
$a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text, um die Datei im Stammverzeichnis Deiner Friendica-Installation zu erzeugen.";
$a->strings["<h1>What next</h1>"] = "<h1>Wie geht es weiter?</h1>";
$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten.";
$a->strings["Invalid request identifier."] = "Invalid request identifier.";
$a->strings["Discard"] = "Verwerfen";
$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["Post a new friend activity"] = "Neue-Kontakt Nachricht senden";
$a->strings["if applicable"] = "falls anwendbar";
$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? \"Friend\" implies that you allow to read and you subscribe to their posts. \"Fan/Admirer\" means that you allow to read but you do not want to read theirs. Approve as: "] = "Soll Deine Beziehung beidseitig sein oder nicht? \"Kontakt\" bedeutet, ihr könnt gegenseitig die Beiträge des Anderen lesen dürft. \"Fan/Verehrer\", dass du das lesen deiner Beiträge erlaubst aber nicht die Beiträge der anderen Seite lesen möchtest. Genehmigen als:";
$a->strings["Shall your connection be bidirectional or not? \"Friend\" implies that you allow to read and you subscribe to their posts. \"Sharer\" means that you allow to read but you do not want to read theirs. Approve as: "] = "Soll Deine Beziehung beidseitig sein oder nicht? \"Freund\" bedeutet, ihr gegenseitig die Beiträge des Anderen lesen dürft. \"Teilenden\", das du das lesen deiner Beiträge erlaubst aber nicht die Beiträge der anderen Seite lesen möchtest. Genehmigen als:";
$a->strings["Friend"] = "Kontakt";
$a->strings["Sharer"] = "Teilenden";
$a->strings["Fan/Admirer"] = "Fan/Verehrer";
$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["Recent Photos"] = "Neueste Fotos";
$a->strings["Upload New Photos"] = "Neue Fotos hochladen";
$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["%1\$s was tagged in %2\$s by %3\$s"] = "%1\$s wurde von %3\$s in %2\$s getaggt";
$a->strings["a photo"] = "einem Foto";
$a->strings["Image file is empty."] = "Bilddatei ist leer.";
$a->strings["No photos selected"] = "Keine Bilder ausgewählt";
$a->strings["You have used %1$.2f Mbytes of %2$.2f Mbytes photo storage."] = "Du verwendest %1$.2f Mbyte von %2$.2f Mbyte des Foto-Speichers.";
$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["Private Photo"] = "Privates Foto";
$a->strings["Public Photo"] = "Öffentliches Foto";
$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["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["Private photo"] = "Privates Foto";
$a->strings["Public photo"] = "Öffentliches Foto";
$a->strings["Map"] = "Karte";
$a->strings["via"] = "via"; $a->strings["via"] = "via";
$a->strings["Repeat the image"] = "Bild wiederholen"; $a->strings["Repeat the image"] = "Bild wiederholen";
$a->strings["Will repeat your image to fill the background."] = "Wiederholt das Bild um den Hintergrund auszufüllen."; $a->strings["Will repeat your image to fill the background."] = "Wiederholt das Bild um den Hintergrund auszufüllen.";
@ -1958,8 +1963,6 @@ $a->strings["Resize fill and-clip"] = "Größe anpassen - Ausfüllen und abschne
$a->strings["Resize to fill and retain aspect ratio."] = "Größe anpassen: Ausfüllen und Seitenverhältnis beibehalten"; $a->strings["Resize to fill and retain aspect ratio."] = "Größe anpassen: Ausfüllen und Seitenverhältnis beibehalten";
$a->strings["Resize best fit"] = "Größe anpassen - Optimale Größe"; $a->strings["Resize best fit"] = "Größe anpassen - Optimale Größe";
$a->strings["Resize to best fit and retain aspect ratio."] = "Größe anpassen - Optimale Größe und Seitenverhältnisse beibehalten"; $a->strings["Resize to best fit and retain aspect ratio."] = "Größe anpassen - Optimale Größe und Seitenverhältnisse beibehalten";
$a->strings["Remote"] = "Entferne";
$a->strings["Visitor"] = "Besucher";
$a->strings["Default"] = "Standard"; $a->strings["Default"] = "Standard";
$a->strings["Note: "] = "Hinweis:"; $a->strings["Note: "] = "Hinweis:";
$a->strings["Check image permissions if all users are allowed to visit the image"] = "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen"; $a->strings["Check image permissions if all users are allowed to visit the image"] = "Überprüfe, dass alle Benutzer die Berechtigung haben dieses Bild anzusehen";
@ -1970,6 +1973,8 @@ $a->strings["Link color"] = "Linkfarbe";
$a->strings["Set the background color"] = "Hintergrundfarbe festlegen"; $a->strings["Set the background color"] = "Hintergrundfarbe festlegen";
$a->strings["Content background transparency"] = "Transparanz des Hintergrunds von Beiträgem"; $a->strings["Content background transparency"] = "Transparanz des Hintergrunds von Beiträgem";
$a->strings["Set the background image"] = "Hintergrundbild festlegen"; $a->strings["Set the background image"] = "Hintergrundbild festlegen";
$a->strings["Guest"] = "Gast";
$a->strings["Visitor"] = "Besucher";
$a->strings["Set resize level for images in posts and comments (width and height)"] = "Wähle das Vergrößerungsmaß für Bilder in Beiträgen und Kommentaren (Höhe und Breite)"; $a->strings["Set resize level for images in posts and comments (width and height)"] = "Wähle das Vergrößerungsmaß für Bilder in Beiträgen und Kommentaren (Höhe und Breite)";
$a->strings["Set font-size for posts and comments"] = "Schriftgröße für Beiträge und Kommentare festlegen"; $a->strings["Set font-size for posts and comments"] = "Schriftgröße für Beiträge und Kommentare festlegen";
$a->strings["Set theme width"] = "Theme Breite festlegen"; $a->strings["Set theme width"] = "Theme Breite festlegen";

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -22,7 +22,7 @@
<li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li> <li role="menuitem"><a href="{{$contact_actions.delete.url}}" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li>
</ul> </ul>
</div> </div>

View file

@ -15,6 +15,11 @@ $db_user = '{{$dbuser}}';
$db_pass = '{{$dbpass}}'; $db_pass = '{{$dbpass}}';
$db_data = '{{$dbdata}}'; $db_data = '{{$dbdata}}';
// Set the database connection charset to UTF8.
// Changing this value will likely corrupt the special characters.
// You have been warned.
$a->config['system']['db_charset'] = "utf8mb4";
// email adress for the system admin // email adress for the system admin
$a->config['admin_email'] = '{{$adminmail}}'; $a->config['admin_email'] = '{{$adminmail}}';

View file

@ -0,0 +1,21 @@
/*
@fiel view/theme/frio/css/font-awesome.custom.css
@brief This file applies Font Awesome icons to some friendica standard classes
*/
.icon:before {
font-family: FontAwesome;
font-weight: normal;
font-style: normal;
display: inline-block;
text-decoration: inherit;
vertical-align: top;
font-size: 1.4em;
}
/* media icons */
.icon.type-image:before { content: "\f1c5"; }
.icon.type-video:before { content: "\f1c8"; }
.icon.type-audio:before { content: "\f1c7"; }
.icon.type-text:before { content: "\f0f6"; }
.icon.type-application:before { content: "\f016"; }
.icon.type-unkn:before { content: "\f016"; }

View file

@ -1404,6 +1404,15 @@ section #jotOpen {
.wall-item-body > a > img { .wall-item-body > a > img {
border-radius: 3px; border-radius: 3px;
} }
.wall-item-body .body-attach > a {
color: #555;
display: inline-block;
}
.wall-item-body .body-attach > a div {
color: #555;
width: 20px;
}
.shared-wrapper, .shared-wrapper,
.vevent { .vevent {
margin-left: 50px; margin-left: 50px;
@ -1486,7 +1495,8 @@ blockquote.shared_content {
/* wall item hover effects */ /* wall item hover effects */
.wall-item-container .wall-item-links, .wall-item-container .wall-item-links,
.wall-item-container .wall-item-actions { .wall-item-container .wall-item-actions,
.wall-item-container .body-attach > a {
opacity: 0.3; opacity: 0.3;
-webkit-transition: all 0.25s ease-in-out; -webkit-transition: all 0.25s ease-in-out;
-moz-transition: all 0.25s ease-in-out; -moz-transition: all 0.25s ease-in-out;
@ -1495,7 +1505,8 @@ blockquote.shared_content {
transition: all 0.25s ease-in-out; transition: all 0.25s ease-in-out;
} }
.wall-item-container:hover .wall-item-links, .wall-item-container:hover .wall-item-links,
.wall-item-container:hover .wall-item-actions { .wall-item-container:hover .wall-item-actions,
.wall-item-container:hover .body-attach > a {
opacity: 0.6; opacity: 0.6;
-webkit-transition: all 0.25s ease-in-out; -webkit-transition: all 0.25s ease-in-out;
-moz-transition: all 0.25s ease-in-out; -moz-transition: all 0.25s ease-in-out;
@ -1503,6 +1514,9 @@ blockquote.shared_content {
-ms-transition: all 0.25s ease-in-out; -ms-transition: all 0.25s ease-in-out;
transition: all 0.25s ease-in-out; transition: all 0.25s ease-in-out;
} }
.wall-item-container .wall-item-body .body-attach > a:hover {
opacity: 1;
}
/* /*
/* Comments /* Comments

View file

@ -0,0 +1,11 @@
/**
* @brief Javascript for the display module
*/
// Catch the GUID from the URL
var itemGuid = window.location.pathname.split("/").pop();
$(window).load(function(){
// Scroll to the Item by its GUID
scrollToItem('item-'+itemGuid);
});

View file

@ -189,11 +189,19 @@ function confirmDelete() { return confirm(aStr.delitem); }
function dropItem(url, object) { function dropItem(url, object) {
var confirm = confirmDelete(); var confirm = confirmDelete();
//if the first character of the object is #, remove it because
// we use getElementById which don't need the #
// getElementByID selects elements even if there are special characters
// in the ID (like %) which won't work with jQuery
/// @todo ceck if we can solve this in the template
object = object.indexOf('#') == 0 ? object.substring(1) : object;
if(confirm) { if(confirm) {
$('body').css('cursor', 'wait'); $('body').css('cursor', 'wait');
$(object).fadeTo('fast', 0.33, function () { $(document.getElementById(object)).fadeTo('fast', 0.33, function () {
$.get(url).done(function() { $.get(url).done(function() {
$(object).remove(); $(document.getElementById(object)).remove();
$('body').css('cursor', 'auto'); $('body').css('cursor', 'auto');
}); });
}); });

View file

@ -542,3 +542,31 @@ String.prototype.rtrim = function() {
var trimmed = this.replace(/\s+$/g, ''); var trimmed = this.replace(/\s+$/g, '');
return trimmed; return trimmed;
}; };
// Scroll to a specific item and highlight it
// Note: jquery.color.js is needed
function scrollToItem(itemID) {
if( typeof itemID === "undefined")
return;
var elm = $('#'+itemID);
// Test if the Item exists
if(!elm.length)
return;
// Define the colors which are used for highlighting
var colWhite = {backgroundColor:'#F5F5F5'};
var colShiny = {backgroundColor:'#FFF176'};
// Get the Item Position (we need to substract 100 to match
// correct position
var itemPos = $(elm).offset().top - 100;
// Scroll to the DIV with the ID (GUID)
$('html, body').animate({
scrollTop: itemPos
}, 400, function() {
// Highlight post/commenent with ID (GUID)
$(elm).animate(colWhite, 1000).animate(colShiny).animate(colWhite, 600);
});
}

View file

@ -25,7 +25,7 @@
<li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.delete.title}}" onclick="addToModal('{{$contact_actions.delete.url}}?confirm=1'); return false;">{{$contact_actions.delete.label}}</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>

View file

@ -9,7 +9,7 @@
the modal. Changing of the activity status is done by js in event_head.tpl *}} the modal. Changing of the activity status is done by js in event_head.tpl *}}
<li class="active" role="menuitem"><a id="event-edit-lnk" onclick="eventEditActive(); return false;">{{$basic}}</a></li> <li class="active" role="menuitem"><a id="event-edit-lnk" onclick="eventEditActive(); return false;">{{$basic}}</a></li>
<li role="menuitem"><a id="event-desc-lnk" onclick="eventDescActive(); return false;">{{$advanced}}</a></li> <li role="menuitem"><a id="event-desc-lnk" onclick="eventDescActive(); return false;">{{$advanced}}</a></li>
{{if $acl}}<li role="menuitem" {{if !$sh_checked}} style="display: none"{{/if}}><a id="event-perms-lnk" onclick="eventAclActive();return false;">Permissions</a></li>{{/if}} {{if $acl}}<li role="menuitem" {{if !$sh_checked}} style="display: none"{{/if}}><a id="event-perms-lnk" onclick="eventAclActive();return false;">{{$permissions}}</a></li>{{/if}}
{{if $preview}}<li role="menuitem"><a id="event-preview-lnk" onclick="eventPreviewActive();return false;">{{$preview}}</a></li>{{/if}} {{if $preview}}<li role="menuitem"><a id="event-preview-lnk" onclick="eventPreviewActive();return false;">{{$preview}}</a></li>{{/if}}
{{* commented out because it isn't implemented yet {{* commented out because it isn't implemented yet
<li role="menuitem"><a id="event-preview-link" onclick="fbrowserActive(); return false;"> Browser </a></li> <li role="menuitem"><a id="event-preview-link" onclick="fbrowserActive(); return false;"> Browser </a></li>

View file

@ -30,6 +30,7 @@
{{* own css files *}} {{* own css files *}}
<link rel="stylesheet" href="view/theme/frio/css/hovercard.css" type="text/css" media="screen"/> <link rel="stylesheet" href="view/theme/frio/css/hovercard.css" type="text/css" media="screen"/>
<link rel="stylesheet" href="view/theme/frio/css/font-awesome.custom.css" type="text/css" media="screen"/>
<!-- <!--
<link rel="shortcut icon" href="images/friendica-32.png" /> <link rel="shortcut icon" href="images/friendica-32.png" />

View file

@ -1,4 +1,5 @@
<script type="text/javascript" src="view/theme/frio/frameworks/jquery-color/jquery.color.js"></script> <script type="text/javascript" src="view/theme/frio/frameworks/jquery-color/jquery.color.js"></script>
{{if $mode == display}}<script type="text/javascript" src="view/theme/frio/js/mod_display.js"></script>{{/if}}
{{$live_update}} {{$live_update}}
@ -23,17 +24,3 @@
</a> </a>
<img id="item-delete-selected-rotator" class="like-rotator" src="images/rotator.gif" style="display: none;" /> <img id="item-delete-selected-rotator" class="like-rotator" src="images/rotator.gif" style="display: none;" />
{{/if}} {{/if}}
<script>
var colWhite = {backgroundColor:'#F5F5F5'};
var colShiny = {backgroundColor:'#FFF176'};
</script>
{{if $mode == display}}
<script>
var id = window.location.pathname.split("/").pop();
$(window).scrollTop($('#item-'+id).position().top);
$('#item-'+id).animate(colWhite, 1000).animate(colShiny).animate(colWhite, 2000);
</script>
{{/if}}

View file

@ -27,7 +27,7 @@
<li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li> <li role="menuitem"><a href="{{$contact_actions.delete.url}}" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li>
</ul> </ul>
</div> </div>

View file

@ -21,7 +21,7 @@
<li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li> <li role="menuitem"><a href="{{$contact_actions.delete.url}}" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li>
</ul> </ul>
</div> </div>

View file

@ -22,7 +22,7 @@
<li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.archive.title}}" onclick="window.location.href='{{$contact_actions.archive.url}}'; return false;">{{$contact_actions.archive.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li> <li role="menuitem"><a href="{{$contact_actions.delete.url}}" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li>
</ul> </ul>
</div> </div>