Merge remote-tracking branch 'upstream/develop' into 1705-dbclean-advanced

This commit is contained in:
Michael 2017-06-06 17:30:40 +00:00
commit de9cddc82f
41 changed files with 19169 additions and 7944 deletions

148
CHANGELOG
View File

@ -1,10 +1,64 @@
Version 3.5.2 (2017-06-06)
Friendica Core:
Updates to the translations (DE, EN-GB, EN-US, ES, IT, PT-BR, RU) [translation teams]
Updates to the documentation [annando, beardyunixer, rabuzarus, tobiasd]
Updated the nginx example configuration [beardyunixer]
Code revision and refactoring [annando, hypolite, Quix0r, rebeka-catalina]
Background process is now done by the new worker process [annando]
Added support of Composer for dependencies [Hypolite]
Added support of Web app manifests [Rudloff]
Added basic robot.txt functionality if none exists [Shnoulle]
Added server blocklist [Hypolite, tobiasd]
Removed mcrypt dependency [annando]
Removed unused libraries [annando]
Removed Embedly integration [Hypolite]
Fixed a bug in the language detection for EN [Hypolite]
Fixed a bug in the probing mechanism on old PHP version [annando]
Improved API [annando, gerhard6380]
Improved Diaspora federation [annando]
Improved Mastodon federation [annando, Hypolite]
Improved import from OStatus threads [annando]
Improved the themes (frio, quattro) [fabrixxm, Hypolite, rabuzarus, Rudloff, strk, tobiasd]
Improved maintenance mode [annando]
Improved gcontact handling [annando]
Improved desktop notifications [rabuzarus]
Improved keyboard shortcuts for navigation [Rudloff]
Improved the installer [annando]
Improved openid handling [strk]
Improved php7 support [annando]
Improved display of notifications [annando]
Improved logging mechanism [beardyunixer]
Improved the worker [annando]
Behaviour clarification of the group filter / new tab [annando]
Old options for the pager and share element were removed [annando]
Support of PDO was added [annando]
Improved error logging for issues with the database [annando]
Improved compatibility to MySQL version 5.7+ [annando]
Friendica Addons:
Updates to the translation (RU) [pztrm]
(core) Fix blocking issue for Communityhome [annando]
Pledgie addon was updated to remove cert problems [tobiasd]
Securemail now uses openpgp-php and phpseclib [fabrixxm]
Superblock Configuration [tobiasd]
Twitter Connector updated to use with new deletion method [annando]
Closed Issues:
1626, 1720, 2432, 2792, 2833, 2364, 2448, 2496, 2690, 2752, 2775,
2803, 2956, 2957, 2961, 2971, 2995, 2999, 3011, 3053, 3107, 3114,
3134, 3138, 3142, 3157, 3172, 3189, 3194, 3195, 3198, 3206, 3215,
3217, 3220, 3237, 3242, 3255, 3256, 3260, 3268, 3273, 3274, 3285,
3288, 3292, 3293, 3300, 3314, 3316, 3317, 3322, 3325, 3327, 3328,
3331, 3334, 3336, 3346, 3347, 3358, 3359, 3383, 3387, 3401, 3406,
3428, 3440, 3435, 3436, 3452
Version 3.5.1 (2017-03-12) Version 3.5.1 (2017-03-12)
Friendica Core: Friendica Core:
Updates to the translations (BG, CA, CS, DE, EO, ES, FR, IS, IT, NL, PL, PT-BR, RU, SV) [translation teams] Updates to the translations (BG, CA, CS, DE, EO, ES, FR, IS, IT, NL, PL, PT-BR, RU, SV) [translation teams]
Fix for a potential XSS vector [heluecht, thanks to Vít Šesták 'v6ak' for reporting the problem] Fix for a potential XSS vector [annando, thanks to Vít Šesták 'v6ak' for reporting the problem]
Fix for ghost request notifications on single user instances [Hypolite] Fix for ghost request notifications on single user instances [Hypolite]
Fix user language selection [tobiasd] Fix user language selection [tobiasd]
Fix a problem with communication to Diaspora with set posting locations [heluecht] Fix a problem with communication to Diaspora with set posting locations [annando]
Fix schema handling of direct links to a original posting [Rabuzarus] Fix schema handling of direct links to a original posting [Rabuzarus]
Fix a bug in notification handling [Rabuzarus] Fix a bug in notification handling [Rabuzarus]
Adjustments for the Vagrant VM settings [silke, eelcomaljaars] Adjustments for the Vagrant VM settings [silke, eelcomaljaars]
@ -12,22 +66,22 @@ Version 3.5.1 (2017-03-12)
Improvements to the API and Friendica specific extensions [gerhard6380] Improvements to the API and Friendica specific extensions [gerhard6380]
Improvements to the Browser Notification functionality [Hypolite] Improvements to the Browser Notification functionality [Hypolite]
Improvements to the themes [Hypolite, rabuzarus, rebeka-catalina, tobiasd] Improvements to the themes [Hypolite, rabuzarus, rebeka-catalina, tobiasd]
Improvements to the database handling [heluecht] Improvements to the database handling [annando]
Improvements to the admin panel [tobiasd, Hypolite] Improvements to the admin panel [tobiasd, Hypolite]
Improvements to the update process [heluecht] Improvements to the update process [annando]
Improvements to the handling of worker processes [heluecht] Improvements to the handling of worker processes [annando]
Improvements to the performance [heluecht, Hypolite] Improvements to the performance [annando, Hypolite]
Improvements to the documentation [Hypolite, tobiasd, rabuzarus, beardyunixer, eelcomaljaars] Improvements to the documentation [Hypolite, tobiasd, rabuzarus, beardyunixer, eelcomaljaars]
Improvements to the BBCode / Markdown conversation [Hypolite] Improvements to the BBCode / Markdown conversation [Hypolite]
Improvements to the OStatus protocol implementation [heluecht] Improvements to the OStatus protocol implementation [annando]
Improvements to the installation wizzard [tobiasd] Improvements to the installation wizzard [tobiasd]
Improvements to the Diaspora connectivity [heluecht, Hypolite] Improvements to the Diaspora connectivity [annando, Hypolite]
Work on PHP7 compatibility [ddorian1] Work on PHP7 compatibility [ddorian1]
Code cleanup [Hypolite, Quix0r] Code cleanup [Hypolite, Quix0r]
Initial federation with Mastodon [heluecht] Initial federation with Mastodon [annando]
The worker process can now also be started from the frontend [heluecht] The worker process can now also be started from the frontend [annando]
Deletion of postings is now done in the background [heluecht] Deletion of postings is now done in the background [annando]
Extension of the DFRN transmitted information fields [heluecht] Extension of the DFRN transmitted information fields [annando]
Translations of the core are now in /view/lang [Hypolite, tobiasd] Translations of the core are now in /view/lang [Hypolite, tobiasd]
Update of the fullCalendar library to 3.0.1 and adjusting the themes [rabuzarus] Update of the fullCalendar library to 3.0.1 and adjusting the themes [rabuzarus]
ping now works with JSON as well [Hypolite] ping now works with JSON as well [Hypolite]
@ -46,16 +100,16 @@ Version 3.5.1 (2017-03-12)
Updates to the translations (DE, ES, FR, IT, PT-BR) [translation teams] Updates to the translations (DE, ES, FR, IT, PT-BR) [translation teams]
Improvements to the IFTTT addon [Hypolite] Improvements to the IFTTT addon [Hypolite]
Improvements to the language filter addon [strk] Improvements to the language filter addon [strk]
Improvements to the pump.io bridge [heluecht] Improvements to the pump.io bridge [annando]
Improvements to the jappixmini addon [heluecht] Improvements to the jappixmini addon [annando]
Improvements to the gpluspost addon [heluecht] Improvements to the gpluspost addon [annando]
Improvements to the performance of the Twitter bridge when using workers [heluecht] Improvements to the performance of the Twitter bridge when using workers [annando]
Diaspora Export addon is now working again [heluecht] Diaspora Export addon is now working again [annando]
Pledgie badge now uses https protocol for embedding [tobiasd] Pledgie badge now uses https protocol for embedding [tobiasd]
Better posting loop prevention for the Google+/Twitter/GS connectors [heluecht] Better posting loop prevention for the Google+/Twitter/GS connectors [annando]
One can now configure the message for wppost bridged blog postings [tobiasd] One can now configure the message for wppost bridged blog postings [tobiasd]
On some pages the result of the Rendertime is not shown anymore [heluecht] On some pages the result of the Rendertime is not shown anymore [annando]
Twitter-bridge now supports quotes and long posts when importing tweets [heluecht] Twitter-bridge now supports quotes and long posts when importing tweets [annando]
Closed Issues Closed Issues
1019, 1163, 1612, 1613, 2103, 2177, 2252, 2260, 2403, 2991, 2614, 1019, 1163, 1612, 1613, 2103, 2177, 2252, 2260, 2403, 2991, 2614,
@ -67,48 +121,48 @@ Version 3.5.1 (2017-03-12)
Version 3.5 (2016-09-13) Version 3.5 (2016-09-13)
Friendica Core: Friendica Core:
NEW Optional local directory with possible federated contacts [heluecht] NEW Optional local directory with possible federated contacts [annando]
NEW Autocompletion for @-mentions and BBCode tags [rabuzarus] NEW Autocompletion for @-mentions and BBCode tags [rabuzarus]
NEW Added a composer derived autoloader which allows composer autoloaders in addons/libraries [fabrixxm] NEW Added a composer derived autoloader which allows composer autoloaders in addons/libraries [fabrixxm]
NEW theme: frio [rabuzarus, heluecht, fabrixxm] NEW theme: frio [rabuzarus, annando, fabrixxm]
Enhance .htaccess file (nerdoc, dissolve) Enhance .htaccess file (nerdoc, dissolve)
Updates to the translations (DE, ES, IS, IT, RU) [translation teams] 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] Updates to the documentation [tobiasd, annando, 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] Extended the BBCode by [abstract] tag used for bridged postings to networks with limited character length [annando]
Code cleanup [heluecht, QuixOr] Code cleanup [annando, QuixOr]
Improvements to the API and Friendica specific extensions [heluecht, fabrixxm, gerhard6380] Improvements to the API and Friendica specific extensions [annando, fabrixxm, gerhard6380]
Improvements to the RSS/Atom feed import [mexcon] Improvements to the RSS/Atom feed import [mexcon]
Improvements to the communication with federated networks (Diaspora, Hubzilla, OStatus) [heluecht] Improvements to the communication with federated networks (Diaspora, Hubzilla, OStatus) [annando]
Improvements on the themes (quattro, vier, frost) [rabuzarus, fabrixxm, stieben, heluecht, Quix0r, tobiasd] Improvements on the themes (quattro, vier, frost) [rabuzarus, fabrixxm, stieben, annando, Quix0r, tobiasd]
Improvements to the ACL dialog [fabrixxm, rabuzarus] Improvements to the ACL dialog [fabrixxm, rabuzarus]
Improvements to the database structure and optimization of queries [heluecht] Improvements to the database structure and optimization of queries [annando]
Improvements to the UI (contacts, hotkeys, remember me, ARIA, code hightlighting) [rabuzarus, heluecht, tobiasd] Improvements to the UI (contacts, hotkeys, remember me, ARIA, code hightlighting) [rabuzarus, annando, tobiasd]
Improvements to the background process (poller, worker) [heluecht] Improvements to the background process (poller, worker) [annando]
Improvements to the admin panel [tobiasd, heluecht, fabrixxm] Improvements to the admin panel [tobiasd, annando, fabrixxm]
Improvements to the performance [heluecht] Improvements to the performance [annando]
Improvements to the installation wizzard (language selection, RINO version, check required PHP modules, default theme is now vier) [tobiasd] 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 relocation of nodes and accounts [annando]
Improvements to the DDoS detection [heluecht] Improvements to the DDoS detection [annando]
Improvements to the calendar/events module [heluecht, rabuzarus] Improvements to the calendar/events module [annando, rabuzarus]
Improvements to OpenID login [strk] Improvements to OpenID login [strk]
Improvements to the ShaShape font [andi] Improvements to the ShaShape font [andi]
Reworked the implementation of the DFRN, Diaspora protocols [heluecht] Reworked the implementation of the DFRN, Diaspora protocols [annando]
Reworked the notifications code [fabrixxm, rabuzarus, heluecht] Reworked the notifications code [fabrixxm, rabuzarus, annando]
Reworked the p/config code [fabrixxm, rabuzarus] Reworked the p/config code [fabrixxm, rabuzarus]
Reworked XML generation [heluecht] Reworked XML generation [annando]
Removed now unused simplepie from library [heluecht] Removed now unused simplepie from library [annando]
Friendica Addons Friendica Addons
Updated to the translations (DE, ES, IS, NL, PT BR), [translation teams] Updated to the translations (DE, ES, IS, NL, PT BR), [translation teams]
Piwik [tobiasd] Piwik [tobiasd]
Twitter Connector [heluecht] Twitter Connector [annando]
Pumpio Connector [heluecht] Pumpio Connector [annando]
Rendertime [heluecht] Rendertime [annando]
wppost [heluecht] wppost [annando]
showmore [rabuzarus] showmore [rabuzarus]
fromgplus [heluecht] fromgplus [annando]
app.net Connector [heluecht] app.net Connector [annando]
GNU Social Connector [heluecht] GNU Social Connector [annando]
LDAP [Olivier Mehani] LDAP [Olivier Mehani]
smileybutton [rabuzarus] smileybutton [rabuzarus]
retriver [mexon] retriver [mexon]

View File

@ -1 +1 @@
3.5.2-rc 3.5.3dev

View File

@ -38,9 +38,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.2-rc' ); define ( 'FRIENDICA_VERSION', '3.5.3dev' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1225 ); define ( 'DB_UPDATE_VERSION', 1227 );
/** /**
* @brief Constant with a HTML line break. * @brief Constant with a HTML line break.
@ -457,6 +457,13 @@ if (!defined("SIGTERM")) {
define("SIGTERM", 15); define("SIGTERM", 15);
} }
/**
* Depending on the PHP version this constant does exist - or not.
* See here: http://php.net/manual/en/curl.constants.php#117928
*/
if (!defined('CURLE_OPERATION_TIMEDOUT')) {
define('CURLE_OPERATION_TIMEDOUT', CURLE_OPERATION_TIMEOUTED);
}
/** /**
* *
* Reverse the effect of magic_quotes_gpc if it is enabled. * Reverse the effect of magic_quotes_gpc if it is enabled.
@ -1375,7 +1382,7 @@ function get_server() {
$server = get_config("system", "directory"); $server = get_config("system", "directory");
if ($server == "") { if ($server == "") {
$server = "http://dir.friendi.ca"; $server = "http://dir.friendica.social";
} }
return($server); return($server);

View File

@ -1,6 +1,6 @@
-- ------------------------------------------ -- ------------------------------------------
-- Friendica 3.5.2-dev (Asparagus) -- Friendica 3.5.2-rc (Asparagus)
-- DB_UPDATE_VERSION 1221 -- DB_UPDATE_VERSION 1227
-- ------------------------------------------ -- ------------------------------------------
@ -193,7 +193,7 @@ 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(255) NOT NULL DEFAULT '',
`recips` text, `recips` text,
`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 '',
@ -270,7 +270,7 @@ CREATE TABLE IF NOT EXISTS `fcontact` (
`updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `addr` (`addr`(32)), INDEX `addr` (`addr`(32)),
INDEX `url` (`url`) UNIQUE INDEX `url` (`url`(190))
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
-- --
@ -355,7 +355,7 @@ CREATE TABLE IF NOT EXISTS `gcontact` (
`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 '',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `nurl` (`nurl`(64)), UNIQUE INDEX `nurl` (`nurl`(190)),
INDEX `name` (`name`(64)), INDEX `name` (`name`(64)),
INDEX `nick` (`nick`(32)), INDEX `nick` (`nick`(32)),
INDEX `addr` (`addr`(64)), INDEX `addr` (`addr`(64)),
@ -425,7 +425,7 @@ CREATE TABLE IF NOT EXISTS `gserver` (
`last_contact` datetime DEFAULT '0001-01-01 00:00:00', `last_contact` datetime DEFAULT '0001-01-01 00:00:00',
`last_failure` datetime DEFAULT '0001-01-01 00:00:00', `last_failure` datetime DEFAULT '0001-01-01 00:00:00',
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `nurl` (`nurl`(32)) UNIQUE INDEX `nurl` (`nurl`(190))
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
-- --
@ -544,6 +544,7 @@ CREATE TABLE IF NOT EXISTS `item` (
INDEX `uid_parenturi` (`uid`,`parent-uri`(190)), INDEX `uid_parenturi` (`uid`,`parent-uri`(190)),
INDEX `uid_contactid_created` (`uid`,`contact-id`,`created`), INDEX `uid_contactid_created` (`uid`,`contact-id`,`created`),
INDEX `authorid_created` (`author-id`,`created`), INDEX `authorid_created` (`author-id`,`created`),
INDEX `ownerid` (`owner-id`),
INDEX `uid_uri` (`uid`,`uri`(190)), INDEX `uid_uri` (`uid`,`uri`(190)),
INDEX `resource-id` (`resource-id`), INDEX `resource-id` (`resource-id`),
INDEX `contactid_allowcid_allowpid_denycid_denygid` (`contact-id`,`allow_cid`(10),`allow_gid`(10),`deny_cid`(10),`deny_gid`(10)), INDEX `contactid_allowcid_allowpid_denycid_denygid` (`contact-id`,`allow_cid`(10),`allow_gid`(10),`deny_cid`(10),`deny_gid`(10)),
@ -589,7 +590,7 @@ CREATE TABLE IF NOT EXISTS `locks` (
CREATE TABLE IF NOT EXISTS `mail` ( CREATE TABLE IF NOT EXISTS `mail` (
`id` int(10) unsigned NOT NULL auto_increment, `id` int(10) unsigned NOT NULL auto_increment,
`uid` int(10) unsigned NOT NULL DEFAULT 0, `uid` int(10) unsigned NOT NULL DEFAULT 0,
`guid` varchar(64) NOT NULL DEFAULT '', `guid` varchar(255) NOT NULL DEFAULT '',
`from-name` varchar(255) NOT NULL DEFAULT '', `from-name` varchar(255) NOT NULL DEFAULT '',
`from-photo` varchar(255) NOT NULL DEFAULT '', `from-photo` varchar(255) NOT NULL DEFAULT '',
`from-url` varchar(255) NOT NULL DEFAULT '', `from-url` varchar(255) NOT NULL DEFAULT '',
@ -608,7 +609,8 @@ CREATE TABLE IF NOT EXISTS `mail` (
INDEX `uid_seen` (`uid`,`seen`), INDEX `uid_seen` (`uid`,`seen`),
INDEX `convid` (`convid`), INDEX `convid` (`convid`),
INDEX `uri` (`uri`(64)), INDEX `uri` (`uri`(64)),
INDEX `parent-uri` (`parent-uri`(64)) INDEX `parent-uri` (`parent-uri`(64)),
INDEX `contactid` (`contact-id`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;
-- --
@ -746,6 +748,7 @@ CREATE TABLE IF NOT EXISTS `photo` (
`deny_cid` mediumtext, `deny_cid` mediumtext,
`deny_gid` mediumtext, `deny_gid` mediumtext,
PRIMARY KEY(`id`), PRIMARY KEY(`id`),
INDEX `contactid` (`contact-id`),
INDEX `uid_contactid` (`uid`,`contact-id`), INDEX `uid_contactid` (`uid`,`contact-id`),
INDEX `uid_profile` (`uid`,`profile`), INDEX `uid_profile` (`uid`,`profile`),
INDEX `uid_album_scale_created` (`uid`,`album`(32),`scale`,`created`), INDEX `uid_album_scale_created` (`uid`,`album`(32),`scale`,`created`),
@ -1019,6 +1022,9 @@ CREATE TABLE IF NOT EXISTS `thread` (
INDEX `uid_network_created` (`uid`,`network`,`created`), INDEX `uid_network_created` (`uid`,`network`,`created`),
INDEX `uid_contactid_commented` (`uid`,`contact-id`,`commented`), INDEX `uid_contactid_commented` (`uid`,`contact-id`,`commented`),
INDEX `uid_contactid_created` (`uid`,`contact-id`,`created`), INDEX `uid_contactid_created` (`uid`,`contact-id`,`created`),
INDEX `contactid` (`contact-id`),
INDEX `ownerid` (`owner-id`),
INDEX `authorid` (`author-id`),
INDEX `uid_created` (`uid`,`created`), INDEX `uid_created` (`uid`,`created`),
INDEX `uid_commented` (`uid`,`commented`), INDEX `uid_commented` (`uid`,`commented`),
INDEX `uid_wall_created` (`uid`,`wall`,`created`) INDEX `uid_wall_created` (`uid`,`wall`,`created`)
@ -1108,6 +1114,8 @@ CREATE TABLE IF NOT EXISTS `workerqueue` (
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
`pid` int(11) NOT NULL DEFAULT 0, `pid` int(11) NOT NULL DEFAULT 0,
`executed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `executed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
PRIMARY KEY(`id`) PRIMARY KEY(`id`),
INDEX `pid` (`pid`),
INDEX `priority_created` (`priority`,`created`)
) DEFAULT COLLATE utf8mb4_general_ci; ) DEFAULT COLLATE utf8mb4_general_ci;

View File

@ -14,7 +14,7 @@ Especially don't do that with undocumented values.
The header of the section describes the category, the value is the parameter. The header of the section describes the category, the value is the parameter.
Example: To set the directory value please add this line to your .htconfig.php: Example: To set the directory value please add this line to your .htconfig.php:
$a->config['system']['directory'] = 'http://dir.friendi.ca'; $a->config['system']['directory'] = 'http://dir.friendica.social';
## jabber ## ## jabber ##
* **debug** (Boolean) - Enable debug level for the jabber account synchronisation. * **debug** (Boolean) - Enable debug level for the jabber account synchronisation.
@ -39,7 +39,7 @@ Example: To set the directory value please add this line to your .htconfig.php:
* **default_service_class** - * **default_service_class** -
* **delivery_batch_count** - Number of deliveries per process. Default value is 1. (Disabled when using the worker) * **delivery_batch_count** - Number of deliveries per process. Default value is 1. (Disabled when using the worker)
* **diaspora_test** (Boolean) - For development only. Disables the message transfer. * **diaspora_test** (Boolean) - For development only. Disables the message transfer.
* **directory** - The path to global directory. If not set then "http://dir.friendi.ca" is used. * **directory** - The path to global directory. If not set then "http://dir.friendica.social" is used.
* **disable_email_validation** (Boolean) - Disables the check if a mail address is in a valid format and can be resolved via DNS. * **disable_email_validation** (Boolean) - Disables the check if a mail address is in a valid format and can be resolved via DNS.
* **disable_url_validation** (Boolean) - Disables the DNS lookup of an URL. * **disable_url_validation** (Boolean) - Disables the DNS lookup of an URL.
* **dlogfile - location of the developer log file * **dlogfile - location of the developer log file

View File

@ -4,10 +4,12 @@
* @brief Methods for read and write notifications from/to database * @brief Methods for read and write notifications from/to database
* or for formatting notifications * or for formatting notifications
*/ */
require_once 'include/html2plain.php'; require_once 'include/html2plain.php';
require_once 'include/probe.php'; require_once 'include/probe.php';
require_once 'include/datetime.php'; require_once 'include/datetime.php';
require_once 'include/bbcode.php'; require_once 'include/bbcode.php';
require_once 'include/Contact.php';
/** /**
* @brief Methods for read and write notifications from/to database * @brief Methods for read and write notifications from/to database
@ -720,10 +722,12 @@ class NotificationsManager {
$sql_extra = " AND `ignore` = 0 "; $sql_extra = " AND `ignore` = 0 ";
/// @todo Fetch contact details by "get_contact_details_by_url" instead of queries to contact, fcontact and gcontact /// @todo Fetch contact details by "get_contact_details_by_url" instead of queries to contact, fcontact and gcontact
$r = q("SELECT `intro`.`id` AS `intro_id`, `intro`.*, `contact`.*, `fcontact`.`name` AS `fname`,`fcontact`.`url` AS `furl`,`fcontact`.`photo` AS `fphoto`,`fcontact`.`request` AS `frequest`, $r = q("SELECT `intro`.`id` AS `intro_id`, `intro`.*, `contact`.*,
`fcontact`.`name` AS `fname`, `fcontact`.`url` AS `furl`,
`fcontact`.`photo` AS `fphoto`, `fcontact`.`request` AS `frequest`,
`gcontact`.`location` AS `glocation`, `gcontact`.`about` AS `gabout`, `gcontact`.`location` AS `glocation`, `gcontact`.`about` AS `gabout`,
`gcontact`.`keywords` AS `gkeywords`, `gcontact`.`gender` AS `ggender`, `gcontact`.`keywords` AS `gkeywords`, `gcontact`.`gender` AS `ggender`,
`gcontact`.`network` AS `gnetwork` `gcontact`.`network` AS `gnetwork`, `gcontact`.`addr` AS `gaddr`
FROM `intro` FROM `intro`
LEFT JOIN `contact` ON `contact`.`id` = `intro`.`contact-id` LEFT JOIN `contact` ON `contact`.`id` = `intro`.`contact-id`
LEFT JOIN `gcontact` ON `gcontact`.`nurl` = `contact`.`nurl` LEFT JOIN `gcontact` ON `gcontact`.`nurl` = `contact`.`nurl`
@ -786,11 +790,7 @@ class NotificationsManager {
// Normal connection requests // Normal connection requests
} else { } else {
// Probe the contact url to get missing data $it = $this->getMissingIntroData($it);
$ret = probe_url($it["url"]);
if ($it['gnetwork'] == "")
$it['gnetwork'] = $ret["network"];
// Don't show these data until you are connected. Diaspora is doing the same. // Don't show these data until you are connected. Diaspora is doing the same.
if($it['gnetwork'] === NETWORK_DIASPORA) { if($it['gnetwork'] === NETWORK_DIASPORA) {
@ -815,7 +815,7 @@ class NotificationsManager {
'post_newfriend' => (intval(get_pconfig(local_user(),'system','post_newfriend')) ? '1' : 0), 'post_newfriend' => (intval(get_pconfig(local_user(),'system','post_newfriend')) ? '1' : 0),
'url' => $it['url'], 'url' => $it['url'],
'zrl' => zrl($it['url']), 'zrl' => zrl($it['url']),
'addr' => $ret['addr'], 'addr' => $it['gaddr'],
'network' => $it['gnetwork'], 'network' => $it['gnetwork'],
'knowyou' => $it['knowyou'], 'knowyou' => $it['knowyou'],
'note' => $it['note'], 'note' => $it['note'],
@ -827,4 +827,38 @@ class NotificationsManager {
return $arr; return $arr;
} }
/**
* @brief Check for missing contact data and try to fetch the data from
* from other sources
*
* @param array $arr The input array with the intro data
*
* @return array The array with the intro data
*/
private function getMissingIntroData($arr) {
// If the network and the addr isn't available from the gcontact
// table entry, take the one of the contact table entry
if ($arr['gnetwork'] == "") {
$arr['gnetwork'] = $arr['network'];
}
if ($arr['gaddr'] == "") {
$arr['gaddr'] = $arr['addr'];
}
// If the network and addr is still not available
// get the missing data data from other sources
if ($arr['gnetwork'] == "" || $arr['gaddr'] == "") {
$ret = get_contact_details_by_url($arr['url']);
if ($arr['gnetwork'] == "" && $ret['network'] != "") {
$arr['gnetwork'] = $ret['network'];
}
if ($arr['gaddr'] == "" && $ret['addr'] != "") {
$arr['gaddr'] = $ret['addr'];
}
}
return $arr;
}
} }

View File

@ -2289,6 +2289,11 @@ $called_api = null;
$statushtml = "<h4>" . bbcode($item['title']) . "</h4>\n" . $statushtml; $statushtml = "<h4>" . bbcode($item['title']) . "</h4>\n" . $statushtml;
} }
// feeds without body should contain the link
if (($item['network'] == NETWORK_FEED) && (strlen($item['body']) == 0)) {
$statushtml .= bbcode($item['plink']);
}
$entities = api_get_entitities($statustext, $body); $entities = api_get_entitities($statustext, $body);
return array( return array(

View File

@ -49,12 +49,14 @@ class dba {
function __construct($server,$user,$pass,$db,$install = false) { function __construct($server,$user,$pass,$db,$install = false) {
$a = get_app(); $a = get_app();
# work around, to store the database - configuration in DDDBL // work around, to store the database - configuration in DDDBL
$objDataObjectPool = new DataObjectPool('Database-Definition'); $objDataObjectPool = new DataObjectPool('Database-Definition');
$objDataObjectPool->add('DEFAULT', array('CONNECTION' => "mysql:host=$server;dbname=$db", $objDataObjectPool->add('DEFAULT', array(
'USER' => $user, 'CONNECTION' => "mysql:host=$server;dbname=$db",
'PASS' => $pass, 'USER' => $user,
'DEFAULT' => true)); 'PASS' => $pass,
'DEFAULT' => true
));
$stamp1 = microtime(true); $stamp1 = microtime(true);
@ -63,35 +65,34 @@ class dba {
$pass = trim($pass); $pass = trim($pass);
$db = trim($db); $db = trim($db);
if (!(strlen($server) && strlen($user))){ if (!(strlen($server) && strlen($user))) {
$this->connected = false; $this->connected = false;
$this->db = null; $this->db = null;
return; return;
} }
if ($install) { if ($install && strlen($server) && ($server !== 'localhost') && ($server !== '127.0.0.1')) {
if (strlen($server) && ($server !== 'localhost') && ($server !== '127.0.0.1')) { if (! dns_get_record($server, DNS_A + DNS_CNAME + DNS_PTR)) {
if (! dns_get_record($server, DNS_A + DNS_CNAME + DNS_PTR)) { $this->error = sprintf( t('Cannot locate DNS info for database server \'%s\''), $server);
$this->error = sprintf( t('Cannot locate DNS info for database server \'%s\''), $server); $this->connected = false;
$this->connected = false; $this->db = null;
$this->db = null; return;
return;
}
} }
} }
# etablish connection to database and store PDO object // Establish connection to database and store PDO object
DDDBL\connect(); DDDBL\connect();
$this->db = DDDBL\getDB(); $this->db = DDDBL\getDB();
if (DDDBL\isConnected()) { if (DDDBL\isConnected()) {
$this->connected = true; $this->connected = true;
} }
if (! $this->connected) { if (! $this->connected) {
$this->db = null; $this->db = null;
if (! $install) if (! $install) {
system_unavailable(); system_unavailable();
}
} }
$a->save_timestamp($stamp1, "network"); $a->save_timestamp($stamp1, "network");
@ -104,44 +105,49 @@ class dba {
public function q($sql, $onlyquery = false) { public function q($sql, $onlyquery = false) {
$a = get_app(); $a = get_app();
$strHandler = (true === $onlyquery) ? 'PDOStatement' : 'MULTI'; $strHandler = (true === $onlyquery) ? 'PDOStatement' : 'MULTI';
$strQueryAlias = md5($sql); $strQueryAlias = md5($sql);
$strSQLType = strtoupper(strstr($sql, ' ', true)); $strSQLType = strtoupper(strstr($sql, ' ', true));
$objPreparedQueryPool = new DataObjectPool('Query-Definition'); $objPreparedQueryPool = new DataObjectPool('Query-Definition');
# check if query do not exists till now, if so create its definition // check if query do not exists till now, if so create its definition
if (!$objPreparedQueryPool->exists($strQueryAlias)) if (!$objPreparedQueryPool->exists($strQueryAlias)) {
$objPreparedQueryPool->add($strQueryAlias, array('QUERY' => $sql, $objPreparedQueryPool->add($strQueryAlias, array(
'HANDLER' => $strHandler)); 'QUERY' => $sql,
'HANDLER' => $strHandler
));
}
if ((! $this->db) || (! $this->connected)) if ((! $this->db) || (! $this->connected)) {
return false; return false;
}
$this->error = ''; $this->error = '';
$stamp1 = microtime(true); $stamp1 = microtime(true);
try { try {
$r = DDDBL\get($strQueryAlias); $r = DDDBL\get($strQueryAlias);
# bad workaround to emulate the bizzare behavior of mysql_query // bad workaround to emulate the bizzare behavior of mysql_query
if (in_array($strSQLType, array('INSERT', 'UPDATE', 'DELETE', 'CREATE', 'DROP', 'SET'))) if (in_array($strSQLType, array('INSERT', 'UPDATE', 'DELETE', 'CREATE', 'DROP', 'SET'))) {
$result = true; $result = true;
$intErrorCode = false; }
$intErrorCode = false;
} catch (Exception $objException) { } catch (Exception $objException) {
$result = false; $result = false;
$intErrorCode = $objPreparedQueryPool->get($strQueryAlias)->get('PDOStatement')->errorCode(); $intErrorCode = $objPreparedQueryPool->get($strQueryAlias)->get('PDOStatement')->errorCode();
} }
$stamp2 = microtime(true); $stamp2 = microtime(true);
$duration = (float)($stamp2-$stamp1); $duration = (float)($stamp2-$stamp1);
$a->save_timestamp($stamp1, "database"); $a->save_timestamp($stamp1, "database");
if (x($a->config,'system') && x($a->config['system'],'db_log')) { /// @TODO really check $a->config for 'system'? it is very generic and should be there
if (x($a->config, 'system') && x($a->config['system'], 'db_log')) {
if (($duration > $a->config["system"]["db_loglimit"])) { if (($duration > $a->config["system"]["db_loglimit"])) {
$duration = round($duration, 3); $duration = round($duration, 3);
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
@ -152,24 +158,24 @@ class dba {
} }
} }
if ($intErrorCode) if ($intErrorCode) {
$this->error = $intErrorCode; $this->error = $intErrorCode;
}
if (strlen($this->error)) { if (strlen($this->error)) {
logger('dba: ' . $this->error); logger('dba: ' . $this->error);
} }
if ($this->debug) { if ($this->debug) {
$mesg = ''; $mesg = '';
if ($result === false) if ($result === false) {
$mesg = 'false'; $mesg = 'false';
elseif ($result === true) } elseif ($result === true) {
$mesg = 'true'; $mesg = 'true';
else { } else {
# this needs fixing, but is a bug itself /// @TODO this needs fixing, but is a bug itself
#$mesg = mysql_num_rows($result) . ' results' . EOL; // $mesg = mysql_num_rows($result) . ' results' . EOL;
} }
$str = 'SQL = ' . printable($sql) . EOL . 'SQL returned ' . $mesg $str = 'SQL = ' . printable($sql) . EOL . 'SQL returned ' . $mesg
@ -179,46 +185,49 @@ class dba {
logger('dba: ' . $str ); logger('dba: ' . $str );
} }
/** /*
* If dbfail.out exists, we will write any failed calls directly to it, * If dbfail.out exists, we will write any failed calls directly to it,
* regardless of any logging that may or may nor be in effect. * regardless of any logging that may or may nor be in effect.
* These usually indicate SQL syntax errors that need to be resolved. * These usually indicate SQL syntax errors that need to be resolved.
*/ */
if (isset($result) AND ($result === false)) { if (isset($result) AND ($result === false)) {
logger('dba: ' . printable($sql) . ' returned false.' . "\n" . $this->error); logger('dba: ' . printable($sql) . ' returned false.' . "\n" . $this->error);
if (file_exists('dbfail.out')) if (file_exists('dbfail.out')) {
file_put_contents('dbfail.out', datetime_convert() . "\n" . printable($sql) . ' returned false' . "\n" . $this->error . "\n", FILE_APPEND); file_put_contents('dbfail.out', datetime_convert() . "\n" . printable($sql) . ' returned false' . "\n" . $this->error . "\n", FILE_APPEND);
}
} }
if (isset($result) AND (($result === true) || ($result === false))) if (isset($result) AND (($result === true) || ($result === false))) {
return $result; return $result;
}
if ($onlyquery) { if ($onlyquery) {
$this->result = $r; # this will store an PDOStatement Object in result $this->result = $r; # this will store an PDOStatement Object in result
$this->result->execute(); # execute the Statement, to get its result $this->result->execute(); # execute the Statement, to get its result
return true; return true;
} }
//$a->save_timestamp($stamp1, "database"); //$a->save_timestamp($stamp1, "database");
if ($this->debug) if ($this->debug) {
logger('dba: ' . printable(print_r($r, true))); logger('dba: ' . printable(print_r($r, true)));
return($r); }
return $r;
} }
public function qfetch() { public function qfetch() {
if (false === $this->result) {
return false;
}
if (false === $this->result) return $this->result->fetch();
return false;
return $this->result->fetch();
} }
public function qclose() { public function qclose() {
if ($this->result) if ($this->result) {
return $this->result->closeCursor(); return $this->result->closeCursor();
}
} }
public function dbg($dbg) { public function dbg($dbg) {
@ -227,17 +236,20 @@ class dba {
public function escape($str) { public function escape($str) {
if ($this->db && $this->connected) { if ($this->db && $this->connected) {
$strQuoted = $this->db->quote($str); $strQuoted = $this->db->quote($str);
# this workaround is needed, because quote creates "'" and the beginning and the end /*
# of the string, which is correct. but until now the queries set this delimiter manually, * this workaround is needed, because quote creates "'" and the beginning and the end
# so we must remove them from here and wait until everything uses prepared statements * of the string, which is correct. but until now the queries set this delimiter manually,
return mb_substr($strQuoted, 1, mb_strlen($strQuoted) - 2); * so we must remove them from here and wait until everything uses prepared statements
*/
return mb_substr($strQuoted, 1, mb_strlen($strQuoted) - 2);
} }
} }
function __destruct() { public function __destruct() {
if ($this->db) if ($this->db) {
DDDBL\disconnect(); DDDBL\disconnect();
}
} }
}} }}
@ -267,14 +279,13 @@ function dbesc($str) {
return(str_replace("'","\\'",$str)); return(str_replace("'","\\'",$str));
}} }}
// Function: q($sql,$args);
// Description: execute SQL query with printf style args.
// Example: $r = q("SELECT * FROM `%s` WHERE `uid` = %d",
// 'user', 1);
if (! function_exists('q')) { if (! function_exists('q')) {
/**
* Function: q($sql,$args);
* Description: execute SQL query with printf style args.
* Example: $r = q("SELECT * FROM `%s` WHERE `uid` = %d",
* 'user', 1);
*/
function q($sql) { function q($sql) {
global $db; global $db;
@ -284,8 +295,9 @@ function q($sql) {
if ($db && $db->connected) { if ($db && $db->connected) {
$stmt = @vsprintf($sql,$args); // Disabled warnings $stmt = @vsprintf($sql,$args); // Disabled warnings
//logger("dba: q: $stmt", LOGGER_ALL); //logger("dba: q: $stmt", LOGGER_ALL);
if ($stmt === false) if ($stmt === false) {
logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG); logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG);
}
return $db->q($stmt); return $db->q($stmt);
} }
@ -300,34 +312,33 @@ function q($sql) {
}} }}
/**
*
* Raw db query, no arguments
*
*/
if (! function_exists('dbq')) { if (! function_exists('dbq')) {
/**
* Raw db query, no arguments
*/
function dbq($sql) { function dbq($sql) {
global $db; global $db;
if ($db && $db->connected) if ($db && $db->connected) {
$ret = $db->q($sql); $ret = $db->q($sql);
else } else {
$ret = false; $ret = false;
}
return $ret; return $ret;
}} }}
// Caller is responsible for ensuring that any integer arguments to /*
// dbesc_array are actually integers and not malformed strings containing * Caller is responsible for ensuring that any integer arguments to
// SQL injection vectors. All integer array elements should be specifically * dbesc_array are actually integers and not malformed strings containing
// cast to int to avoid trouble. * SQL injection vectors. All integer array elements should be specifically
* cast to int to avoid trouble.
*/
if (! function_exists('dbesc_array_cb')) { if (! function_exists('dbesc_array_cb')) {
function dbesc_array_cb(&$item, $key) { function dbesc_array_cb(&$item, $key) {
if (is_string($item)) if (is_string($item)) {
$item = dbesc($item); $item = dbesc($item);
}
}} }}
@ -340,5 +351,5 @@ function dbesc_array(&$arr) {
if (! function_exists('dba_timer')) { if (! function_exists('dba_timer')) {
function dba_timer() { function dba_timer() {
return microtime(true); return microtime(true);
}} }}

View File

@ -3,8 +3,8 @@
use Friendica\App; use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
require_once("boot.php"); require_once "boot.php";
require_once("include/text.php"); require_once "include/text.php";
define('NEW_UPDATE_ROUTINE_VERSION', 1170); define('NEW_UPDATE_ROUTINE_VERSION', 1170);
@ -1742,6 +1742,8 @@ function db_definition() {
), ),
"indexes" => array( "indexes" => array(
"PRIMARY" => array("id"), "PRIMARY" => array("id"),
"pid" => array("pid"),
"priority_created" => array("priority", "created"),
) )
); );
@ -1766,7 +1768,7 @@ function dbstructure_run(&$argv, &$argc) {
unset($db_host, $db_user, $db_pass, $db_data); unset($db_host, $db_user, $db_pass, $db_data);
} }
if ($argc==2) { if ($argc == 2) {
switch ($argv[1]) { switch ($argv[1]) {
case "dryrun": case "dryrun":
update_structure(true, false); update_structure(true, false);
@ -1776,7 +1778,7 @@ function dbstructure_run(&$argv, &$argc) {
$build = get_config('system','build'); $build = get_config('system','build');
if (!x($build)) { if (!x($build)) {
set_config('system','build',DB_UPDATE_VERSION); set_config('system', 'build', DB_UPDATE_VERSION);
$build = DB_UPDATE_VERSION; $build = DB_UPDATE_VERSION;
} }
@ -1786,7 +1788,9 @@ function dbstructure_run(&$argv, &$argc) {
// run any left update_nnnn functions in update.php // run any left update_nnnn functions in update.php
for ($x = $stored; $x < $current; $x ++) { for ($x = $stored; $x < $current; $x ++) {
$r = run_update_function($x); $r = run_update_function($x);
if (!$r) break; if (!$r) {
break;
}
} }
set_config('system','build',DB_UPDATE_VERSION); set_config('system','build',DB_UPDATE_VERSION);
@ -1813,7 +1817,7 @@ function dbstructure_run(&$argv, &$argc) {
} }
if (array_search(__file__,get_included_files())===0) { if (array_search(__FILE__,get_included_files())===0) {
dbstructure_run($_SERVER["argv"],$_SERVER["argc"]); dbstructure_run($_SERVER["argv"],$_SERVER["argc"]);
killme(); killme();
} }

View File

@ -3788,8 +3788,10 @@ class Diaspora {
$message = self::construct_like($r[0], $contact); $message = self::construct_like($r[0], $contact);
$message["author_signature"] = self::signature($contact, $message); $message["author_signature"] = self::signature($contact, $message);
// We now store the signature more flexible to dynamically support new fields. /*
// This will break Diaspora compatibility with Friendica versions prior to 3.5. * Now store the signature more flexible to dynamically support new fields.
* This will break Diaspora compatibility with Friendica versions prior to 3.5.
*/
q("INSERT INTO `sign` (`iid`,`signed_text`) VALUES (%d,'%s')", q("INSERT INTO `sign` (`iid`,`signed_text`) VALUES (%d,'%s')",
intval($message_id), intval($message_id),
dbesc(json_encode($message)) dbesc(json_encode($message))
@ -3821,9 +3823,11 @@ class Diaspora {
$message = self::construct_comment($item, $contact); $message = self::construct_comment($item, $contact);
$message["author_signature"] = self::signature($contact, $message); $message["author_signature"] = self::signature($contact, $message);
// We now store the signature more flexible to dynamically support new fields. /*
// This will break Diaspora compatibility with Friendica versions prior to 3.5. * Now store the signature more flexible to dynamically support new fields.
q("INSERT INTO `sign` (`iid`,`signed_text`) VALUES (%d,'%s')", * This will break Diaspora compatibility with Friendica versions prior to 3.5.
*/
q("INSERT INTO `sign` (`iid`, `signed_text`) VALUES (%d, '%s')",
intval($message_id), intval($message_id),
dbesc(json_encode($message)) dbesc(json_encode($message))
); );

View File

@ -19,18 +19,17 @@ function expire_run(&$argv, &$argc){
} }
// make this optional as it could have a performance impact on large sites // make this optional as it could have a performance impact on large sites
if (intval(get_config('system', 'optimize_items'))) {
if (intval(get_config('system','optimize_items'))) {
q("OPTIMIZE TABLE `item`"); q("OPTIMIZE TABLE `item`");
} }
logger('expire: start'); logger('expire: start');
$r = q("SELECT `uid`,`username`,`expire` FROM `user` WHERE `expire` != 0"); $r = q("SELECT `uid`, `username`, `expire` FROM `user` WHERE `expire` != 0");
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {
logger('Expire: ' . $rr['username'] . ' interval: ' . $rr['expire'], LOGGER_DEBUG); logger('Expire: ' . $rr['username'] . ' interval: ' . $rr['expire'], LOGGER_DEBUG);
item_expire($rr['uid'],$rr['expire']); item_expire($rr['uid'], $rr['expire']);
} }
} }

View File

@ -12,15 +12,15 @@
use Friendica\Core\Config; use Friendica\Core\Config;
require_once("include/dba.php"); require_once "include/dba.php";
if(! function_exists('get_browser_language')) { if (! function_exists('get_browser_language')) {
/** /**
* @brief get the prefered language from the HTTP_ACCEPT_LANGUAGE header * @brief get the prefered language from the HTTP_ACCEPT_LANGUAGE header
*/ */
function get_browser_language() { function get_browser_language() {
if (x($_SERVER,'HTTP_ACCEPT_LANGUAGE')) { if (x($_SERVER, 'HTTP_ACCEPT_LANGUAGE')) {
// break up string into pieces (languages and q factors) // break up string into pieces (languages and q factors)
preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i',
$_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse); $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);
@ -29,11 +29,11 @@ function get_browser_language() {
if (count($lang_parse[1])) { if (count($lang_parse[1])) {
// go through the list of prefered languages and add a generic language // go through the list of prefered languages and add a generic language
// for sub-linguas (e.g. de-ch will add de) if not already in array // for sub-linguas (e.g. de-ch will add de) if not already in array
for ($i=0; $i<count($lang_parse[1]); $i++) { for ($i = 0; $i < count($lang_parse[1]); $i++) {
$lang_list[] = strtolower($lang_parse[1][$i]); $lang_list[] = strtolower($lang_parse[1][$i]);
if ( strlen($lang_parse[1][$i])>3 ) { if (strlen($lang_parse[1][$i])>3 ) {
$dashpos = strpos($lang_parse[1][$i], '-'); $dashpos = strpos($lang_parse[1][$i], '-');
if (! in_array(substr($lang_parse[1][$i], 0, $dashpos), $lang_list ) ) { if (!in_array(substr($lang_parse[1][$i], 0, $dashpos), $lang_list ) ) {
$lang_list[] = strtolower(substr($lang_parse[1][$i], 0, $dashpos)); $lang_list[] = strtolower(substr($lang_parse[1][$i], 0, $dashpos));
} }
} }
@ -42,7 +42,7 @@ function get_browser_language() {
} }
// check if we have translations for the preferred languages and pick the 1st that has // check if we have translations for the preferred languages and pick the 1st that has
for ($i=0; $i<count($lang_list); $i++) { for ($i = 0; $i < count($lang_list); $i++) {
$lang = $lang_list[$i]; $lang = $lang_list[$i];
if ($lang === 'en' || (file_exists("view/lang/$lang") && is_dir("view/lang/$lang"))) { if ($lang === 'en' || (file_exists("view/lang/$lang") && is_dir("view/lang/$lang"))) {
$preferred = $lang; $preferred = $lang;
@ -63,10 +63,11 @@ function push_lang($language) {
$a->langsave = $lang; $a->langsave = $lang;
if($language === $lang) if ($language === $lang) {
return; return;
}
if(isset($a->strings) && count($a->strings)) { if (isset($a->strings) && count($a->strings)) {
$a->stringsave = $a->strings; $a->stringsave = $a->strings;
} }
$a->strings = array(); $a->strings = array();
@ -77,13 +78,15 @@ function push_lang($language) {
function pop_lang() { function pop_lang() {
global $lang, $a; global $lang, $a;
if($lang === $a->langsave) if ($lang === $a->langsave) {
return; return;
}
if(isset($a->stringsave)) if (isset($a->stringsave)) {
$a->strings = $a->stringsave; $a->strings = $a->stringsave;
else } else {
$a->strings = array(); $a->strings = array();
}
$lang = $a->langsave; $lang = $a->langsave;
} }
@ -91,7 +94,7 @@ function pop_lang() {
// l // l
if(! function_exists('load_translation_table')) { if (! function_exists('load_translation_table')) {
/** /**
* load string translation table for alternate language * load string translation table for alternate language
* *
@ -106,15 +109,15 @@ function load_translation_table($lang) {
// load enabled plugins strings // load enabled plugins strings
$plugins = q("SELECT name FROM addon WHERE installed=1;"); $plugins = q("SELECT name FROM addon WHERE installed=1;");
if ($plugins!==false) { if ($plugins!==false) {
foreach($plugins as $p) { foreach ($plugins as $p) {
$name = $p['name']; $name = $p['name'];
if(file_exists("addon/$name/lang/$lang/strings.php")) { if (file_exists("addon/$name/lang/$lang/strings.php")) {
include("addon/$name/lang/$lang/strings.php"); include("addon/$name/lang/$lang/strings.php");
} }
} }
} }
if(file_exists("view/lang/$lang/strings.php")) { if (file_exists("view/lang/$lang/strings.php")) {
include("view/lang/$lang/strings.php"); include("view/lang/$lang/strings.php");
} }
@ -122,27 +125,27 @@ function load_translation_table($lang) {
// translate string if translation exists // translate string if translation exists
if(! function_exists('t')) { if (! function_exists('t')) {
function t($s) { function t($s) {
$a = get_app(); $a = get_app();
if(x($a->strings,$s)) { if (x($a->strings,$s)) {
$t = $a->strings[$s]; $t = $a->strings[$s];
return is_array($t)?$t[0]:$t; return is_array($t)?$t[0]:$t;
} }
return $s; return $s;
}} }}
if(! function_exists('tt')){ if (! function_exists('tt')){
function tt($singular, $plural, $count){ function tt($singular, $plural, $count){
global $lang; global $lang;
$a = get_app(); $a = get_app();
if(x($a->strings,$singular)) { if (x($a->strings,$singular)) {
$t = $a->strings[$singular]; $t = $a->strings[$singular];
$f = 'string_plural_select_' . str_replace('-','_',$lang); $f = 'string_plural_select_' . str_replace('-','_',$lang);
if(! function_exists($f)) if (! function_exists($f))
$f = 'string_plural_select_default'; $f = 'string_plural_select_default';
$k = $f($count); $k = $f($count);
return is_array($t)?$t[$k]:$t; return is_array($t)?$t[$k]:$t;
@ -158,7 +161,7 @@ function tt($singular, $plural, $count){
// provide a fallback which will not collide with // provide a fallback which will not collide with
// a function defined in any language file // a function defined in any language file
if(! function_exists('string_plural_select_default')) { if (! function_exists('string_plural_select_default')) {
function string_plural_select_default($n) { function string_plural_select_default($n) {
return ($n != 1); return ($n != 1);
}} }}
@ -185,7 +188,7 @@ function get_available_languages() {
$strings_file_paths[] = 'view/lang/en/strings.php'; $strings_file_paths[] = 'view/lang/en/strings.php';
} }
asort($strings_file_paths); asort($strings_file_paths);
foreach($strings_file_paths as $strings_file_path) { foreach ($strings_file_paths as $strings_file_path) {
$path_array = explode('/', $strings_file_path); $path_array = explode('/', $strings_file_path);
$langs[$path_array[2]] = $path_array[2]; $langs[$path_array[2]] = $path_array[2];
} }

View File

@ -21,7 +21,7 @@ function uninstall_plugin($plugin){
); );
@include_once('addon/' . $plugin . '/' . $plugin . '.php'); @include_once('addon/' . $plugin . '/' . $plugin . '.php');
if(function_exists($plugin . '_uninstall')) { if (function_exists($plugin . '_uninstall')) {
$func = $plugin . '_uninstall'; $func = $plugin . '_uninstall';
$func(); $func();
} }
@ -37,12 +37,12 @@ if (! function_exists('install_plugin')){
function install_plugin($plugin) { function install_plugin($plugin) {
// silently fail if plugin was removed // silently fail if plugin was removed
if(! file_exists('addon/' . $plugin . '/' . $plugin . '.php')) if (! file_exists('addon/' . $plugin . '/' . $plugin . '.php'))
return false; return false;
logger("Addons: installing " . $plugin); logger("Addons: installing " . $plugin);
$t = @filemtime('addon/' . $plugin . '/' . $plugin . '.php'); $t = @filemtime('addon/' . $plugin . '/' . $plugin . '.php');
@include_once('addon/' . $plugin . '/' . $plugin . '.php'); @include_once('addon/' . $plugin . '/' . $plugin . '.php');
if(function_exists($plugin . '_install')) { if (function_exists($plugin . '_install')) {
$func = $plugin . '_install'; $func = $plugin . '_install';
$func(); $func();
@ -58,7 +58,7 @@ function install_plugin($plugin) {
// once most site tables have been updated. // once most site tables have been updated.
// This way the system won't fall over dead during the update. // This way the system won't fall over dead during the update.
if(file_exists('addon/' . $plugin . '/.hidden')) { if (file_exists('addon/' . $plugin . '/.hidden')) {
q("UPDATE `addon` SET `hidden` = 1 WHERE `name` = '%s'", q("UPDATE `addon` SET `hidden` = 1 WHERE `name` = '%s'",
dbesc($plugin) dbesc($plugin)
); );
@ -74,10 +74,10 @@ function install_plugin($plugin) {
// reload all updated plugins // reload all updated plugins
if(! function_exists('reload_plugins')) { if (! function_exists('reload_plugins')) {
function reload_plugins() { function reload_plugins() {
$plugins = get_config('system','addon'); $plugins = get_config('system','addon');
if(strlen($plugins)) { if (strlen($plugins)) {
$r = q("SELECT * FROM `addon` WHERE `installed` = 1"); $r = q("SELECT * FROM `addon` WHERE `installed` = 1");
if (dbm::is_result($r)) if (dbm::is_result($r))
@ -87,25 +87,25 @@ function reload_plugins() {
$parr = explode(',',$plugins); $parr = explode(',',$plugins);
if(count($parr)) { if (count($parr)) {
foreach($parr as $pl) { foreach ($parr as $pl) {
$pl = trim($pl); $pl = trim($pl);
$fname = 'addon/' . $pl . '/' . $pl . '.php'; $fname = 'addon/' . $pl . '/' . $pl . '.php';
if(file_exists($fname)) { if (file_exists($fname)) {
$t = @filemtime($fname); $t = @filemtime($fname);
foreach($installed as $i) { foreach ($installed as $i) {
if(($i['name'] == $pl) && ($i['timestamp'] != $t)) { if (($i['name'] == $pl) && ($i['timestamp'] != $t)) {
logger('Reloading plugin: ' . $i['name']); logger('Reloading plugin: ' . $i['name']);
@include_once($fname); @include_once($fname);
if(function_exists($pl . '_uninstall')) { if (function_exists($pl . '_uninstall')) {
$func = $pl . '_uninstall'; $func = $pl . '_uninstall';
$func(); $func();
} }
if(function_exists($pl . '_install')) { if (function_exists($pl . '_install')) {
$func = $pl . '_install'; $func = $pl . '_install';
$func(); $func();
} }
@ -143,7 +143,7 @@ function plugin_enabled($plugin) {
* @param int $priority A priority (defaults to 0) * @param int $priority A priority (defaults to 0)
* @return mixed|bool * @return mixed|bool
*/ */
if(! function_exists('register_hook')) { if (! function_exists('register_hook')) {
function register_hook($hook,$file,$function,$priority=0) { function register_hook($hook,$file,$function,$priority=0) {
$r = q("SELECT * FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s' LIMIT 1", $r = q("SELECT * FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s' LIMIT 1",
@ -171,7 +171,7 @@ function register_hook($hook,$file,$function,$priority=0) {
* @param string $function the name of the function that the hook called * @param string $function the name of the function that the hook called
* @return array * @return array
*/ */
if(! function_exists('unregister_hook')) { if (! function_exists('unregister_hook')) {
function unregister_hook($hook,$file,$function) { function unregister_hook($hook,$file,$function) {
$r = q("DELETE FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s'", $r = q("DELETE FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s'",
@ -183,7 +183,7 @@ function unregister_hook($hook,$file,$function) {
}} }}
if(! function_exists('load_hooks')) { if (! function_exists('load_hooks')) {
function load_hooks() { function load_hooks() {
$a = get_app(); $a = get_app();
$a->hooks = array(); $a->hooks = array();
@ -191,7 +191,7 @@ function load_hooks() {
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {
if(! array_key_exists($rr['hook'],$a->hooks)) if (! array_key_exists($rr['hook'],$a->hooks))
$a->hooks[$rr['hook']] = array(); $a->hooks[$rr['hook']] = array();
$a->hooks[$rr['hook']][] = array($rr['file'],$rr['function']); $a->hooks[$rr['hook']][] = array($rr['file'],$rr['function']);
} }
@ -245,13 +245,13 @@ function call_single_hook($a, $name, $hook, &$data = null) {
//check if an app_menu hook exist for plugin $name. //check if an app_menu hook exist for plugin $name.
//Return true if the plugin is an app //Return true if the plugin is an app
if(! function_exists('plugin_is_app')) { if (! function_exists('plugin_is_app')) {
function plugin_is_app($name) { function plugin_is_app($name) {
$a = get_app(); $a = get_app();
if(is_array($a->hooks) && (array_key_exists('app_menu',$a->hooks))) { if (is_array($a->hooks) && (array_key_exists('app_menu',$a->hooks))) {
foreach($a->hooks['app_menu'] as $hook) { foreach ($a->hooks['app_menu'] as $hook) {
if($hook[0] == 'addon/'.$name.'/'.$name.'.php') if ($hook[0] == 'addon/'.$name.'/'.$name.'.php')
return true; return true;
} }
} }
@ -298,7 +298,7 @@ function get_plugin_info($plugin){
if ($r){ if ($r){
$ll = explode("\n", $m[0]); $ll = explode("\n", $m[0]);
foreach( $ll as $l ) { foreach ( $ll as $l ) {
$l = trim($l,"\t\n\r */"); $l = trim($l,"\t\n\r */");
if ($l!=""){ if ($l!=""){
list($k,$v) = array_map("trim", explode(":",$l,2)); list($k,$v) = array_map("trim", explode(":",$l,2));
@ -353,9 +353,9 @@ function get_theme_info($theme){
'unsupported' => false 'unsupported' => false
); );
if(file_exists("view/theme/$theme/experimental")) if (file_exists("view/theme/$theme/experimental"))
$info['experimental'] = true; $info['experimental'] = true;
if(file_exists("view/theme/$theme/unsupported")) if (file_exists("view/theme/$theme/unsupported"))
$info['unsupported'] = true; $info['unsupported'] = true;
if (!is_file("view/theme/$theme/theme.php")) return $info; if (!is_file("view/theme/$theme/theme.php")) return $info;
@ -369,7 +369,7 @@ function get_theme_info($theme){
if ($r){ if ($r){
$ll = explode("\n", $m[0]); $ll = explode("\n", $m[0]);
foreach( $ll as $l ) { foreach ( $ll as $l ) {
$l = trim($l,"\t\n\r */"); $l = trim($l,"\t\n\r */");
if ($l!=""){ if ($l!=""){
list($k,$v) = array_map("trim", explode(":",$l,2)); list($k,$v) = array_map("trim", explode(":",$l,2));
@ -413,7 +413,7 @@ function get_theme_info($theme){
*/ */
function get_theme_screenshot($theme) { function get_theme_screenshot($theme) {
$exts = array('.png','.jpg'); $exts = array('.png','.jpg');
foreach($exts as $ext) { foreach ($exts as $ext) {
if (file_exists('view/theme/' . $theme . '/screenshot' . $ext)) { if (file_exists('view/theme/' . $theme . '/screenshot' . $ext)) {
return(App::get_baseurl() . '/view/theme/' . $theme . '/screenshot' . $ext); return(App::get_baseurl() . '/view/theme/' . $theme . '/screenshot' . $ext);
} }
@ -512,11 +512,11 @@ function service_class_fetch($uid,$property) {
$service_class = $r[0]['service_class']; $service_class = $r[0]['service_class'];
} }
} }
if(! x($service_class)) if (! x($service_class))
return false; // everything is allowed return false; // everything is allowed
$arr = get_config('service_class',$service_class); $arr = get_config('service_class',$service_class);
if(! is_array($arr) || (! count($arr))) if (! is_array($arr) || (! count($arr)))
return false; return false;
return((array_key_exists($property,$arr)) ? $arr[$property] : false); return((array_key_exists($property,$arr)) ? $arr[$property] : false);
@ -525,12 +525,14 @@ function service_class_fetch($uid,$property) {
function upgrade_link($bbcode = false) { function upgrade_link($bbcode = false) {
$l = get_config('service_class','upgrade_link'); $l = get_config('service_class','upgrade_link');
if(! $l) if (! $l) {
return ''; return '';
if($bbcode) }
if ($bbcode) {
$t = sprintf('[url=%s]' . t('Click here to upgrade.') . '[/url]', $l); $t = sprintf('[url=%s]' . t('Click here to upgrade.') . '[/url]', $l);
else } else {
$t = sprintf('<a href="%s">' . t('Click here to upgrade.') . '</div>', $l); $t = sprintf('<a href="%s">' . t('Click here to upgrade.') . '</div>', $l);
}
return $t; return $t;
} }
@ -557,13 +559,15 @@ function upgrade_bool_message($bbcode = false) {
*/ */
function theme_include($file, $root = '') { function theme_include($file, $root = '') {
// Make sure $root ends with a slash / if it's not blank // Make sure $root ends with a slash / if it's not blank
if($root !== '' && $root[strlen($root)-1] !== '/') if ($root !== '' && $root[strlen($root)-1] !== '/') {
$root = $root . '/'; $root = $root . '/';
}
$theme_info = $a->theme_info; $theme_info = $a->theme_info;
if(is_array($theme_info) AND array_key_exists('extends',$theme_info)) if (is_array($theme_info) AND array_key_exists('extends',$theme_info)) {
$parent = $theme_info['extends']; $parent = $theme_info['extends'];
else } else {
$parent = 'NOPATH'; $parent = 'NOPATH';
}
$theme = current_theme(); $theme = current_theme();
$thname = $theme; $thname = $theme;
$ext = substr($file,strrpos($file,'.')+1); $ext = substr($file,strrpos($file,'.')+1);
@ -572,12 +576,13 @@ function theme_include($file, $root = '') {
"{$root}view/theme/$parent/$ext/$file", "{$root}view/theme/$parent/$ext/$file",
"{$root}view/$ext/$file", "{$root}view/$ext/$file",
); );
foreach($paths as $p) { foreach ($paths as $p) {
// strpos() is faster than strstr when checking if one string is in another (http://php.net/manual/en/function.strstr.php) // strpos() is faster than strstr when checking if one string is in another (http://php.net/manual/en/function.strstr.php)
if(strpos($p,'NOPATH') !== false) if (strpos($p,'NOPATH') !== false) {
continue; continue;
if(file_exists($p)) } elseif (file_exists($p)) {
return $p; return $p;
}
} }
return ''; return '';
} }

View File

@ -23,7 +23,7 @@ function poller_run($argv, $argc){
$a = new App(dirname(__DIR__)); $a = new App(dirname(__DIR__));
} }
if(is_null($db)) { if (is_null($db)) {
@include(".htconfig.php"); @include(".htconfig.php");
require_once("include/dba.php"); require_once("include/dba.php");
$db = new dba($db_host, $db_user, $db_pass, $db_data); $db = new dba($db_host, $db_user, $db_pass, $db_data);
@ -55,7 +55,7 @@ function poller_run($argv, $argc){
return; return;
} }
if(($argc <= 1) OR ($argv[1] != "no_cron")) { if (($argc <= 1) OR ($argv[1] != "no_cron")) {
poller_run_cron(); poller_run_cron();
} }
@ -79,22 +79,28 @@ function poller_run($argv, $argc){
// Check free memory // Check free memory
if ($a->min_memory_reached()) { if ($a->min_memory_reached()) {
logger('Memory limit reached, quitting.', LOGGER_DEBUG);
return; return;
} }
// Count active workers and compare them with a maximum value that depends on the load // Count active workers and compare them with a maximum value that depends on the load
if (poller_too_much_workers()) { if (poller_too_much_workers()) {
logger('Active worker limit reached, quitting.', LOGGER_DEBUG);
return; return;
} }
if (!poller_execute($r[0])) { if (!poller_execute($r[0])) {
logger('Process execution failed, quitting.', LOGGER_DEBUG);
return; return;
} }
// Quit the poller once every hour // Quit the poller once every hour
if (time() > ($starttime + 3600)) if (time() > ($starttime + 3600)) {
logger('Process lifetime reachted, quitting.', LOGGER_DEBUG);
return; return;
}
} }
logger("Couldn't select a workerqueue entry, quitting.", LOGGER_DEBUG);
} }
/** /**
@ -146,7 +152,6 @@ function poller_execute($queue) {
if (function_exists($funcname)) { if (function_exists($funcname)) {
poller_exec_function($queue, $funcname, $argv); poller_exec_function($queue, $funcname, $argv);
dba::delete('workerqueue', array('id' => $queue["id"])); dba::delete('workerqueue', array('id' => $queue["id"]));
} else { } else {
logger("Function ".$funcname." does not exist"); logger("Function ".$funcname." does not exist");
@ -361,8 +366,9 @@ 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_CRITICAL, PRIORITY_HIGH, PRIORITY_MEDIUM, PRIORITY_LOW, PRIORITY_NEGLIGIBLE))) 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_CRITICAL => 360, PRIORITY_HIGH => 10, PRIORITY_MEDIUM => 60, PRIORITY_LOW => 180, PRIORITY_NEGLIGIBLE => 360); $max_duration_defaults = array(PRIORITY_CRITICAL => 360, PRIORITY_HIGH => 10, PRIORITY_MEDIUM => 60, PRIORITY_LOW => 180, PRIORITY_NEGLIGIBLE => 360);
@ -400,6 +406,8 @@ function poller_too_much_workers() {
$maxqueues = $queues; $maxqueues = $queues;
$active = poller_active_workers();
// Decrease the number of workers at higher load // Decrease the number of workers at higher load
$load = current_load(); $load = current_load();
if ($load) { if ($load) {
@ -412,8 +420,6 @@ function poller_too_much_workers() {
$slope = $maxworkers / pow($maxsysload, $exponent); $slope = $maxworkers / pow($maxsysload, $exponent);
$queues = ceil($slope * pow(max(0, $maxsysload - $load), $exponent)); $queues = ceil($slope * pow(max(0, $maxsysload - $load), $exponent));
$active = 0;
// Create a list of queue entries grouped by their priority // Create a list of queue entries grouped by their priority
$listitem = array(); $listitem = array();
@ -421,17 +427,15 @@ function poller_too_much_workers() {
$processes = dba::p("SELECT COUNT(*) AS `running` FROM `process` WHERE NOT EXISTS (SELECT id FROM `workerqueue` WHERE `workerqueue`.`pid` = `process`.`pid`)"); $processes = dba::p("SELECT COUNT(*) AS `running` FROM `process` WHERE NOT EXISTS (SELECT id FROM `workerqueue` WHERE `workerqueue`.`pid` = `process`.`pid`)");
if ($process = dba::fetch($processes)) { if ($process = dba::fetch($processes)) {
$listitem[0] = "0:".$process["running"]; $listitem[0] = "0:".$process["running"];
$active += $process["running"];
} }
dba::close($processes); dba::close($processes);
// Now adding all processes with workerqueue entries // Now adding all processes with workerqueue entries
$entries = dba::p("SELECT COUNT(*) AS `entries`, `priority` FROM `workerqueue` GROUP BY `priority`"); $entries = dba::p("SELECT COUNT(*) AS `entries`, `priority` FROM `workerqueue` GROUP BY `priority`");
while ($entry = dba::fetch($entries)) { while ($entry = dba::fetch($entries)) {
$processes = dba::p("SELECT COUNT(*) AS `running` FROM `process` LEFT JOIN `workerqueue` ON `workerqueue`.`pid` = `process`.`pid` WHERE `priority` = ?", $entry["priority"]); $processes = dba::p("SELECT COUNT(*) AS `running` FROM `process` INNER JOIN `workerqueue` ON `workerqueue`.`pid` = `process`.`pid` WHERE `priority` = ?", $entry["priority"]);
if ($process = dba::fetch($processes)) { if ($process = dba::fetch($processes)) {
$listitem[$entry["priority"]] = $entry["priority"].":".$process["running"]."/".$entry["entries"]; $listitem[$entry["priority"]] = $entry["priority"].":".$process["running"]."/".$entry["entries"];
$active += $process["running"];
} }
dba::close($processes); dba::close($processes);
} }
@ -465,8 +469,6 @@ function poller_too_much_workers() {
$a = get_app(); $a = get_app();
$a->proc_run($args); $a->proc_run($args);
} }
} else {
$active = poller_active_workers();
} }
return($active >= $queues); return($active >= $queues);
@ -540,16 +542,16 @@ function poller_passing_slow(&$highest_priority) {
*/ */
function poller_worker_process() { function poller_worker_process() {
dba::transaction();
// Check if we should pass some low priority process // Check if we should pass some low priority process
$highest_priority = 0; $highest_priority = 0;
if (poller_passing_slow($highest_priority)) { if (poller_passing_slow($highest_priority)) {
dba::e('LOCK TABLES `workerqueue` WRITE');
// Are there waiting processes with a higher priority than the currently highest? // Are there waiting processes with a higher priority than the currently highest?
$r = q("SELECT * FROM `workerqueue` $r = q("SELECT * FROM `workerqueue`
WHERE `executed` <= '%s' AND `priority` < %d WHERE `executed` <= '%s' AND `priority` < %d
ORDER BY `priority`, `created` LIMIT 1 FOR UPDATE", ORDER BY `priority`, `created` LIMIT 1",
dbesc(NULL_DATE), dbesc(NULL_DATE),
intval($highest_priority)); intval($highest_priority));
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
@ -558,18 +560,25 @@ function poller_worker_process() {
// Give slower processes some processing time // Give slower processes some processing time
$r = q("SELECT * FROM `workerqueue` $r = q("SELECT * FROM `workerqueue`
WHERE `executed` <= '%s' AND `priority` > %d WHERE `executed` <= '%s' AND `priority` > %d
ORDER BY `priority`, `created` LIMIT 1 FOR UPDATE", ORDER BY `priority`, `created` LIMIT 1",
dbesc(NULL_DATE), dbesc(NULL_DATE),
intval($highest_priority)); intval($highest_priority));
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
return $r; return $r;
} }
} else {
dba::e('LOCK TABLES `workerqueue` WRITE');
} }
// If there is no result (or we shouldn't pass lower processes) we check without priority limit // If there is no result (or we shouldn't pass lower processes) we check without priority limit
if (!dbm::is_result($r)) { if (!dbm::is_result($r)) {
$r = q("SELECT * FROM `workerqueue` WHERE `executed` <= '%s' ORDER BY `priority`, `created` LIMIT 1 FOR UPDATE", dbesc(NULL_DATE)); $r = q("SELECT * FROM `workerqueue` WHERE `executed` <= '%s' ORDER BY `priority`, `created` LIMIT 1", dbesc(NULL_DATE));
}
// We only unlock the tables here, when we got no data
if (!dbm::is_result($r)) {
dba::e('UNLOCK TABLES');
} }
return $r; return $r;
@ -578,7 +587,7 @@ function poller_worker_process() {
/** /**
* @brief Assigns a workerqueue entry to the current process * @brief Assigns a workerqueue entry to the current process
* *
* All the checks after the update are only needed with MyISAM. * When we are sure that the table locks are working correctly, we can remove the checks from here
* *
* @param array $queue Workerqueue entry * @param array $queue Workerqueue entry
* *
@ -587,10 +596,12 @@ function poller_worker_process() {
function poller_claim_process($queue) { function poller_claim_process($queue) {
$mypid = getmypid(); $mypid = getmypid();
if (!dba::update('workerqueue', array('executed' => datetime_convert(), 'pid' => $mypid), $success = dba::update('workerqueue', array('executed' => datetime_convert(), 'pid' => $mypid),
array('id' => $queue["id"], 'pid' => 0))) { array('id' => $queue["id"], 'pid' => 0));
dba::e('UNLOCK TABLES');
if (!$success) {
logger("Couldn't update queue entry ".$queue["id"]." - skip this execution", LOGGER_DEBUG); logger("Couldn't update queue entry ".$queue["id"]." - skip this execution", LOGGER_DEBUG);
dba::commit();
return false; return false;
} }
@ -598,18 +609,14 @@ function poller_claim_process($queue) {
$id = q("SELECT `pid`, `executed` FROM `workerqueue` WHERE `id` = %d", intval($queue["id"])); $id = q("SELECT `pid`, `executed` FROM `workerqueue` WHERE `id` = %d", intval($queue["id"]));
if (!$id) { if (!$id) {
logger("Queue item ".$queue["id"]." vanished - skip this execution", LOGGER_DEBUG); logger("Queue item ".$queue["id"]." vanished - skip this execution", LOGGER_DEBUG);
dba::commit();
return false; return false;
} elseif ((strtotime($id[0]["executed"]) <= 0) OR ($id[0]["pid"] == 0)) { } elseif ((strtotime($id[0]["executed"]) <= 0) OR ($id[0]["pid"] == 0)) {
logger("Entry for queue item ".$queue["id"]." wasn't stored - skip this execution", LOGGER_DEBUG); logger("Entry for queue item ".$queue["id"]." wasn't stored - skip this execution", LOGGER_DEBUG);
dba::commit();
return false; return false;
} elseif ($id[0]["pid"] != $mypid) { } elseif ($id[0]["pid"] != $mypid) {
logger("Queue item ".$queue["id"]." is to be executed by process ".$id[0]["pid"]." and not by me (".$mypid.") - skip this execution", LOGGER_DEBUG); logger("Queue item ".$queue["id"]." is to be executed by process ".$id[0]["pid"]." and not by me (".$mypid.") - skip this execution", LOGGER_DEBUG);
dba::commit();
return false; return false;
} }
dba::commit();
return true; return true;
} }

View File

@ -68,7 +68,7 @@ function post_update_1192() {
} }
// Set the "gcontact-id" in the item table and add a new gcontact entry if needed // Set the "gcontact-id" in the item table and add a new gcontact entry if needed
foreach($item_arr AS $item) { foreach ($item_arr AS $item) {
$gcontact_id = get_gcontact_id(array("url" => $item['author-link'], "network" => $item['network'], $gcontact_id = get_gcontact_id(array("url" => $item['author-link'], "network" => $item['network'],
"photo" => $item['author-avatar'], "name" => $item['author-name'])); "photo" => $item['author-avatar'], "name" => $item['author-name']));
q("UPDATE `item` SET `gcontact-id` = %d WHERE `uid` = %d AND `author-link` = '%s' AND `gcontact-id` = 0", q("UPDATE `item` SET `gcontact-id` = %d WHERE `uid` = %d AND `author-link` = '%s' AND `gcontact-id` = 0",
@ -204,7 +204,7 @@ function post_update_1198() {
} }
// Set the "gcontact-id" in the item table and add a new gcontact entry if needed // Set the "gcontact-id" in the item table and add a new gcontact entry if needed
foreach($item_arr AS $item) { foreach ($item_arr AS $item) {
$author_id = get_contact($item["author-link"], 0); $author_id = get_contact($item["author-link"], 0);
$owner_id = get_contact($item["owner-link"], 0); $owner_id = get_contact($item["owner-link"], 0);

View File

@ -8,8 +8,8 @@ function gender_selector($current="",$suffix="") {
call_hooks('gender_selector', $select); call_hooks('gender_selector', $select);
$o .= "<select name=\"gender$suffix\" id=\"gender-select$suffix\" size=\"1\" >"; $o .= "<select name=\"gender$suffix\" id=\"gender-select$suffix\" size=\"1\" >";
foreach($select as $selection) { foreach ($select as $selection) {
if($selection !== 'NOTRANSLATION') { if ($selection !== 'NOTRANSLATION') {
$selected = (($selection == $current) ? ' selected="selected" ' : ''); $selected = (($selection == $current) ? ' selected="selected" ' : '');
$o .= "<option value=\"$selection\" $selected >$selection</option>"; $o .= "<option value=\"$selection\" $selected >$selection</option>";
} }
@ -26,8 +26,8 @@ function sexpref_selector($current="",$suffix="") {
call_hooks('sexpref_selector', $select); call_hooks('sexpref_selector', $select);
$o .= "<select name=\"sexual$suffix\" id=\"sexual-select$suffix\" size=\"1\" >"; $o .= "<select name=\"sexual$suffix\" id=\"sexual-select$suffix\" size=\"1\" >";
foreach($select as $selection) { foreach ($select as $selection) {
if($selection !== 'NOTRANSLATION') { if ($selection !== 'NOTRANSLATION') {
$selected = (($selection == $current) ? ' selected="selected" ' : ''); $selected = (($selection == $current) ? ' selected="selected" ' : '');
$o .= "<option value=\"$selection\" $selected >$selection</option>"; $o .= "<option value=\"$selection\" $selected >$selection</option>";
} }
@ -44,8 +44,8 @@ function marital_selector($current="",$suffix="") {
call_hooks('marital_selector', $select); call_hooks('marital_selector', $select);
$o .= "<select name=\"marital\" id=\"marital-select\" size=\"1\" >"; $o .= "<select name=\"marital\" id=\"marital-select\" size=\"1\" >";
foreach($select as $selection) { foreach ($select as $selection) {
if($selection !== 'NOTRANSLATION') { if ($selection !== 'NOTRANSLATION') {
$selected = (($selection == $current) ? ' selected="selected" ' : ''); $selected = (($selection == $current) ? ' selected="selected" ' : '');
$o .= "<option value=\"$selection\" $selected >$selection</option>"; $o .= "<option value=\"$selection\" $selected >$selection</option>";
} }

View File

@ -30,10 +30,11 @@ function handle_pubsubhubbub($id) {
global $a; global $a;
$r = q("SELECT * FROM `push_subscriber` WHERE `id` = %d", intval($id)); $r = q("SELECT * FROM `push_subscriber` WHERE `id` = %d", intval($id));
if (!$r) if (!dbm::is_result($r)) {
return; return;
else }
$rr = $r[0];
$rr = $r[0];
/// @todo Check server status with poco_check_server() /// @todo Check server status with poco_check_server()
// Before this can be done we need a way to safely detect the server url. // Before this can be done we need a way to safely detect the server url.

View File

@ -32,7 +32,8 @@ function queue_run(&$argv, &$argc){
$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 (dbm::is_result($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);

View File

@ -49,23 +49,24 @@ function was_recently_delayed($cid) {
function add_to_queue($cid,$network,$msg,$batch = false) { function add_to_queue($cid,$network,$msg,$batch = false) {
$max_queue = get_config('system','max_contact_queue'); $max_queue = get_config('system','max_contact_queue');
if($max_queue < 1) if ($max_queue < 1) {
$max_queue = 500; $max_queue = 500;
}
$batch_queue = get_config('system','max_batch_queue'); $batch_queue = get_config('system','max_batch_queue');
if($batch_queue < 1) if ($batch_queue < 1) {
$batch_queue = 1000; $batch_queue = 1000;
}
$r = q("SELECT COUNT(*) AS `total` FROM `queue` INNER JOIN `contact` ON `queue`.`cid` = `contact`.`id` $r = q("SELECT COUNT(*) AS `total` FROM `queue` INNER JOIN `contact` ON `queue`.`cid` = `contact`.`id`
WHERE `queue`.`cid` = %d AND `contact`.`self` = 0 ", WHERE `queue`.`cid` = %d AND `contact`.`self` = 0 ",
intval($cid) intval($cid)
); );
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
if($batch && ($r[0]['total'] > $batch_queue)) { if ($batch && ($r[0]['total'] > $batch_queue)) {
logger('add_to_queue: too many queued items for batch server ' . $cid . ' - discarding message'); logger('add_to_queue: too many queued items for batch server ' . $cid . ' - discarding message');
return; return;
} } elseif ((! $batch) && ($r[0]['total'] > $max_queue)) {
elseif((! $batch) && ($r[0]['total'] > $max_queue)) {
logger('add_to_queue: too many queued items for contact ' . $cid . ' - discarding message'); logger('add_to_queue: too many queued items for contact ' . $cid . ' - discarding message');
return; return;
} }

View File

@ -83,7 +83,7 @@ function removetofu($message)
$start = 0; $start = 0;
while(($pos = strpos($message, '[quote', $start)) > 0) { while (($pos = strpos($message, '[quote', $start)) > 0) {
$quotes[$pos] = -1; $quotes[$pos] = -1;
$start = $pos + 7; $start = $pos + 7;
$startquotes++; $startquotes++;
@ -92,7 +92,7 @@ function removetofu($message)
$endquotes = 0; $endquotes = 0;
$start = 0; $start = 0;
while(($pos = strpos($message, '[/quote]', $start)) > 0) { while (($pos = strpos($message, '[/quote]', $start)) > 0) {
$start = $pos + 7; $start = $pos + 7;
$endquotes++; $endquotes++;
} }
@ -104,7 +104,7 @@ function removetofu($message)
$start = 0; $start = 0;
while(($pos = strpos($message, '[/quote]', $start)) > 0) { while (($pos = strpos($message, '[/quote]', $start)) > 0) {
$quotes[$pos] = 1; $quotes[$pos] = 1;
$start = $pos + 7; $start = $pos + 7;
} }

View File

@ -9,6 +9,7 @@ require_once('include/group.php');
require_once('mod/proxy.php'); require_once('mod/proxy.php');
require_once('include/xml.php'); require_once('include/xml.php');
require_once('include/cache.php'); require_once('include/cache.php');
require_once('include/enotify.php');
/** /**
* @brief Outputs the counts and the lists of various notifications * @brief Outputs the counts and the lists of various notifications

View File

@ -900,12 +900,12 @@ class App {
return; return;
} }
// If the last worker fork was less than 10 seconds before then don't fork another one. // If the last worker fork was less than 2 seconds before then don't fork another one.
// This should prevent the forking of masses of workers. // This should prevent the forking of masses of workers.
$cachekey = 'app:proc_run:started'; $cachekey = 'app:proc_run:started';
$result = Cache::get($cachekey); $result = Cache::get($cachekey);
if (!is_null($result) AND ( time() - $result) < 10) { if (!is_null($result) AND ( time() - $result) < 2) {
return; return;
} }

View File

@ -123,13 +123,13 @@ class Probe {
} }
if (!is_object($xrd)) { if (!is_object($xrd)) {
logger("No xrd object found for ".$host, LOGGER_DEBUG); logger("No xrd object found for ".$host, LOGGER_DEBUG);
return false; return array();
} }
$links = xml::element_to_array($xrd); $links = xml::element_to_array($xrd);
if (!isset($links["xrd"]["link"])) { if (!isset($links["xrd"]["link"])) {
logger("No xrd data found for ".$host, LOGGER_DEBUG); logger("No xrd data found for ".$host, LOGGER_DEBUG);
return false; return array();
} }
$xrd_data = array(); $xrd_data = array();
@ -222,6 +222,10 @@ class Probe {
$lrdd = self::xrd($uri); $lrdd = self::xrd($uri);
$webfinger = null; $webfinger = null;
if (is_bool($lrdd)) {
return array();
}
if (!$lrdd) { if (!$lrdd) {
$parts = @parse_url($uri); $parts = @parse_url($uri);
if (!$parts) { if (!$parts) {
@ -424,6 +428,10 @@ class Probe {
} }
$lrdd = self::xrd($host); $lrdd = self::xrd($host);
if (is_bool($lrdd)) {
return array();
}
$path_parts = explode("/", trim($parts["path"], "/")); $path_parts = explode("/", trim($parts["path"], "/"));
while (!$lrdd AND (sizeof($path_parts) > 1)) { while (!$lrdd AND (sizeof($path_parts) > 1)) {
@ -462,6 +470,10 @@ class Probe {
} }
$lrdd = self::xrd($host); $lrdd = self::xrd($host);
if (is_bool($lrdd)) {
return array();
}
if (!$lrdd) { if (!$lrdd) {
logger('No XRD data was found for '.$uri, LOGGER_DEBUG); logger('No XRD data was found for '.$uri, LOGGER_DEBUG);
return self::mail($uri, $uid); return self::mail($uri, $uid);

View File

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

View File

@ -13,6 +13,7 @@ Andreas H.
Andrej Stieben Andrej Stieben
André Alves André Alves
André Lohan André Lohan
Andy H3
Anthronaut Anthronaut
Arian - Cazare Muncitori Arian - Cazare Muncitori
Athalbert Athalbert

View File

@ -69,7 +69,7 @@ $a->config['system']['no_regfullname'] = true;
//$a->config['system']['block_local_dir'] = false; //$a->config['system']['block_local_dir'] = false;
// Location of the global directory // Location of the global directory
$a->config['system']['directory'] = 'http://dir.friendi.ca'; $a->config['system']['directory'] = 'http://dir.friendica.social';
// turn on friendica's log // turn on friendica's log
$a->config['system']['debugging'] = true; $a->config['system']['debugging'] = true;

File diff suppressed because it is too large Load Diff

View File

@ -544,7 +544,7 @@ $a->strings["New Message"] = "New Message";
$a->strings["Manage"] = "Manage"; $a->strings["Manage"] = "Manage";
$a->strings["Manage other pages"] = "Manage other pages"; $a->strings["Manage other pages"] = "Manage other pages";
$a->strings["Delegations"] = "Delegations"; $a->strings["Delegations"] = "Delegations";
$a->strings["Delegate Page Management"] = "Delegate page management"; $a->strings["Delegate Page Management"] = "Delegate Page Management";
$a->strings["Settings"] = "Settings"; $a->strings["Settings"] = "Settings";
$a->strings["Account settings"] = "Account settings"; $a->strings["Account settings"] = "Account settings";
$a->strings["Profiles"] = "Profiles"; $a->strings["Profiles"] = "Profiles";
@ -644,10 +644,10 @@ $a->strings["Hobbies/Interests:"] = "Hobbies/Interests:";
$a->strings["Likes:"] = "Likes:"; $a->strings["Likes:"] = "Likes:";
$a->strings["Dislikes:"] = "Dislikes:"; $a->strings["Dislikes:"] = "Dislikes:";
$a->strings["Contact information and Social Networks:"] = "Contact information and social networks:"; $a->strings["Contact information and Social Networks:"] = "Contact information and social networks:";
$a->strings["Musical interests:"] = "Musical interests:"; $a->strings["Musical interests:"] = "Music:";
$a->strings["Books, literature:"] = "Books/Literature:"; $a->strings["Books, literature:"] = "Books/Literature:";
$a->strings["Television:"] = "Television:"; $a->strings["Television:"] = "Television:";
$a->strings["Film/dance/culture/entertainment:"] = "Arts, film, dance, culture, entertainment:"; $a->strings["Film/dance/culture/entertainment:"] = "Arts, culture, entertainment:";
$a->strings["Love/Romance:"] = "Love/Romance:"; $a->strings["Love/Romance:"] = "Love/Romance:";
$a->strings["Work/employment:"] = "Work/Employment:"; $a->strings["Work/employment:"] = "Work/Employment:";
$a->strings["School/education:"] = "School/Education:"; $a->strings["School/education:"] = "School/Education:";
@ -772,7 +772,7 @@ $a->strings["Group: %s"] = "Group: %s";
$a->strings["This entry was edited"] = "This entry was edited"; $a->strings["This entry was edited"] = "This entry was edited";
$a->strings["%d comment"] = array( $a->strings["%d comment"] = array(
0 => "%d comment", 0 => "%d comment",
1 => "%d comments:", 1 => "%d comments -",
); );
$a->strings["Private Message"] = "Private message"; $a->strings["Private Message"] = "Private message";
$a->strings["I like this (toggle)"] = "I like this (toggle)"; $a->strings["I like this (toggle)"] = "I like this (toggle)";
@ -1271,7 +1271,7 @@ $a->strings["Choose a profile nickname. This must begin with a text character. Y
$a->strings["Choose a nickname: "] = "Choose a nickname: "; $a->strings["Choose a nickname: "] = "Choose a nickname: ";
$a->strings["Import"] = "Import profile"; $a->strings["Import"] = "Import profile";
$a->strings["Import your profile to this friendica instance"] = "Import an existing Friendica profile to this node."; $a->strings["Import your profile to this friendica instance"] = "Import an existing Friendica profile to this node.";
$a->strings["Remove My Account"] = "Remove my account"; $a->strings["Remove My Account"] = "Remove My Account";
$a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "This will completely remove your account. Once this has been done it is not recoverable."; $a->strings["This will completely remove your account. Once this has been done it is not recoverable."] = "This will completely remove your account. Once this has been done it is not recoverable.";
$a->strings["Please enter your password for verification:"] = "Please enter your password for verification:"; $a->strings["Please enter your password for verification:"] = "Please enter your password for verification:";
$a->strings["Resubscribing to OStatus contacts"] = "Resubscribing to OStatus contacts"; $a->strings["Resubscribing to OStatus contacts"] = "Resubscribing to OStatus contacts";
@ -1405,16 +1405,16 @@ $a->strings["Recipient Name"] = "Recipient name";
$a->strings["Recipient Profile"] = "Recipient profile"; $a->strings["Recipient Profile"] = "Recipient profile";
$a->strings["Created"] = "Created"; $a->strings["Created"] = "Created";
$a->strings["Last Tried"] = "Last Tried"; $a->strings["Last Tried"] = "Last Tried";
$a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = ""; $a->strings["This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently."] = "This page lists the content of the queue for outgoing postings. These are postings the initial delivery failed for. They will be resend later and eventually deleted if the delivery fails permanently.";
$a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href=\"%s\">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php include/dbstructure.php toinnodb</tt> of your Friendica installation for an automatic conversion.<br />"] = ""; $a->strings["Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href=\"%s\">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php include/dbstructure.php toinnodb</tt> of your Friendica installation for an automatic conversion.<br />"] = "Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href=\"%s\">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php include/dbstructure.php toinnodb</tt> of your Friendica installation for an automatic conversion.<br />";
$a->strings["The database update failed. Please run \"php include/dbstructure.php update\" from the command line and have a look at the errors that might appear."] = ""; $a->strings["The database update failed. Please run \"php include/dbstructure.php update\" from the command line and have a look at the errors that might appear."] = "The database update failed. Please run 'php include/dbstructure.php update' from the command line and have a look at the errors that might appear.";
$a->strings["Normal Account"] = "Standard account"; $a->strings["Normal Account"] = "Standard account";
$a->strings["Soapbox Account"] = "Soapbox account"; $a->strings["Soapbox Account"] = "Soapbox account";
$a->strings["Community/Celebrity Account"] = ""; $a->strings["Community/Celebrity Account"] = "Community/Celebrity account";
$a->strings["Automatic Friend Account"] = ""; $a->strings["Automatic Friend Account"] = "Automatic friend account";
$a->strings["Blog Account"] = ""; $a->strings["Blog Account"] = "Blog account";
$a->strings["Private Forum"] = ""; $a->strings["Private Forum"] = "Private forum";
$a->strings["Message queues"] = ""; $a->strings["Message queues"] = "Message queues";
$a->strings["Summary"] = "Summary"; $a->strings["Summary"] = "Summary";
$a->strings["Registered users"] = "Registered users"; $a->strings["Registered users"] = "Registered users";
$a->strings["Pending registrations"] = "Pending registrations"; $a->strings["Pending registrations"] = "Pending registrations";
@ -1445,7 +1445,7 @@ $a->strings["Self-signed certificate, use SSL for local links only (discouraged)
$a->strings["Save Settings"] = "Save settings"; $a->strings["Save Settings"] = "Save settings";
$a->strings["File upload"] = "File upload"; $a->strings["File upload"] = "File upload";
$a->strings["Policies"] = "Policies"; $a->strings["Policies"] = "Policies";
$a->strings["Auto Discovered Contact Directory"] = ""; $a->strings["Auto Discovered Contact Directory"] = "Auto-discovered contact directory";
$a->strings["Performance"] = "Performance"; $a->strings["Performance"] = "Performance";
$a->strings["Worker"] = "Worker"; $a->strings["Worker"] = "Worker";
$a->strings["Relocate - WARNING: advanced function. Could make this server unreachable."] = "Relocate - Warning, advanced function: This could make this server unreachable."; $a->strings["Relocate - WARNING: advanced function. Could make this server unreachable."] = "Relocate - Warning, advanced function: This could make this server unreachable.";
@ -1476,195 +1476,195 @@ $a->strings["Make this instance multi-user or single-user for the named user"] =
$a->strings["Maximum image size"] = "Maximum image size"; $a->strings["Maximum image size"] = "Maximum image size";
$a->strings["Maximum size in bytes of uploaded images. Default is 0, which means no limits."] = "Maximum size in bytes of uploaded images. Default is 0, which means no limits."; $a->strings["Maximum size in bytes of uploaded images. Default is 0, which means no limits."] = "Maximum size in bytes of uploaded images. Default is 0, which means no limits.";
$a->strings["Maximum image length"] = "Maximum image length"; $a->strings["Maximum image length"] = "Maximum image length";
$a->strings["Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits."] = ""; $a->strings["Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits."] = "Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits.";
$a->strings["JPEG image quality"] = "JPEG image quality"; $a->strings["JPEG image quality"] = "JPEG image quality";
$a->strings["Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality."] = ""; $a->strings["Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality."] = "Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is the original quality level.";
$a->strings["Register policy"] = "Register policy"; $a->strings["Register policy"] = "Register policy";
$a->strings["Maximum Daily Registrations"] = ""; $a->strings["Maximum Daily Registrations"] = "Maximum daily registrations";
$a->strings["If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect."] = ""; $a->strings["If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect."] = "If registration is permitted above, this sets the maximum number of new user registrations to accept per day. If register is set to closed, this setting has no effect.";
$a->strings["Register text"] = ""; $a->strings["Register text"] = "Register text";
$a->strings["Will be displayed prominently on the registration page."] = ""; $a->strings["Will be displayed prominently on the registration page."] = "Will be displayed prominently on the registration page.";
$a->strings["Accounts abandoned after x days"] = ""; $a->strings["Accounts abandoned after x days"] = "Accounts abandoned after so many days";
$a->strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = ""; $a->strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = "Will not waste system resources polling external sites for abandoned accounts. Enter 0 for no time limit.";
$a->strings["Allowed friend domains"] = ""; $a->strings["Allowed friend domains"] = "Allowed friend domains";
$a->strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = ""; $a->strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = "Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Leave empty to allow any domains";
$a->strings["Allowed email domains"] = ""; $a->strings["Allowed email domains"] = "Allowed email domains";
$a->strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = ""; $a->strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Leave empty to allow any domains";
$a->strings["Block public"] = ""; $a->strings["Block public"] = "Block public";
$a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."] = ""; $a->strings["Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."] = "Block public access to all otherwise public personal pages on this site, except for local users when logged in.";
$a->strings["Force publish"] = ""; $a->strings["Force publish"] = "Mandatory directory listing";
$a->strings["Check to force all profiles on this site to be listed in the site directory."] = ""; $a->strings["Check to force all profiles on this site to be listed in the site directory."] = "Force all profiles on this site to be listed in the site directory.";
$a->strings["Global directory URL"] = "Global directory URL"; $a->strings["Global directory URL"] = "Global directory URL";
$a->strings["URL to the global directory. If this is not set, the global directory is completely unavailable to the application."] = "URL to the global directory: If this is not set, the global directory is completely unavailable to the application."; $a->strings["URL to the global directory. If this is not set, the global directory is completely unavailable to the application."] = "URL to the global directory: If this is not set, the global directory is completely unavailable to the application.";
$a->strings["Allow threaded items"] = ""; $a->strings["Allow threaded items"] = "Allow threaded items";
$a->strings["Allow infinite level threading for items on this site."] = ""; $a->strings["Allow infinite level threading for items on this site."] = "Allow infinite levels of threading for items on this site.";
$a->strings["Private posts by default for new users"] = ""; $a->strings["Private posts by default for new users"] = "Private posts by default for new users";
$a->strings["Set default post permissions for all new members to the default privacy group rather than public."] = ""; $a->strings["Set default post permissions for all new members to the default privacy group rather than public."] = "Set default post permissions for all new members to the default privacy group rather than public.";
$a->strings["Don't include post content in email notifications"] = ""; $a->strings["Don't include post content in email notifications"] = "Don't include post content in email notifications";
$a->strings["Don't include the content of a post/comment/private message/etc. in the email notifications that are sent out from this site, as a privacy measure."] = ""; $a->strings["Don't include the content of a post/comment/private message/etc. in the email notifications that are sent out from this site, as a privacy measure."] = "Don't include the content of a post/comment/private message in the email notifications sent from this site, as a privacy measure.";
$a->strings["Disallow public access to addons listed in the apps menu."] = ""; $a->strings["Disallow public access to addons listed in the apps menu."] = "Disallow public access to addons listed in the apps menu.";
$a->strings["Checking this box will restrict addons listed in the apps menu to members only."] = ""; $a->strings["Checking this box will restrict addons listed in the apps menu to members only."] = "Checking this box will restrict addons listed in the apps menu to members only.";
$a->strings["Don't embed private images in posts"] = ""; $a->strings["Don't embed private images in posts"] = "Don't embed private images in posts";
$a->strings["Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while."] = ""; $a->strings["Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while."] = "Don't replace locally-hosted private photos in posts with an embedded copy of the image. This means that contacts who receive posts containing private photos will have to authenticate and load each image, which may take a while.";
$a->strings["Allow Users to set remote_self"] = ""; $a->strings["Allow Users to set remote_self"] = "Allow users to set \"Remote self\"";
$a->strings["With checking this, every user is allowed to mark every contact as a remote_self in the repair contact dialog. Setting this flag on a contact causes mirroring every posting of that contact in the users stream."] = ""; $a->strings["With checking this, every user is allowed to mark every contact as a remote_self in the repair contact dialog. Setting this flag on a contact causes mirroring every posting of that contact in the users stream."] = "This allows every user to mark contacts as a \"Remote self\" in the repair contact dialogue. Setting this flag on a contact will mirror every posting of that contact in the users stream.";
$a->strings["Block multiple registrations"] = ""; $a->strings["Block multiple registrations"] = "Block multiple registrations";
$a->strings["Disallow users to register additional accounts for use as pages."] = ""; $a->strings["Disallow users to register additional accounts for use as pages."] = "Disallow users to register additional accounts for use as pages.";
$a->strings["OpenID support"] = ""; $a->strings["OpenID support"] = "OpenID support";
$a->strings["OpenID support for registration and logins."] = ""; $a->strings["OpenID support for registration and logins."] = "OpenID support for registration and logins.";
$a->strings["Fullname check"] = ""; $a->strings["Fullname check"] = "Full name check";
$a->strings["Force users to register with a space between firstname and lastname in Full name, as an antispam measure"] = ""; $a->strings["Force users to register with a space between firstname and lastname in Full name, as an antispam measure"] = "Force users to register with a space between first name and last name in the full name field; it may reduce spam and abuse registrations.";
$a->strings["Community Page Style"] = ""; $a->strings["Community Page Style"] = "Community page style";
$a->strings["Type of community page to show. 'Global community' shows every public posting from an open distributed network that arrived on this server."] = ""; $a->strings["Type of community page to show. 'Global community' shows every public posting from an open distributed network that arrived on this server."] = "Type of community page to show. 'Global community' shows every public posting from an open distributed network that arrived on this server.";
$a->strings["Posts per user on community page"] = ""; $a->strings["Posts per user on community page"] = "Posts per user on community page";
$a->strings["The maximum number of posts per user on the community page. (Not valid for 'Global Community')"] = ""; $a->strings["The maximum number of posts per user on the community page. (Not valid for 'Global Community')"] = "Maximum number of posts per user on the community page (not valid for 'Global Community').";
$a->strings["Enable OStatus support"] = ""; $a->strings["Enable OStatus support"] = "Enable OStatus support";
$a->strings["Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."] = ""; $a->strings["Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."] = "Provide built-in OStatus (StatusNet, GNU Social, etc.) compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.";
$a->strings["OStatus conversation completion interval"] = ""; $a->strings["OStatus conversation completion interval"] = "OStatus conversation completion interval";
$a->strings["How often shall the poller check for new entries in OStatus conversations? This can be a very ressource task."] = ""; $a->strings["How often shall the poller check for new entries in OStatus conversations? This can be a very ressource task."] = "How often shall the poller check for new entries in OStatus conversations? This can be rather resources consuming.";
$a->strings["Only import OStatus threads from our contacts"] = ""; $a->strings["Only import OStatus threads from our contacts"] = "Only import OStatus threads from known contacts";
$a->strings["Normally we import every content from our OStatus contacts. With this option we only store threads that are started by a contact that is known on our system."] = ""; $a->strings["Normally we import every content from our OStatus contacts. With this option we only store threads that are started by a contact that is known on our system."] = "Normally we import every content from our OStatus contacts. With this option we only store threads that are started by a contact that is known on our system.";
$a->strings["OStatus support can only be enabled if threading is enabled."] = ""; $a->strings["OStatus support can only be enabled if threading is enabled."] = "OStatus support can only be enabled if threading is enabled.";
$a->strings["Diaspora support can't be enabled because Friendica was installed into a sub directory."] = ""; $a->strings["Diaspora support can't be enabled because Friendica was installed into a sub directory."] = "Diaspora support can't be enabled because Friendica was installed into a sub directory.";
$a->strings["Enable Diaspora support"] = ""; $a->strings["Enable Diaspora support"] = "Enable Diaspora support";
$a->strings["Provide built-in Diaspora network compatibility."] = ""; $a->strings["Provide built-in Diaspora network compatibility."] = "Provide built-in Diaspora network compatibility.";
$a->strings["Only allow Friendica contacts"] = ""; $a->strings["Only allow Friendica contacts"] = "Only allow Friendica contacts";
$a->strings["All contacts must use Friendica protocols. All other built-in communication protocols disabled."] = ""; $a->strings["All contacts must use Friendica protocols. All other built-in communication protocols disabled."] = "All contacts must use Friendica protocols. All other built-in communication protocols will be disabled.";
$a->strings["Verify SSL"] = ""; $a->strings["Verify SSL"] = "Verify SSL";
$a->strings["If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites."] = ""; $a->strings["If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites."] = "If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.";
$a->strings["Proxy user"] = ""; $a->strings["Proxy user"] = "Proxy user";
$a->strings["Proxy URL"] = "Proxy URL"; $a->strings["Proxy URL"] = "Proxy URL";
$a->strings["Network timeout"] = ""; $a->strings["Network timeout"] = "Network timeout";
$a->strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = ""; $a->strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = "Value is in seconds. Set to 0 for unlimited (not recommended).";
$a->strings["Maximum Load Average"] = ""; $a->strings["Maximum Load Average"] = "Maximum load average";
$a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = ""; $a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Maximum system load before delivery and poll processes are deferred (default 50).";
$a->strings["Maximum Load Average (Frontend)"] = ""; $a->strings["Maximum Load Average (Frontend)"] = "Maximum load average (frontend)";
$a->strings["Maximum system load before the frontend quits service - default 50."] = ""; $a->strings["Maximum system load before the frontend quits service - default 50."] = "Maximum system load before the frontend quits service (default 50).";
$a->strings["Minimal Memory"] = ""; $a->strings["Minimal Memory"] = "Minimal memory";
$a->strings["Minimal free memory in MB for the poller. Needs access to /proc/meminfo - default 0 (deactivated)."] = ""; $a->strings["Minimal free memory in MB for the poller. Needs access to /proc/meminfo - default 0 (deactivated)."] = "Minimal free memory in MB for the poller. Needs access to /proc/meminfo (default 0 - deactivated).";
$a->strings["Maximum table size for optimization"] = ""; $a->strings["Maximum table size for optimization"] = "Maximum table size for optimization";
$a->strings["Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it."] = ""; $a->strings["Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it."] = "Maximum table size (in MB) for the automatic optimization (default 100 MB; -1 to deactivate).";
$a->strings["Minimum level of fragmentation"] = ""; $a->strings["Minimum level of fragmentation"] = "Minimum level of fragmentation";
$a->strings["Minimum fragmenation level to start the automatic optimization - default value is 30%."] = ""; $a->strings["Minimum fragmenation level to start the automatic optimization - default value is 30%."] = "Minimum fragmentation level to start the automatic optimization (default 30%).";
$a->strings["Periodical check of global contacts"] = ""; $a->strings["Periodical check of global contacts"] = "Periodical check of global contacts";
$a->strings["If enabled, the global contacts are checked periodically for missing or outdated data and the vitality of the contacts and servers."] = ""; $a->strings["If enabled, the global contacts are checked periodically for missing or outdated data and the vitality of the contacts and servers."] = "This checks global contacts periodically for missing or outdated data and the vitality of the contacts and servers.";
$a->strings["Days between requery"] = ""; $a->strings["Days between requery"] = "Days between enquiry";
$a->strings["Number of days after which a server is requeried for his contacts."] = ""; $a->strings["Number of days after which a server is requeried for his contacts."] = "Number of days after which a server is required check contacts.";
$a->strings["Discover contacts from other servers"] = ""; $a->strings["Discover contacts from other servers"] = "Discover contacts from other servers";
$a->strings["Periodically query other servers for contacts. You can choose between 'users': the users on the remote system, 'Global Contacts': active contacts that are known on the system. The fallback is meant for Redmatrix servers and older friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommened setting is 'Users, Global Contacts'."] = "Periodically query other servers for contacts. You can choose between 'Users': the users on the remote system, 'Global Contacts': active contacts that are known on the system. The fallback is meant for Redmatrix servers and older Friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommend setting is 'Users, Global Contacts'."; $a->strings["Periodically query other servers for contacts. You can choose between 'users': the users on the remote system, 'Global Contacts': active contacts that are known on the system. The fallback is meant for Redmatrix servers and older friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommened setting is 'Users, Global Contacts'."] = "Periodically query other servers for contacts. You can choose between 'Users': the users on the remote system, 'Global Contacts': active contacts that are known on the system. The fallback is meant for Redmatrix servers and older Friendica servers, where global contacts weren't available. The fallback increases the server load, so the recommend setting is 'Users, Global Contacts'.";
$a->strings["Timeframe for fetching global contacts"] = ""; $a->strings["Timeframe for fetching global contacts"] = "Time-frame for fetching global contacts";
$a->strings["When the discovery is activated, this value defines the timeframe for the activity of the global contacts that are fetched from other servers."] = ""; $a->strings["When the discovery is activated, this value defines the timeframe for the activity of the global contacts that are fetched from other servers."] = "If discovery is activated, this value defines the time-frame for the activity of the global contacts that are fetched from other servers.";
$a->strings["Search the local directory"] = ""; $a->strings["Search the local directory"] = "Search the local directory";
$a->strings["Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated."] = ""; $a->strings["Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated."] = "Search the local directory instead of the global directory. When searching locally, every search will be executed on the global directory in the background. This improves the search results when the search is repeated.";
$a->strings["Publish server information"] = ""; $a->strings["Publish server information"] = "Publish server information";
$a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See <a href='http://the-federation.info/'>the-federation.info</a> for details."] = ""; $a->strings["If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See <a href='http://the-federation.info/'>the-federation.info</a> for details."] = "This publishes generic data about the server and its usage. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See <a href='http://the-federation.info/'>the-federation.info</a> for details.";
$a->strings["Suppress Tags"] = ""; $a->strings["Suppress Tags"] = "Suppress tags";
$a->strings["Suppress showing a list of hashtags at the end of the posting."] = ""; $a->strings["Suppress showing a list of hashtags at the end of the posting."] = "Suppress listed hashtags at the end of posts.";
$a->strings["Path to item cache"] = ""; $a->strings["Path to item cache"] = "Path to item cache";
$a->strings["The item caches buffers generated bbcode and external images."] = ""; $a->strings["The item caches buffers generated bbcode and external images."] = "The item caches buffers generated bbcode and external images.";
$a->strings["Cache duration in seconds"] = ""; $a->strings["Cache duration in seconds"] = "Cache duration in seconds";
$a->strings["How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1."] = ""; $a->strings["How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1."] = "How long should cache files be held? (Default 86400 seconds - one day; -1 disables item cache)";
$a->strings["Maximum numbers of comments per post"] = ""; $a->strings["Maximum numbers of comments per post"] = "Maximum numbers of comments per post";
$a->strings["How much comments should be shown for each post? Default value is 100."] = ""; $a->strings["How much comments should be shown for each post? Default value is 100."] = "How many comments should be shown for each post? (Default 100)";
$a->strings["Temp path"] = ""; $a->strings["Temp path"] = "Temp path";
$a->strings["If you have a restricted system where the webserver can't access the system temp path, enter another path here."] = ""; $a->strings["If you have a restricted system where the webserver can't access the system temp path, enter another path here."] = "Enter a different tmp path, if your system restricts the webserver's access to the system temp path.";
$a->strings["Base path to installation"] = ""; $a->strings["Base path to installation"] = "Base path to installation";
$a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = ""; $a->strings["If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."] = "If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot.";
$a->strings["Disable picture proxy"] = ""; $a->strings["Disable picture proxy"] = "Disable picture proxy";
$a->strings["The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith."] = ""; $a->strings["The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith."] = "The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith.";
$a->strings["Only search in tags"] = ""; $a->strings["Only search in tags"] = "Only search in tags";
$a->strings["On large systems the text search can slow down the system extremely."] = ""; $a->strings["On large systems the text search can slow down the system extremely."] = "On large systems the text search can slow down the system significantly.";
$a->strings["New base url"] = "New base URL"; $a->strings["New base url"] = "New base URL";
$a->strings["Change base url for this server. Sends relocate message to all DFRN contacts of all users."] = "Change base URL for this server. Sends relocate message to all DFRN contacts of all users."; $a->strings["Change base url for this server. Sends relocate message to all DFRN contacts of all users."] = "Change base URL for this server. Sends relocate message to all DFRN contacts of all users.";
$a->strings["RINO Encryption"] = ""; $a->strings["RINO Encryption"] = "RINO Encryption";
$a->strings["Encryption layer between nodes."] = ""; $a->strings["Encryption layer between nodes."] = "Encryption layer between nodes.";
$a->strings["Maximum number of parallel workers"] = ""; $a->strings["Maximum number of parallel workers"] = "Maximum number of parallel workers";
$a->strings["On shared hosters set this to 2. On larger systems, values of 10 are great. Default value is 4."] = ""; $a->strings["On shared hosters set this to 2. On larger systems, values of 10 are great. Default value is 4."] = "On shared hosters set this to 2. On larger systems, values of 10 are great. Default value is 4.";
$a->strings["Don't use 'proc_open' with the worker"] = ""; $a->strings["Don't use 'proc_open' with the worker"] = "Don't use 'proc_open' with the worker";
$a->strings["Enable this if your system doesn't allow the use of 'proc_open'. This can happen on shared hosters. If this is enabled you should increase the frequency of poller calls in your crontab."] = ""; $a->strings["Enable this if your system doesn't allow the use of 'proc_open'. This can happen on shared hosters. If this is enabled you should increase the frequency of poller calls in your crontab."] = "Enable this if your system doesn't allow the use of 'proc_open'. This can happen on shared hosts. If this is enabled you should increase the frequency of poller calls in your crontab.";
$a->strings["Enable fastlane"] = ""; $a->strings["Enable fastlane"] = "Enable fast-lane";
$a->strings["When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority."] = ""; $a->strings["When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority."] = "The fast-lane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority.";
$a->strings["Enable frontend worker"] = ""; $a->strings["Enable frontend worker"] = "Enable frontend worker";
$a->strings["When enabled the Worker process is triggered when backend access is performed (e.g. messages being delivered). On smaller sites you might want to call yourdomain.tld/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server. The worker background process needs to be activated for this."] = ""; $a->strings["When enabled the Worker process is triggered when backend access is performed (e.g. messages being delivered). On smaller sites you might want to call yourdomain.tld/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server. The worker background process needs to be activated for this."] = "If enabled the Worker process is triggered when backend access is performed (e.g. messages being delivered). On smaller sites you might want to call yourdomain.tld/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server. The worker background process needs to be activated for this.";
$a->strings["Update has been marked successful"] = ""; $a->strings["Update has been marked successful"] = "Update has been marked successful";
$a->strings["Database structure update %s was successfully applied."] = ""; $a->strings["Database structure update %s was successfully applied."] = "Database structure update %s was successfully applied.";
$a->strings["Executing of database structure update %s failed with error: %s"] = ""; $a->strings["Executing of database structure update %s failed with error: %s"] = "Executing of database structure update %s failed with error: %s";
$a->strings["Executing %s failed with error: %s"] = ""; $a->strings["Executing %s failed with error: %s"] = "Executing %s failed with error: %s";
$a->strings["Update %s was successfully applied."] = ""; $a->strings["Update %s was successfully applied."] = "Update %s was successfully applied.";
$a->strings["Update %s did not return a status. Unknown if it succeeded."] = ""; $a->strings["Update %s did not return a status. Unknown if it succeeded."] = "Update %s did not return a status. Unknown if it succeeded.";
$a->strings["There was no additional update function %s that needed to be called."] = ""; $a->strings["There was no additional update function %s that needed to be called."] = "There was no additional update function %s that needed to be called.";
$a->strings["No failed updates."] = ""; $a->strings["No failed updates."] = "No failed updates.";
$a->strings["Check database structure"] = ""; $a->strings["Check database structure"] = "Check database structure";
$a->strings["Failed Updates"] = ""; $a->strings["Failed Updates"] = "Failed updates";
$a->strings["This does not include updates prior to 1139, which did not return a status."] = ""; $a->strings["This does not include updates prior to 1139, which did not return a status."] = "This does not include updates prior to 1139, which did not return a status.";
$a->strings["Mark success (if update was manually applied)"] = ""; $a->strings["Mark success (if update was manually applied)"] = "Mark success (if update was manually applied)";
$a->strings["Attempt to execute this update step automatically"] = ""; $a->strings["Attempt to execute this update step automatically"] = "Attempt to execute this update step automatically";
$a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = ""; $a->strings["\n\t\t\tDear %1\$s,\n\t\t\t\tthe administrator of %2\$s has set up an account for you."] = "\n\t\t\tDear %1\$s,\n\t\t\t\tThe administrator of %2\$s has set up an account for you.";
$a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tThank you and welcome to %4\$s."] = ""; $a->strings["\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy, and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, they may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tThank you and welcome to %4\$s."] = "\n\t\t\tThe login details are as follows:\n\n\t\t\tSite Location:\t%1\$s\n\t\t\tLogin Name:\t\t%2\$s\n\t\t\tPassword:\t\t%3\$s\n\n\t\t\tYou may change your password from your account \"Settings\" page after logging\n\t\t\tin.\n\n\t\t\tPlease take a few moments to review the other account settings on that page.\n\n\t\t\tYou may also wish to add some basic information to your default profile\n\t\t\t(on the \"Profiles\" page) so that other people can easily find you.\n\n\t\t\tWe recommend setting your full name, adding a profile photo,\n\t\t\tadding some profile \"keywords\" (very useful in making new friends) - and\n\t\t\tperhaps what country you live in; if you do not wish to be more specific\n\t\t\tthan that.\n\n\t\t\tWe fully respect your right to privacy and none of these items are necessary.\n\t\t\tIf you are new and do not know anybody here, this may help\n\t\t\tyou to make some new and interesting friends.\n\n\t\t\tThank you and welcome to %4\$s.";
$a->strings["%s user blocked/unblocked"] = array( $a->strings["%s user blocked/unblocked"] = array(
0 => "", 0 => "%s user blocked/unblocked",
1 => "", 1 => "%s users blocked/unblocked",
); );
$a->strings["%s user deleted"] = array( $a->strings["%s user deleted"] = array(
0 => "", 0 => "%s user deleted",
1 => "", 1 => "%s users deleted",
); );
$a->strings["User '%s' deleted"] = ""; $a->strings["User '%s' deleted"] = "User '%s' deleted";
$a->strings["User '%s' unblocked"] = ""; $a->strings["User '%s' unblocked"] = "User '%s' unblocked";
$a->strings["User '%s' blocked"] = ""; $a->strings["User '%s' blocked"] = "User '%s' blocked";
$a->strings["Register date"] = ""; $a->strings["Register date"] = "Register date";
$a->strings["Last login"] = ""; $a->strings["Last login"] = "Last login";
$a->strings["Last item"] = ""; $a->strings["Last item"] = "Last item";
$a->strings["Account"] = ""; $a->strings["Account"] = "Account";
$a->strings["Add User"] = ""; $a->strings["Add User"] = "Add user";
$a->strings["select all"] = ""; $a->strings["select all"] = "select all";
$a->strings["User registrations waiting for confirm"] = ""; $a->strings["User registrations waiting for confirm"] = "User registrations awaiting confirmation";
$a->strings["User waiting for permanent deletion"] = ""; $a->strings["User waiting for permanent deletion"] = "User awaiting permanent deletion";
$a->strings["Request date"] = ""; $a->strings["Request date"] = "Request date";
$a->strings["No registrations."] = ""; $a->strings["No registrations."] = "No registrations.";
$a->strings["Note from the user"] = ""; $a->strings["Note from the user"] = "Note from the user";
$a->strings["Deny"] = ""; $a->strings["Deny"] = "Deny";
$a->strings["Block"] = "Block"; $a->strings["Block"] = "Block";
$a->strings["Unblock"] = "Unblock"; $a->strings["Unblock"] = "Unblock";
$a->strings["Site admin"] = ""; $a->strings["Site admin"] = "Site admin";
$a->strings["Account expired"] = ""; $a->strings["Account expired"] = "Account expired";
$a->strings["New User"] = ""; $a->strings["New User"] = "New user";
$a->strings["Deleted since"] = ""; $a->strings["Deleted since"] = "Deleted since";
$a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = ""; $a->strings["Selected users will be deleted!\\n\\nEverything these users had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "Selected users will be deleted!\\n\\nEverything these users has posted on this site will be permanently deleted!\\n\\nAre you sure?";
$a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = ""; $a->strings["The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "The user {0} will be deleted!\\n\\nEverything this user has posted on this site will be permanently deleted!\\n\\nAre you sure?";
$a->strings["Name of the new user."] = ""; $a->strings["Name of the new user."] = "Name of the new user.";
$a->strings["Nickname"] = ""; $a->strings["Nickname"] = "Nickname";
$a->strings["Nickname of the new user."] = ""; $a->strings["Nickname of the new user."] = "Nickname of the new user.";
$a->strings["Email address of the new user."] = ""; $a->strings["Email address of the new user."] = "Email address of the new user.";
$a->strings["Plugin %s disabled."] = ""; $a->strings["Plugin %s disabled."] = "Plugin %s disabled.";
$a->strings["Plugin %s enabled."] = ""; $a->strings["Plugin %s enabled."] = "Plugin %s enabled.";
$a->strings["Disable"] = ""; $a->strings["Disable"] = "Disable";
$a->strings["Enable"] = ""; $a->strings["Enable"] = "Enable";
$a->strings["Toggle"] = ""; $a->strings["Toggle"] = "Toggle";
$a->strings["Author: "] = ""; $a->strings["Author: "] = "Author: ";
$a->strings["Maintainer: "] = ""; $a->strings["Maintainer: "] = "Maintainer: ";
$a->strings["Reload active plugins"] = ""; $a->strings["Reload active plugins"] = "Reload active plugins";
$a->strings["There are currently no plugins available on your node. You can find the official plugin repository at %1\$s and might find other interesting plugins in the open plugin registry at %2\$s"] = ""; $a->strings["There are currently no plugins available on your node. You can find the official plugin repository at %1\$s and might find other interesting plugins in the open plugin registry at %2\$s"] = "There are currently no plugins available on your node. You can find the official plugin repository at %1\$s and might find other interesting plugins in the open plugin registry at %2\$s";
$a->strings["No themes found."] = ""; $a->strings["No themes found."] = "No themes found.";
$a->strings["Screenshot"] = ""; $a->strings["Screenshot"] = "Screenshot";
$a->strings["Reload active themes"] = ""; $a->strings["Reload active themes"] = "Reload active themes";
$a->strings["No themes found on the system. They should be paced in %1\$s"] = ""; $a->strings["No themes found on the system. They should be paced in %1\$s"] = "No themes found on the system. They should be paced in %1\$s";
$a->strings["[Experimental]"] = ""; $a->strings["[Experimental]"] = "[Experimental]";
$a->strings["[Unsupported]"] = ""; $a->strings["[Unsupported]"] = "[Unsupported]";
$a->strings["Log settings updated."] = ""; $a->strings["Log settings updated."] = "Log settings updated.";
$a->strings["PHP log currently enabled."] = ""; $a->strings["PHP log currently enabled."] = "PHP log currently enabled.";
$a->strings["PHP log currently disabled."] = ""; $a->strings["PHP log currently disabled."] = "PHP log currently disabled.";
$a->strings["Clear"] = ""; $a->strings["Clear"] = "Clear";
$a->strings["Enable Debugging"] = ""; $a->strings["Enable Debugging"] = "Enable debugging";
$a->strings["Log file"] = ""; $a->strings["Log file"] = "Log file";
$a->strings["Must be writable by web server. Relative to your Friendica top-level directory."] = ""; $a->strings["Must be writable by web server. Relative to your Friendica top-level directory."] = "Must be writable by web server and relative to your Friendica top-level directory.";
$a->strings["Log level"] = ""; $a->strings["Log level"] = "Log level";
$a->strings["PHP logging"] = ""; $a->strings["PHP logging"] = "PHP logging";
$a->strings["To enable logging of PHP errors and warnings you can add the following to the .htconfig.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."] = ""; $a->strings["To enable logging of PHP errors and warnings you can add the following to the .htconfig.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."] = "To enable logging of PHP errors and warnings you can add the following to the .htconfig.php file of your installation. The file name set in the 'error_log' line is relative to the Friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them.";
$a->strings["Off"] = ""; $a->strings["Off"] = "Off";
$a->strings["On"] = ""; $a->strings["On"] = "On";
$a->strings["Lock feature %s"] = ""; $a->strings["Lock feature %s"] = "Lock feature %s";
$a->strings["Manage Additional Features"] = ""; $a->strings["Manage Additional Features"] = "Manage additional features";
$a->strings["%d contact edited."] = array( $a->strings["%d contact edited."] = array(
0 => "%d contact edited.", 0 => "%d contact edited.",
1 => "%d contacts edited.", 1 => "%d contacts edited.",
@ -1759,165 +1759,165 @@ $a->strings["Please adjust the image cropping for optimum viewing."] = "Please a
$a->strings["Done Editing"] = "Done editing"; $a->strings["Done Editing"] = "Done editing";
$a->strings["Image uploaded successfully."] = "Image uploaded successfully."; $a->strings["Image uploaded successfully."] = "Image uploaded successfully.";
$a->strings["Profile deleted."] = "Profile deleted."; $a->strings["Profile deleted."] = "Profile deleted.";
$a->strings["Profile-"] = ""; $a->strings["Profile-"] = "Profile-";
$a->strings["New profile created."] = ""; $a->strings["New profile created."] = "New profile created.";
$a->strings["Profile unavailable to clone."] = ""; $a->strings["Profile unavailable to clone."] = "Profile unavailable to clone.";
$a->strings["Profile Name is required."] = ""; $a->strings["Profile Name is required."] = "Profile name is required.";
$a->strings["Marital Status"] = ""; $a->strings["Marital Status"] = "Marital status";
$a->strings["Romantic Partner"] = ""; $a->strings["Romantic Partner"] = "Romantic partner";
$a->strings["Work/Employment"] = ""; $a->strings["Work/Employment"] = "Work/Employment:";
$a->strings["Religion"] = ""; $a->strings["Religion"] = "Religion";
$a->strings["Political Views"] = ""; $a->strings["Political Views"] = "Political views";
$a->strings["Gender"] = ""; $a->strings["Gender"] = "Gender";
$a->strings["Sexual Preference"] = ""; $a->strings["Sexual Preference"] = "Sexual preference";
$a->strings["XMPP"] = ""; $a->strings["XMPP"] = "XMPP";
$a->strings["Homepage"] = "Homepage"; $a->strings["Homepage"] = "Homepage";
$a->strings["Interests"] = ""; $a->strings["Interests"] = "Interests";
$a->strings["Address"] = ""; $a->strings["Address"] = "Address";
$a->strings["Location"] = ""; $a->strings["Location"] = "Location";
$a->strings["Profile updated."] = ""; $a->strings["Profile updated."] = "Profile updated.";
$a->strings[" and "] = ""; $a->strings[" and "] = " and ";
$a->strings["public profile"] = ""; $a->strings["public profile"] = "public profile";
$a->strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = ""; $a->strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = "%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;";
$a->strings[" - Visit %1\$s's %2\$s"] = ""; $a->strings[" - Visit %1\$s's %2\$s"] = " - Visit %1\$s's %2\$s";
$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = ""; $a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s has an updated %2\$s, changing %3\$s.";
$a->strings["Hide contacts and friends:"] = ""; $a->strings["Hide contacts and friends:"] = "Hide contacts and friends:";
$a->strings["Hide your contact/friend list from viewers of this profile?"] = ""; $a->strings["Hide your contact/friend list from viewers of this profile?"] = "Hide your contact/friend list from viewers of this profile?";
$a->strings["Show more profile fields:"] = ""; $a->strings["Show more profile fields:"] = "Show more profile fields:";
$a->strings["Profile Actions"] = ""; $a->strings["Profile Actions"] = "Profile actions";
$a->strings["Edit Profile Details"] = ""; $a->strings["Edit Profile Details"] = "Edit Profile Details";
$a->strings["Change Profile Photo"] = ""; $a->strings["Change Profile Photo"] = "Change profile photo";
$a->strings["View this profile"] = ""; $a->strings["View this profile"] = "View this profile";
$a->strings["Create a new profile using these settings"] = ""; $a->strings["Create a new profile using these settings"] = "Create a new profile using these settings";
$a->strings["Clone this profile"] = ""; $a->strings["Clone this profile"] = "Clone this profile";
$a->strings["Delete this profile"] = ""; $a->strings["Delete this profile"] = "Delete this profile";
$a->strings["Basic information"] = ""; $a->strings["Basic information"] = "Basic information";
$a->strings["Profile picture"] = ""; $a->strings["Profile picture"] = "Profile picture";
$a->strings["Preferences"] = ""; $a->strings["Preferences"] = "Preferences";
$a->strings["Status information"] = ""; $a->strings["Status information"] = "Status information";
$a->strings["Additional information"] = ""; $a->strings["Additional information"] = "Additional information";
$a->strings["Relation"] = ""; $a->strings["Relation"] = "Relation";
$a->strings["Your Gender:"] = ""; $a->strings["Your Gender:"] = "Gender:";
$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = ""; $a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Marital status:";
$a->strings["Example: fishing photography software"] = ""; $a->strings["Example: fishing photography software"] = "Example: fishing photography software";
$a->strings["Profile Name:"] = ""; $a->strings["Profile Name:"] = "Profile name:";
$a->strings["This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet."] = ""; $a->strings["This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet."] = "This is your <strong>public</strong> profile.<br />It <strong>may</strong> be visible to anybody using the internet.";
$a->strings["Your Full Name:"] = ""; $a->strings["Your Full Name:"] = "My full name:";
$a->strings["Title/Description:"] = ""; $a->strings["Title/Description:"] = "Title/Description:";
$a->strings["Street Address:"] = ""; $a->strings["Street Address:"] = "Street address:";
$a->strings["Locality/City:"] = ""; $a->strings["Locality/City:"] = "Locality/City:";
$a->strings["Region/State:"] = ""; $a->strings["Region/State:"] = "Region/State:";
$a->strings["Postal/Zip Code:"] = ""; $a->strings["Postal/Zip Code:"] = "Postcode:";
$a->strings["Country:"] = ""; $a->strings["Country:"] = "Country:";
$a->strings["Who: (if applicable)"] = ""; $a->strings["Who: (if applicable)"] = "Who: (if applicable)";
$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = ""; $a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Examples: cathy123, Cathy Williams, cathy@example.com";
$a->strings["Since [date]:"] = ""; $a->strings["Since [date]:"] = "Since when:";
$a->strings["Tell us about yourself..."] = ""; $a->strings["Tell us about yourself..."] = "About myself:";
$a->strings["XMPP (Jabber) address:"] = ""; $a->strings["XMPP (Jabber) address:"] = "XMPP (Jabber) address:";
$a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = ""; $a->strings["The XMPP address will be propagated to your contacts so that they can follow you."] = "The XMPP address will be propagated to your contacts so that they can follow you.";
$a->strings["Homepage URL:"] = "Homepage URL:"; $a->strings["Homepage URL:"] = "Homepage URL:";
$a->strings["Religious Views:"] = ""; $a->strings["Religious Views:"] = "Religious views:";
$a->strings["Public Keywords:"] = ""; $a->strings["Public Keywords:"] = "Public keywords:";
$a->strings["(Used for suggesting potential friends, can be seen by others)"] = ""; $a->strings["(Used for suggesting potential friends, can be seen by others)"] = "Used for suggesting potential friends, can be seen by others.";
$a->strings["Private Keywords:"] = ""; $a->strings["Private Keywords:"] = "Private keywords:";
$a->strings["(Used for searching profiles, never shown to others)"] = ""; $a->strings["(Used for searching profiles, never shown to others)"] = "Used for searching profiles, never shown to others.";
$a->strings["Musical interests"] = ""; $a->strings["Musical interests"] = "Music:";
$a->strings["Books, literature"] = ""; $a->strings["Books, literature"] = "Books, literature, poetry:";
$a->strings["Television"] = ""; $a->strings["Television"] = "Television:";
$a->strings["Film/dance/culture/entertainment"] = ""; $a->strings["Film/dance/culture/entertainment"] = "Film, dance, culture, entertainment";
$a->strings["Hobbies/Interests"] = ""; $a->strings["Hobbies/Interests"] = "Hobbies/Interests:";
$a->strings["Love/romance"] = ""; $a->strings["Love/romance"] = "Love/Romance:";
$a->strings["Work/employment"] = ""; $a->strings["Work/employment"] = "Work/Employment:";
$a->strings["School/education"] = ""; $a->strings["School/education"] = "School/Education:";
$a->strings["Contact information and Social Networks"] = ""; $a->strings["Contact information and Social Networks"] = "Contact information and other social networks:";
$a->strings["Edit/Manage Profiles"] = ""; $a->strings["Edit/Manage Profiles"] = "Edit/Manage Profiles";
$a->strings["Display"] = ""; $a->strings["Display"] = "Display";
$a->strings["Social Networks"] = "Social networks"; $a->strings["Social Networks"] = "Social networks";
$a->strings["Connected apps"] = ""; $a->strings["Connected apps"] = "Connected apps";
$a->strings["Remove account"] = ""; $a->strings["Remove account"] = "Remove account";
$a->strings["Missing some important data!"] = ""; $a->strings["Missing some important data!"] = "Missing some important data!";
$a->strings["Failed to connect with email account using the settings provided."] = ""; $a->strings["Failed to connect with email account using the settings provided."] = "Failed to connect with email account using the settings provided.";
$a->strings["Email settings updated."] = ""; $a->strings["Email settings updated."] = "Email settings updated.";
$a->strings["Features updated"] = ""; $a->strings["Features updated"] = "Features updated";
$a->strings["Relocate message has been send to your contacts"] = "Relocate message has been send to your contacts"; $a->strings["Relocate message has been send to your contacts"] = "Relocate message has been send to your contacts";
$a->strings["Empty passwords are not allowed. Password unchanged."] = ""; $a->strings["Empty passwords are not allowed. Password unchanged."] = "Empty passwords are not allowed. Password unchanged.";
$a->strings["Wrong password."] = ""; $a->strings["Wrong password."] = "Wrong password.";
$a->strings["Password changed."] = ""; $a->strings["Password changed."] = "Password changed.";
$a->strings["Password update failed. Please try again."] = ""; $a->strings["Password update failed. Please try again."] = "Password update failed. Please try again.";
$a->strings[" Please use a shorter name."] = ""; $a->strings[" Please use a shorter name."] = " Please use a shorter name.";
$a->strings[" Name too short."] = ""; $a->strings[" Name too short."] = " Name too short.";
$a->strings["Wrong Password"] = ""; $a->strings["Wrong Password"] = "Wrong password";
$a->strings[" Not valid email."] = ""; $a->strings[" Not valid email."] = "Invalid email.";
$a->strings[" Cannot change to that email."] = ""; $a->strings[" Cannot change to that email."] = " Cannot change to that email.";
$a->strings["Private forum has no privacy permissions. Using default privacy group."] = ""; $a->strings["Private forum has no privacy permissions. Using default privacy group."] = "Private forum has no privacy permissions. Using default privacy group.";
$a->strings["Private forum has no privacy permissions and no default privacy group."] = ""; $a->strings["Private forum has no privacy permissions and no default privacy group."] = "Private forum has no privacy permissions and no default privacy group.";
$a->strings["Settings updated."] = ""; $a->strings["Settings updated."] = "Settings updated.";
$a->strings["Add application"] = ""; $a->strings["Add application"] = "Add application";
$a->strings["Consumer Key"] = ""; $a->strings["Consumer Key"] = "Consumer key";
$a->strings["Consumer Secret"] = ""; $a->strings["Consumer Secret"] = "Consumer secret";
$a->strings["Redirect"] = ""; $a->strings["Redirect"] = "Redirect";
$a->strings["Icon url"] = "Icon URL"; $a->strings["Icon url"] = "Icon URL";
$a->strings["You can't edit this application."] = ""; $a->strings["You can't edit this application."] = "You cannot edit this application.";
$a->strings["Connected Apps"] = ""; $a->strings["Connected Apps"] = "Connected Apps";
$a->strings["Client key starts with"] = ""; $a->strings["Client key starts with"] = "Client key starts with";
$a->strings["No name"] = ""; $a->strings["No name"] = "No name";
$a->strings["Remove authorization"] = ""; $a->strings["Remove authorization"] = "Remove authorization";
$a->strings["No Plugin settings configured"] = ""; $a->strings["No Plugin settings configured"] = "No plugin settings configured";
$a->strings["Plugin Settings"] = ""; $a->strings["Plugin Settings"] = "Plugin Settings";
$a->strings["Additional Features"] = ""; $a->strings["Additional Features"] = "Additional Features";
$a->strings["General Social Media Settings"] = ""; $a->strings["General Social Media Settings"] = "General Social Media Settings";
$a->strings["Disable intelligent shortening"] = ""; $a->strings["Disable intelligent shortening"] = "Disable intelligent shortening";
$a->strings["Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post."] = "Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original Friendica post."; $a->strings["Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original friendica post."] = "Normally the system tries to find the best link to add to shortened posts. If this option is enabled then every shortened post will always point to the original Friendica post.";
$a->strings["Automatically follow any GNU Social (OStatus) followers/mentioners"] = ""; $a->strings["Automatically follow any GNU Social (OStatus) followers/mentioners"] = "Automatically follow any GNU Social (OStatus) followers/mentioners";
$a->strings["If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user."] = ""; $a->strings["If you receive a message from an unknown OStatus user, this option decides what to do. If it is checked, a new contact will be created for every unknown user."] = "Create a new contact for every unknown OStatus user from whom you receive a message.";
$a->strings["Default group for OStatus contacts"] = ""; $a->strings["Default group for OStatus contacts"] = "Default group for OStatus contacts";
$a->strings["Your legacy GNU Social account"] = ""; $a->strings["Your legacy GNU Social account"] = "Your legacy GNU Social account";
$a->strings["If you enter your old GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done."] = ""; $a->strings["If you enter your old GNU Social/Statusnet account name here (in the format user@domain.tld), your contacts will be added automatically. The field will be emptied when done."] = "Entering your old GNU Social/Statusnet account name here (format: user@domain.tld), will automatically added your contacts. The field will be emptied when done.";
$a->strings["Repair OStatus subscriptions"] = ""; $a->strings["Repair OStatus subscriptions"] = "Repair OStatus subscriptions";
$a->strings["Built-in support for %s connectivity is %s"] = ""; $a->strings["Built-in support for %s connectivity is %s"] = "Built-in support for %s connectivity is %s";
$a->strings["enabled"] = ""; $a->strings["enabled"] = "enabled";
$a->strings["disabled"] = ""; $a->strings["disabled"] = "disabled";
$a->strings["GNU Social (OStatus)"] = ""; $a->strings["GNU Social (OStatus)"] = "GNU Social (OStatus)";
$a->strings["Email access is disabled on this site."] = ""; $a->strings["Email access is disabled on this site."] = "Email access is disabled on this site.";
$a->strings["Email/Mailbox Setup"] = ""; $a->strings["Email/Mailbox Setup"] = "Email/Mailbox setup";
$a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = ""; $a->strings["If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."] = "Specify how to connect to your mailbox, if you wish to communicate with existing email contacts.";
$a->strings["Last successful email check:"] = ""; $a->strings["Last successful email check:"] = "Last successful email check:";
$a->strings["IMAP server name:"] = ""; $a->strings["IMAP server name:"] = "IMAP server name:";
$a->strings["IMAP port:"] = ""; $a->strings["IMAP port:"] = "IMAP port:";
$a->strings["Security:"] = ""; $a->strings["Security:"] = "Security:";
$a->strings["None"] = ""; $a->strings["None"] = "None";
$a->strings["Email login name:"] = ""; $a->strings["Email login name:"] = "Email login name:";
$a->strings["Email password:"] = ""; $a->strings["Email password:"] = "Email password:";
$a->strings["Reply-to address:"] = ""; $a->strings["Reply-to address:"] = "Reply-to address:";
$a->strings["Send public posts to all email contacts:"] = ""; $a->strings["Send public posts to all email contacts:"] = "Send public posts to all email contacts:";
$a->strings["Action after import:"] = ""; $a->strings["Action after import:"] = "Action after import:";
$a->strings["Move to folder"] = "Move to folder"; $a->strings["Move to folder"] = "Move to folder";
$a->strings["Move to folder:"] = "Move to folder:"; $a->strings["Move to folder:"] = "Move to folder:";
$a->strings["Display Settings"] = ""; $a->strings["Display Settings"] = "Display Settings";
$a->strings["Display Theme:"] = ""; $a->strings["Display Theme:"] = "Display theme:";
$a->strings["Mobile Theme:"] = ""; $a->strings["Mobile Theme:"] = "Mobile theme:";
$a->strings["Suppress warning of insecure networks"] = ""; $a->strings["Suppress warning of insecure networks"] = "Suppress warning of insecure networks";
$a->strings["Should the system suppress the warning that the current group contains members of networks that can't receive non public postings."] = ""; $a->strings["Should the system suppress the warning that the current group contains members of networks that can't receive non public postings."] = "Suppresses warnings if groups contains members whose networks that cannot receive non-public postings.";
$a->strings["Update browser every xx seconds"] = "Update browser every so many seconds:"; $a->strings["Update browser every xx seconds"] = "Update browser every so many seconds:";
$a->strings["Minimum of 10 seconds. Enter -1 to disable it."] = ""; $a->strings["Minimum of 10 seconds. Enter -1 to disable it."] = "Minimum 10 seconds; to disable -1.";
$a->strings["Number of items to display per page:"] = ""; $a->strings["Number of items to display per page:"] = "Number of items displayed per page:";
$a->strings["Maximum of 100 items"] = ""; $a->strings["Maximum of 100 items"] = "Maximum of 100 items";
$a->strings["Number of items to display per page when viewed from mobile device:"] = ""; $a->strings["Number of items to display per page when viewed from mobile device:"] = "Number of items displayed per page on mobile devices:";
$a->strings["Don't show emoticons"] = ""; $a->strings["Don't show emoticons"] = "Don't show emoticons";
$a->strings["Calendar"] = ""; $a->strings["Calendar"] = "Calendar";
$a->strings["Beginning of week:"] = ""; $a->strings["Beginning of week:"] = "Week begins: ";
$a->strings["Don't show notices"] = ""; $a->strings["Don't show notices"] = "Don't show notices";
$a->strings["Infinite scroll"] = ""; $a->strings["Infinite scroll"] = "Infinite scroll";
$a->strings["Automatic updates only at the top of the network page"] = ""; $a->strings["Automatic updates only at the top of the network page"] = "Automatically updates only top of the network page";
$a->strings["Bandwith Saver Mode"] = ""; $a->strings["Bandwith Saver Mode"] = "Bandwith saving mode";
$a->strings["When enabled, embedded content is not displayed on automatic updates, they only show on page reload."] = ""; $a->strings["When enabled, embedded content is not displayed on automatic updates, they only show on page reload."] = "If enabled, embedded content is not displayed on automatic updates; it is only shown on page reload.";
$a->strings["General Theme Settings"] = "Themes"; $a->strings["General Theme Settings"] = "Themes";
$a->strings["Custom Theme Settings"] = "Theme customisation"; $a->strings["Custom Theme Settings"] = "Theme customisation";
$a->strings["Content Settings"] = "Content/Layout"; $a->strings["Content Settings"] = "Content/Layout";
$a->strings["Theme settings"] = ""; $a->strings["Theme settings"] = "Theme settings";
$a->strings["Account Types"] = "Account types:"; $a->strings["Account Types"] = "Account types:";
$a->strings["Personal Page Subtypes"] = "Personal Page subtypes"; $a->strings["Personal Page Subtypes"] = "Personal Page subtypes";
$a->strings["Community Forum Subtypes"] = ""; $a->strings["Community Forum Subtypes"] = "Community forum subtypes";
$a->strings["Personal Page"] = "Personal Page"; $a->strings["Personal Page"] = "Personal Page";
$a->strings["This account is a regular personal profile"] = "Regular personal profile"; $a->strings["This account is a regular personal profile"] = "Regular personal profile";
$a->strings["Organisation Page"] = "Organisation Page"; $a->strings["Organisation Page"] = "Organisation Page";
@ -1930,14 +1930,14 @@ $a->strings["Normal Account Page"] = "Standard";
$a->strings["This account is a normal personal profile"] = "Regular personal profile"; $a->strings["This account is a normal personal profile"] = "Regular personal profile";
$a->strings["Soapbox Page"] = "Soapbox"; $a->strings["Soapbox Page"] = "Soapbox";
$a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Automatically approves contact requests as followers"; $a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Automatically approves contact requests as followers";
$a->strings["Public Forum"] = ""; $a->strings["Public Forum"] = "Public forum";
$a->strings["Automatically approve all contact requests"] = ""; $a->strings["Automatically approve all contact requests"] = "Automatically approve all contact requests";
$a->strings["Automatic Friend Page"] = "Popularity"; $a->strings["Automatic Friend Page"] = "Popularity";
$a->strings["Automatically approve all connection/friend requests as friends"] = "Automatically approves contact requests as friends"; $a->strings["Automatically approve all connection/friend requests as friends"] = "Automatically approves contact requests as friends";
$a->strings["Private Forum [Experimental]"] = ""; $a->strings["Private Forum [Experimental]"] = "Private forum [Experimental]";
$a->strings["Private forum - approved members only"] = ""; $a->strings["Private forum - approved members only"] = "Private forum - approved members only";
$a->strings["OpenID:"] = ""; $a->strings["OpenID:"] = "OpenID:";
$a->strings["(Optional) Allow this OpenID to login to this account."] = ""; $a->strings["(Optional) Allow this OpenID to login to this account."] = "(Optional) Allow this OpenID to login to this account.";
$a->strings["Publish your default profile in your local site directory?"] = "Publish default profile in local site directory?"; $a->strings["Publish your default profile in your local site directory?"] = "Publish default profile in local site directory?";
$a->strings["Your profile may be visible in public."] = "Your local directory may be publicly visible"; $a->strings["Your profile may be visible in public."] = "Your local directory may be publicly visible";
$a->strings["Publish your default profile in the global social directory?"] = "Publish default profile in global directory?"; $a->strings["Publish your default profile in the global social directory?"] = "Publish default profile in global directory?";
@ -1945,46 +1945,46 @@ $a->strings["Hide your contact/friend list from viewers of your default profile?
$a->strings["If enabled, posting public messages to Diaspora and other networks isn't possible."] = "Posting public messages to Diaspora and other networks will not be possible if enabled"; $a->strings["If enabled, posting public messages to Diaspora and other networks isn't possible."] = "Posting public messages to Diaspora and other networks will not be possible if enabled";
$a->strings["Allow friends to post to your profile page?"] = "Allow friends to post to my wall?"; $a->strings["Allow friends to post to your profile page?"] = "Allow friends to post to my wall?";
$a->strings["Allow friends to tag your posts?"] = "Allow friends to tag my post?"; $a->strings["Allow friends to tag your posts?"] = "Allow friends to tag my post?";
$a->strings["Allow us to suggest you as a potential friend to new members?"] = ""; $a->strings["Allow us to suggest you as a potential friend to new members?"] = "Allow us to suggest you as a potential friend to new members?";
$a->strings["Permit unknown people to send you private mail?"] = "Allow unknown people to send me private messages?"; $a->strings["Permit unknown people to send you private mail?"] = "Allow unknown people to send me private messages?";
$a->strings["Profile is <strong>not published</strong>."] = ""; $a->strings["Profile is <strong>not published</strong>."] = "Profile is <strong>not published</strong>.";
$a->strings["Your Identity Address is <strong>'%s'</strong> or '%s'."] = "My identity address: <strong>'%s'</strong> or '%s'"; $a->strings["Your Identity Address is <strong>'%s'</strong> or '%s'."] = "My identity address: <strong>'%s'</strong> or '%s'";
$a->strings["Automatically expire posts after this many days:"] = "Automatically expire posts after this many days:"; $a->strings["Automatically expire posts after this many days:"] = "Automatically expire posts after this many days:";
$a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Posts will not expire if empty; expired posts will be deleted"; $a->strings["If empty, posts will not expire. Expired posts will be deleted"] = "Posts will not expire if empty; expired posts will be deleted";
$a->strings["Advanced expiration settings"] = "Advanced expiration settings"; $a->strings["Advanced expiration settings"] = "Advanced expiration settings";
$a->strings["Advanced Expiration"] = "Advanced expiration"; $a->strings["Advanced Expiration"] = "Advanced expiration";
$a->strings["Expire posts:"] = ""; $a->strings["Expire posts:"] = "Expire posts:";
$a->strings["Expire personal notes:"] = ""; $a->strings["Expire personal notes:"] = "Expire personal notes:";
$a->strings["Expire starred posts:"] = ""; $a->strings["Expire starred posts:"] = "Expire starred posts:";
$a->strings["Expire photos:"] = ""; $a->strings["Expire photos:"] = "Expire photos:";
$a->strings["Only expire posts by others:"] = ""; $a->strings["Only expire posts by others:"] = "Only expire posts by others:";
$a->strings["Account Settings"] = ""; $a->strings["Account Settings"] = "Account Settings";
$a->strings["Password Settings"] = "Password change"; $a->strings["Password Settings"] = "Password change";
$a->strings["Leave password fields blank unless changing"] = ""; $a->strings["Leave password fields blank unless changing"] = "Leave password fields blank unless changing";
$a->strings["Current Password:"] = "Current password:"; $a->strings["Current Password:"] = "Current password:";
$a->strings["Your current password to confirm the changes"] = "Current password to confirm change"; $a->strings["Your current password to confirm the changes"] = "Current password to confirm change";
$a->strings["Password:"] = ""; $a->strings["Password:"] = "Password:";
$a->strings["Basic Settings"] = "Basic information"; $a->strings["Basic Settings"] = "Basic information";
$a->strings["Email Address:"] = "Email address:"; $a->strings["Email Address:"] = "Email address:";
$a->strings["Your Timezone:"] = "Time zone:"; $a->strings["Your Timezone:"] = "Time zone:";
$a->strings["Your Language:"] = "Language:"; $a->strings["Your Language:"] = "Language:";
$a->strings["Set the language we use to show you friendica interface and to send you emails"] = ""; $a->strings["Set the language we use to show you friendica interface and to send you emails"] = "Set the language of your Friendica interface and emails receiving";
$a->strings["Default Post Location:"] = "Posting location:"; $a->strings["Default Post Location:"] = "Posting location:";
$a->strings["Use Browser Location:"] = "Use browser location:"; $a->strings["Use Browser Location:"] = "Use browser location:";
$a->strings["Security and Privacy Settings"] = "Security and privacy"; $a->strings["Security and Privacy Settings"] = "Security and privacy";
$a->strings["Maximum Friend Requests/Day:"] = "Maximum friend requests per day:"; $a->strings["Maximum Friend Requests/Day:"] = "Maximum friend requests per day:";
$a->strings["(to prevent spam abuse)"] = "May prevent spam or abuse registrations"; $a->strings["(to prevent spam abuse)"] = "May prevent spam or abuse registrations";
$a->strings["Default Post Permissions"] = "Default post permissions"; $a->strings["Default Post Permissions"] = "Default post permissions";
$a->strings["(click to open/close)"] = ""; $a->strings["(click to open/close)"] = "(click to open/close)";
$a->strings["Default Private Post"] = ""; $a->strings["Default Private Post"] = "Default private post";
$a->strings["Default Public Post"] = ""; $a->strings["Default Public Post"] = "Default public post";
$a->strings["Default Permissions for New Posts"] = ""; $a->strings["Default Permissions for New Posts"] = "Default permissions for new posts";
$a->strings["Maximum private messages per day from unknown people:"] = "Maximum private messages per day from unknown people:"; $a->strings["Maximum private messages per day from unknown people:"] = "Maximum private messages per day from unknown people:";
$a->strings["Notification Settings"] = "Notification"; $a->strings["Notification Settings"] = "Notification";
$a->strings["By default post a status message when:"] = "By default post a status message when:"; $a->strings["By default post a status message when:"] = "By default post a status message when:";
$a->strings["accepting a friend request"] = "accepting friend requests"; $a->strings["accepting a friend request"] = "accepting friend requests";
$a->strings["joining a forum/community"] = "joining forums or communities"; $a->strings["joining a forum/community"] = "joining forums or communities";
$a->strings["making an <em>interesting</em> profile change"] = ""; $a->strings["making an <em>interesting</em> profile change"] = "making an <em>interesting</em> profile change";
$a->strings["Send a notification email when:"] = "Send notification email when:"; $a->strings["Send a notification email when:"] = "Send notification email when:";
$a->strings["You receive an introduction"] = "Receiving an introduction"; $a->strings["You receive an introduction"] = "Receiving an introduction";
$a->strings["Your introductions are confirmed"] = "My introductions are confirmed"; $a->strings["Your introductions are confirmed"] = "My introductions are confirmed";
@ -2002,54 +2002,54 @@ $a->strings["Advanced Account/Page Type Settings"] = "Advanced account types";
$a->strings["Change the behaviour of this account for special situations"] = "Change behaviour of this account for special situations"; $a->strings["Change the behaviour of this account for special situations"] = "Change behaviour of this account for special situations";
$a->strings["Relocate"] = "Recent relocation"; $a->strings["Relocate"] = "Recent relocation";
$a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "If you have moved this profile from another server and some of your contacts don't receive your updates:"; $a->strings["If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."] = "If you have moved this profile from another server and some of your contacts don't receive your updates:";
$a->strings["Resend relocate message to contacts"] = ""; $a->strings["Resend relocate message to contacts"] = "Resend relocation message to contacts";
$a->strings["via"] = ""; $a->strings["via"] = "via";
$a->strings["greenzero"] = ""; $a->strings["greenzero"] = "greenzero";
$a->strings["purplezero"] = ""; $a->strings["purplezero"] = "purplezero";
$a->strings["easterbunny"] = ""; $a->strings["easterbunny"] = "easterbunny";
$a->strings["darkzero"] = ""; $a->strings["darkzero"] = "darkzero";
$a->strings["comix"] = ""; $a->strings["comix"] = "comix";
$a->strings["slackr"] = ""; $a->strings["slackr"] = "slackr";
$a->strings["Variations"] = ""; $a->strings["Variations"] = "Variations";
$a->strings["Repeat the image"] = ""; $a->strings["Repeat the image"] = "Repeat the image";
$a->strings["Will repeat your image to fill the background."] = ""; $a->strings["Will repeat your image to fill the background."] = "Will repeat your image to fill the background.";
$a->strings["Stretch"] = ""; $a->strings["Stretch"] = "Stretch";
$a->strings["Will stretch to width/height of the image."] = ""; $a->strings["Will stretch to width/height of the image."] = "Will stretch to width/height of the image.";
$a->strings["Resize fill and-clip"] = ""; $a->strings["Resize fill and-clip"] = "Resize fill and-clip";
$a->strings["Resize to fill and retain aspect ratio."] = ""; $a->strings["Resize to fill and retain aspect ratio."] = "Resize to fill and retain aspect ratio.";
$a->strings["Resize best fit"] = ""; $a->strings["Resize best fit"] = "Resize to best fit";
$a->strings["Resize to best fit and retain aspect ratio."] = ""; $a->strings["Resize to best fit and retain aspect ratio."] = "Resize to best fit and retain aspect ratio.";
$a->strings["Default"] = ""; $a->strings["Default"] = "Default";
$a->strings["Note: "] = ""; $a->strings["Note: "] = "Note - ";
$a->strings["Check image permissions if all users are allowed to visit the image"] = ""; $a->strings["Check image permissions if all users are allowed to visit the image"] = "Check image permissions if all users are allowed to visit the image";
$a->strings["Select scheme"] = ""; $a->strings["Select scheme"] = "Select scheme:";
$a->strings["Navigation bar background color"] = "Navigation bar background colour"; $a->strings["Navigation bar background color"] = "Navigation bar background colour:";
$a->strings["Navigation bar icon color "] = "Navigation bar icon colour "; $a->strings["Navigation bar icon color "] = "Navigation bar icon colour:";
$a->strings["Link color"] = "Link colour"; $a->strings["Link color"] = "Link colour:";
$a->strings["Set the background color"] = "Set the background colour"; $a->strings["Set the background color"] = "Background colour:";
$a->strings["Content background transparency"] = ""; $a->strings["Content background transparency"] = "Content background transparency:";
$a->strings["Set the background image"] = ""; $a->strings["Set the background image"] = "Background image:";
$a->strings["Guest"] = ""; $a->strings["Guest"] = "Guest";
$a->strings["Visitor"] = ""; $a->strings["Visitor"] = "Visitor";
$a->strings["Alignment"] = ""; $a->strings["Alignment"] = "Alignment";
$a->strings["Left"] = ""; $a->strings["Left"] = "Left";
$a->strings["Center"] = "Centre"; $a->strings["Center"] = "Centre";
$a->strings["Color scheme"] = "Colour scheme"; $a->strings["Color scheme"] = "Colour scheme";
$a->strings["Posts font size"] = ""; $a->strings["Posts font size"] = "Posts font size";
$a->strings["Textareas font size"] = ""; $a->strings["Textareas font size"] = "Textareas font size";
$a->strings["Comma separated list of helper forums"] = ""; $a->strings["Comma separated list of helper forums"] = "Comma separated list of helper forums";
$a->strings["Set style"] = ""; $a->strings["Set style"] = "Set style";
$a->strings["Community Pages"] = ""; $a->strings["Community Pages"] = "Community pages";
$a->strings["Community Profiles"] = ""; $a->strings["Community Profiles"] = "Community profiles";
$a->strings["Help or @NewHere ?"] = ""; $a->strings["Help or @NewHere ?"] = "Help or @NewHere ?";
$a->strings["Connect Services"] = ""; $a->strings["Connect Services"] = "Connect services";
$a->strings["Find Friends"] = ""; $a->strings["Find Friends"] = "Find friends";
$a->strings["Last users"] = ""; $a->strings["Last users"] = "Last users";
$a->strings["Local Directory"] = ""; $a->strings["Local Directory"] = "Local directory";
$a->strings["Quick Start"] = ""; $a->strings["Quick Start"] = "Quick start";
$a->strings["Delete this item?"] = "Delete this item?"; $a->strings["Delete this item?"] = "Delete this item?";
$a->strings["show fewer"] = "Show fewer."; $a->strings["show fewer"] = "Show fewer.";
$a->strings["toggle mobile"] = ""; $a->strings["toggle mobile"] = "Toggle mobile";
$a->strings["Update %s failed. See error logs."] = "Update %s failed. See error logs."; $a->strings["Update %s failed. See error logs."] = "Update %s failed. See error logs.";
$a->strings["Create a New Account"] = "Create a new account"; $a->strings["Create a New Account"] = "Create a new account";
$a->strings["Password: "] = "Password: "; $a->strings["Password: "] = "Password: ";
@ -2058,5 +2058,5 @@ $a->strings["Or login using OpenID: "] = "Or login with OpenID: ";
$a->strings["Forgot your password?"] = "Forgot your password?"; $a->strings["Forgot your password?"] = "Forgot your password?";
$a->strings["Website Terms of Service"] = "Website Terms of Service"; $a->strings["Website Terms of Service"] = "Website Terms of Service";
$a->strings["terms of service"] = "Terms of service"; $a->strings["terms of service"] = "Terms of service";
$a->strings["Website Privacy Policy"] = ""; $a->strings["Website Privacy Policy"] = "Website Privacy Policy";
$a->strings["privacy policy"] = "Privacy policy"; $a->strings["privacy policy"] = "Privacy policy";

8943
view/lang/en-us/messages.po Normal file

File diff suppressed because it is too large Load Diff

2062
view/lang/en-us/strings.php Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
/* ******************************************************************** /* ********************************************************************
* The following configuration has to be within the .htconfig file * The following configuration has to be within the .htconfig file
* and will not be overruled by decisions made in the admin panel. * and will not be overruled by decisions made in the admin panel.
* *
* See below for variables that may be overruled by the admin panel. * See below for variables that may be overruled by the admin panel.
* ********************************************************************/ * ********************************************************************/
@ -43,7 +43,7 @@ $a->config['system']['allowed_link_protocols'] = array('ftp', 'ftps', 'mailto',
* Changes made below will only have an effect if the database does * Changes made below will only have an effect if the database does
* not contain any configuration for the friendica system. * not contain any configuration for the friendica system.
* *********************************************************************/ * *********************************************************************/
// 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.
@ -98,7 +98,7 @@ $a->config['system']['no_regfullname'] = true;
//$a->config['system']['block_local_dir'] = false; //$a->config['system']['block_local_dir'] = false;
// Location of the global directory // Location of the global directory
$a->config['system']['directory'] = 'http://dir.friendi.ca'; $a->config['system']['directory'] = 'http://dir.friendica.social';
// Authentication cookie lifetime, in days // Authentication cookie lifetime, in days
$a->config['system']['auth_cookie_lifetime'] = 7; $a->config['system']['auth_cookie_lifetime'] = 7;

View File

@ -37,19 +37,11 @@ function insertFormatting(BBcode, id) {
if (document.selection) { if (document.selection) {
textarea.focus(); textarea.focus();
selected = document.selection.createRange(); selected = document.selection.createRange();
if (BBcode == "url") { selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
selected.text = "["+BBcode+"]" + "http://" + selected.text + "[/"+BBcode+"]";
} else {
selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
}
} else if (textarea.selectionStart || textarea.selectionStart == "0") { } else if (textarea.selectionStart || textarea.selectionStart == "0") {
var start = textarea.selectionStart; var start = textarea.selectionStart;
var end = textarea.selectionEnd; var end = textarea.selectionEnd;
if (BBcode == "url") { textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + "http://" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
} else {
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
}
} }
return true; return true;

View File

@ -3,7 +3,7 @@
*/ */
function insertFormatting(BBcode,id) { function insertFormatting(BBcode, id) {
var tmpStr = $("#comment-edit-text-" + id).val(); var tmpStr = $("#comment-edit-text-" + id).val();
if (tmpStr == '') { if (tmpStr == '') {
$("#comment-edit-text-" + id).addClass("comment-edit-text-full"); $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
@ -11,23 +11,15 @@ function insertFormatting(BBcode,id) {
openMenu("comment-edit-submit-wrapper-" + id); openMenu("comment-edit-submit-wrapper-" + id);
} }
textarea = document.getElementById("comment-edit-text-" +id); textarea = document.getElementById("comment-edit-text-" + id);
if (document.selection) { if (document.selection) {
textarea.focus(); textarea.focus();
selected = document.selection.createRange(); selected = document.selection.createRange();
if (BBcode == "url") { selected.text = "[" + BBcode + "]" + selected.text + "[/" + BBcode + "]";
selected.text = "["+BBcode+"]" + "http://" + selected.text + "[/"+BBcode+"]";
} else {
selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
}
} else if (textarea.selectionStart || textarea.selectionStart == "0") { } else if (textarea.selectionStart || textarea.selectionStart == "0") {
var start = textarea.selectionStart; var start = textarea.selectionStart;
var end = textarea.selectionEnd; var end = textarea.selectionEnd;
if (BBcode == "url") { textarea.value = textarea.value.substring(0, start) + "[" + BBcode + "]" + textarea.value.substring(start, end) + "[/" + BBcode + "]" + textarea.value.substring(end, textarea.value.length);
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + "http://" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
} else {
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
}
} }
$(textarea).trigger('change'); $(textarea).trigger('change');
@ -62,7 +54,7 @@ function commentExpand(id) {
return true; return true;
} }
function commentClose(obj,id) { function commentClose(obj, id) {
if (obj.value == '') { if (obj.value == '') {
$("#comment-edit-text-" + id).removeClass("comment-edit-text-full"); $("#comment-edit-text-" + id).removeClass("comment-edit-text-full");
$("#comment-edit-text-" + id).addClass("comment-edit-text-empty"); $("#comment-edit-text-" + id).addClass("comment-edit-text-empty");
@ -74,10 +66,9 @@ function commentClose(obj,id) {
} }
function showHideCommentBox(id) { function showHideCommentBox(id) {
if( $('#comment-edit-form-' + id).is(':visible')) { if ($('#comment-edit-form-' + id).is(':visible')) {
$('#comment-edit-form-' + id).hide(); $('#comment-edit-form-' + id).hide();
} } else {
else {
$('#comment-edit-form-' + id).show(); $('#comment-edit-form-' + id).show();
} }
} }
@ -86,8 +77,8 @@ function commentOpenUI(obj, id) {
$("#comment-edit-text-" + id).addClass("comment-edit-text-full").removeClass("comment-edit-text-empty"); $("#comment-edit-text-" + id).addClass("comment-edit-text-full").removeClass("comment-edit-text-empty");
// Choose an arbitrary tab index that's greater than what we're using in jot (3 of them) // Choose an arbitrary tab index that's greater than what we're using in jot (3 of them)
// The submit button gets tabindex + 1 // The submit button gets tabindex + 1
$("#comment-edit-text-" + id).attr('tabindex','9'); $("#comment-edit-text-" + id).attr('tabindex', '9');
$("#comment-edit-submit-" + id).attr('tabindex','10'); $("#comment-edit-submit-" + id).attr('tabindex', '10');
$("#comment-edit-submit-wrapper-" + id).show(); $("#comment-edit-submit-wrapper-" + id).show();
// initialize autosize for this comment // initialize autosize for this comment
autosize($("#comment-edit-text-" + id + ".text-autosize")); autosize($("#comment-edit-text-" + id + ".text-autosize"));
@ -120,7 +111,7 @@ function jotTextCloseUI(obj) {
} }
} }
function commentOpen(obj,id) { function commentOpen(obj, id) {
if (obj.value == '') { if (obj.value == '') {
$("#comment-edit-text-" + id).addClass("comment-edit-text-full"); $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
$("#comment-edit-text-" + id).removeClass("comment-edit-text-empty"); $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
@ -131,7 +122,7 @@ function commentOpen(obj,id) {
return false; return false;
} }
function commentInsert(obj,id) { function commentInsert(obj, id) {
var tmpStr = $("#comment-edit-text-" + id).val(); var tmpStr = $("#comment-edit-text-" + id).val();
if (tmpStr == '') { if (tmpStr == '') {
$("#comment-edit-text-" + id).addClass("comment-edit-text-full"); $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
@ -139,14 +130,14 @@ function commentInsert(obj,id) {
openMenu("comment-edit-submit-wrapper-" + id); openMenu("comment-edit-submit-wrapper-" + id);
} }
var ins = $(obj).html(); var ins = $(obj).html();
ins = ins.replace('&lt;','<'); ins = ins.replace('&lt;', '<');
ins = ins.replace('&gt;','>'); ins = ins.replace('&gt;', '>');
ins = ins.replace('&amp;','&'); ins = ins.replace('&amp;', '&');
ins = ins.replace('&quot;','"'); ins = ins.replace('&quot;', '"');
$("#comment-edit-text-" + id).val(tmpStr + ins); $("#comment-edit-text-" + id).val(tmpStr + ins);
} }
function qCommentInsert(obj,id) { function qCommentInsert(obj, id) {
var tmpStr = $("#comment-edit-text-" + id).val(); var tmpStr = $("#comment-edit-text-" + id).val();
if (tmpStr == '') { if (tmpStr == '') {
$("#comment-edit-text-" + id).addClass("comment-edit-text-full"); $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
@ -154,15 +145,17 @@ function qCommentInsert(obj,id) {
openMenu("comment-edit-submit-wrapper-" + id); openMenu("comment-edit-submit-wrapper-" + id);
} }
var ins = $(obj).val(); var ins = $(obj).val();
ins = ins.replace('&lt;','<'); ins = ins.replace('&lt;', '<');
ins = ins.replace('&gt;','>'); ins = ins.replace('&gt;', '>');
ins = ins.replace('&amp;','&'); ins = ins.replace('&amp;', '&');
ins = ins.replace('&quot;','"'); ins = ins.replace('&quot;', '"');
$("#comment-edit-text-" + id).val(tmpStr + ins); $("#comment-edit-text-" + id).val(tmpStr + ins);
$(obj).val(''); $(obj).val('');
} }
function confirmDelete() { return confirm(aStr.delitem); } function confirmDelete() {
return confirm(aStr.delitem);
}
/** /**
* Hide and removes an item element from the DOM after the deletion url is * Hide and removes an item element from the DOM after the deletion url is

View File

@ -423,19 +423,11 @@ function insertFormatting(BBcode, id) {
if (document.selection) { if (document.selection) {
textarea.focus(); textarea.focus();
selected = document.selection.createRange(); selected = document.selection.createRange();
if (BBcode == "url") { selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
selected.text = "["+BBcode+"=http://]" + selected.text + "[/"+BBcode+"]";
} else {
selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
}
} else if (textarea.selectionStart || textarea.selectionStart == "0") { } else if (textarea.selectionStart || textarea.selectionStart == "0") {
var start = textarea.selectionStart; var start = textarea.selectionStart;
var end = textarea.selectionEnd; var end = textarea.selectionEnd;
if (BBcode == "url") { textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"=http://]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
} else {
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
}
} }
return true; return true;

View File

@ -603,19 +603,11 @@ function insertFormatting(BBcode, id) {
if (document.selection) { if (document.selection) {
textarea.focus(); textarea.focus();
selected = document.selection.createRange(); selected = document.selection.createRange();
if (BBcode == "url") { selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
selected.text = "["+BBcode+"=http://]" + selected.text + "[/"+BBcode+"]";
} else {
selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
}
} else if (textarea.selectionStart || textarea.selectionStart == "0") { } else if (textarea.selectionStart || textarea.selectionStart == "0") {
var start = textarea.selectionStart; var start = textarea.selectionStart;
var end = textarea.selectionEnd; var end = textarea.selectionEnd;
if (BBcode == "url") { textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"=http://]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
} else {
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
}
} }
return true; return true;

View File

@ -71,19 +71,11 @@ function insertFormatting(BBcode, id) {
if (document.selection) { if (document.selection) {
textarea.focus(); textarea.focus();
selected = document.selection.createRange(); selected = document.selection.createRange();
if (BBcode == "url") { selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
selected.text = "["+BBcode+"]" + "http://" + selected.text + "[/"+BBcode+"]";
} else {
selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
}
} else if (textarea.selectionStart || textarea.selectionStart == "0") { } else if (textarea.selectionStart || textarea.selectionStart == "0") {
var start = textarea.selectionStart; var start = textarea.selectionStart;
var end = textarea.selectionEnd; var end = textarea.selectionEnd;
if (BBcode == "url") { textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + "http://" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
} else {
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
}
} }
return true; return true;

View File

@ -20,23 +20,13 @@ function insertFormatting(BBcode, id) {
if (document.selection) { if (document.selection) {
textarea.focus(); textarea.focus();
selected = document.selection.createRange(); selected = document.selection.createRange();
if (BBcode == "url") { selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
selected.text = "["+BBcode+"]" + "http://" + selected.text + "[/"+BBcode+"]";
} else {
selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
}
} else if (textarea.selectionStart || textarea.selectionStart == "0") { } else if (textarea.selectionStart || textarea.selectionStart == "0") {
var start = textarea.selectionStart; var start = textarea.selectionStart;
var end = textarea.selectionEnd; var end = textarea.selectionEnd;
if (BBcode == "url") { textarea.value = textarea.value.substring(0, start)
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]"
+ "http://" + textarea.value.substring(start, end) + textarea.value.substring(end, textarea.value.length);
+ "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
} else {
textarea.value = textarea.value.substring(0, start)
+ "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]"
+ textarea.value.substring(end, textarea.value.length);
}
} }
return true; return true;

View File

@ -33,19 +33,11 @@ function insertFormatting(BBcode, id) {
if (document.selection) { if (document.selection) {
textarea.focus(); textarea.focus();
selected = document.selection.createRange(); selected = document.selection.createRange();
if (BBcode == "url") { selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
selected.text = "["+BBcode+"]" + "http://" + selected.text + "[/"+BBcode+"]";
} else {
selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
}
} else if (textarea.selectionStart || textarea.selectionStart == "0") { } else if (textarea.selectionStart || textarea.selectionStart == "0") {
var start = textarea.selectionStart; var start = textarea.selectionStart;
var end = textarea.selectionEnd; var end = textarea.selectionEnd;
if (BBcode == "url") { textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + "http://" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
} else {
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
}
} }
return true; return true;

View File

@ -50,19 +50,11 @@ function insertFormatting(BBcode, id) {
if (document.selection) { if (document.selection) {
textarea.focus(); textarea.focus();
selected = document.selection.createRange(); selected = document.selection.createRange();
if (BBcode == "url") { selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
selected.text = "["+BBcode+"]" + "http://" + selected.text + "[/"+BBcode+"]";
} else {
selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
}
} else if (textarea.selectionStart || textarea.selectionStart == "0") { } else if (textarea.selectionStart || textarea.selectionStart == "0") {
var start = textarea.selectionStart; var start = textarea.selectionStart;
var end = textarea.selectionEnd; var end = textarea.selectionEnd;
if (BBcode == "url") { textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + "http://" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
} else {
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
}
} }
return true; return true;