Merge branch '2024.09-rc' into merge-2024.09-rc-into-develop

This commit is contained in:
Art4 2024-12-23 10:18:56 +00:00
commit 1b4d0d0bb0
34 changed files with 628 additions and 627 deletions

View file

@ -94,9 +94,9 @@ steps:
- friendica/friendica - friendica/friendica
commands: commands:
- codecov -R '.' -Z -f 'clover.xml' - codecov -R '.' -Z -f 'clover.xml'
secrets: environment:
- source: codecov-token CODECOV_TOKEN:
target: codecov_token from_secret: codecov-token
services: services:
mariadb: mariadb:

View file

@ -604,7 +604,7 @@ Hook data:
### follow ### follow
Called before adding a new contact for a user to handle non-native network remote contact (like Twitter). Called before adding a new contact for a user to handle non-native network remote contact (like Bluesky).
Hook data: Hook data:
@ -613,7 +613,7 @@ Hook data:
### unfollow ### unfollow
Called when unfollowing a remote contact on a non-native network (like Twitter) Called when unfollowing a remote contact on a non-native network (like Bluesky)
Hook data: Hook data:
- **contact** (input): the target public contact (uid = 0) array. - **contact** (input): the target public contact (uid = 0) array.
@ -622,7 +622,7 @@ Hook data:
### revoke_follow ### revoke_follow
Called when making a remote contact on a non-native network (like Twitter) unfollow you. Called when making a remote contact on a non-native network (like Bluesky) unfollow you.
Hook data: Hook data:
- **contact** (input): the target public contact (uid = 0) array. - **contact** (input): the target public contact (uid = 0) array.
@ -631,7 +631,7 @@ Hook data:
### block ### block
Called when blocking a remote contact on a non-native network (like Twitter). Called when blocking a remote contact on a non-native network (like Bluesky).
Hook data: Hook data:
- **contact** (input): the remote contact (uid = 0) array. - **contact** (input): the remote contact (uid = 0) array.
@ -640,7 +640,7 @@ Hook data:
### unblock ### unblock
Called when unblocking a remote contact on a non-native network (like Twitter). Called when unblocking a remote contact on a non-native network (like Bluesky).
Hook data: Hook data:
- **contact** (input): the remote contact (uid = 0) array. - **contact** (input): the remote contact (uid = 0) array.

View file

@ -95,14 +95,6 @@ However we take privacy seriously and don't behave like some networks that __pre
Your profile and "wall" may also be visited by your friends from other networks, and you can block access to these by web visitors that Friendica doesn't know. Your profile and "wall" may also be visited by your friends from other networks, and you can block access to these by web visitors that Friendica doesn't know.
Be aware that this could include some of your friends on other networks. Be aware that this could include some of your friends on other networks.
This may produce undesired results when posting a long status message to (for instance) Twitter.
When Friendica sends a post to these networks which exceeds the service length limit, we truncate it and provide a link to the original.
The original is a link back to your Friendica profile.
As Friendica cannot prove who they are, it may not be possible for these people to view your post in full.
For people in this situation we would recommend providing a "Twitter-length" summary, with more detail for friends that can see the post in full.
You can do so by including the BBCode tag *abstract* in your posting.
Blocking your profile or entire Friendica site from unknown web visitors also has serious implications for communicating with GNU Social members. Blocking your profile or entire Friendica site from unknown web visitors also has serious implications for communicating with GNU Social members.
These networks communicate with others via public protocols that are not authenticated. These networks communicate with others via public protocols that are not authenticated.
In order to view your posts, these networks have to access them as an "unknown web visitor". In order to view your posts, these networks have to access them as an "unknown web visitor".

View file

@ -4,15 +4,10 @@ Connectors
* [Home](help) * [Home](help)
Connectors allow you to connect with external social networks and services. Connectors allow you to connect with external social networks and services.
They are only required for posting to existing accounts on Twitter or GNU Social. They are only required for posting to existing accounts on for example Bluesky, Tumblr or Twitter.
For Bluesky and Tumblr you can also enable a bidirectional synchronisation, so that you can use Friendica to read your timeline from Tumblr or Bluesky.
There is also a connector for accessing your email INBOX. There is also a connector for accessing your email INBOX.
If the following network connectors are installed on your system, select the following links to visit the appropriate settings page and configure them for your account:
* [Twitter](/settings/addons)
* [GNU Social](/settings/addons)
* [Email](/settings)
Instructions For Connecting To People On Specific Services Instructions For Connecting To People On Specific Services
========================================================== ==========================================================
@ -37,14 +32,6 @@ PLease note that you will not be able to reply to these contacts.
This feed reader feature will allow you to _connect_ with millions of pages on the internet. This feed reader feature will allow you to _connect_ with millions of pages on the internet.
All that the pages need to have is a discoverable feed using either the RSS or Atom syndication format, and which provides an author name and a site image in a form which we can extract. All that the pages need to have is a discoverable feed using either the RSS or Atom syndication format, and which provides an author name and a site image in a form which we can extract.
Twitter
---
To follow a Twitter member, the Twitter-Connector (Addon) needs to be configured on your node.
If this is the case put the URL of the Twitter member's main page into the Connect box on your [Contacts](contacts) page.
To reply, you must have the Twitter connector installed, and reply using your own status editor.
Begin the message with @twitterperson replacing with the Twitter username.
Email Email
--- ---

View file

@ -11,8 +11,7 @@ To export the list of accounts that you follow, go to the [Settings Export perso
## Import of followed Contacts ## Import of followed Contacts
To import contacts from a CSV file, go to the [Settings page](settings). To import contacts from a CSV file, go to the [import contacts](settings/importcontacts).
At the bottom of the *account settings* page you'll find the *import contacts* section.
Upload the CSV file there. Upload the CSV file there.
### Supported File Format ### Supported File Format

View file

@ -31,7 +31,7 @@ Help
* [Install](help/Install) * [Install](help/Install)
* [Update](help/Update) * [Update](help/Update)
* [Settings & Admin Panel](help/Settings) * [Settings & Admin Panel](help/Settings)
* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors) * [Installing Connectors](help/Installing-Connectors)
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd) * [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)
* [Using SSL with Friendica](help/SSL) * [Using SSL with Friendica](help/SSL)
* [Config values that can only be set in config/local.config.php](help/Config) * [Config values that can only be set in config/local.config.php](help/Config)

View file

@ -1,89 +1,34 @@
Installing Connectors (Twitter/GNU Social) Installing Connectors
================================================== ==================================================
* [Home](help) * [Home](help)
Friendica uses add-ons to connect to some networks, such as Tumblr or Bluesky.
Friendica uses addons to provide connectivity to some networks, such as Twitter. All of these add-ons require an account on the target network.
In addition, you (or usually the server administrator) will need to obtain an API key to allow authenticated access to your Friendica server.
There is also a addon to post through to an existing account on a GNU Social service. Site configuration
You only need this to post to an already existing GNU Social account, but not to communicate with GNU Social members in general.
All three addons require an account on the target network.
In addition you (or typically the server administrator) will need to obtain an API key to provide authenticated access to your Friendica server.
Site Configuration
--- ---
Addons must be installed by the site administrator before they can be used. Addons need to be installed by the site administrator before they can be used.
This is accomplished through the site administration panel. This is done through the site administration panel.
Each of the connectors also requires an "API key" from the service you wish to connect with. Some of the connectors also require an "API key" from the service you wish to connect to.
Some addons allow you to enter this information in the site administration pages, while others may require you to edit your configuration file (config/local.config.php). For Tumblr, this information can be found in the site administration pages, while for Twitter (X) each user has to create their own API key.
The ways to obtain these keys vary between the services, but they all require an existing account on the target service. Other connectors, such as Bluesky, don't require an API key at all.
Once installed, these API keys can usually be shared by all site members.
The details of configuring each service follow (much of this information comes directly from the addon source files): You can find more information about specific requirements on each addon's settings page, either on the admin page or the user page.
Twitter Addon for Friendica Bluesky Jetstream
--- ---
* Author: Tobias Diekershoff To further improve connectivity to Bluesky, Admins can choose to enable 'Jetstream' connectivity.
* tobias.diekershoff@gmx.net Jetstream is a service that connects to the Bluesky firehose.
* License: 3-clause BSD license With Jetstream, messages arrive in real time rather than having to be polled.
It also enables real-time processing of blocks or tracking activities performed by the user via the Bluesky website or application.
### Configuration To enable Jetstream processing, run `bin/jetstream.php' from the command line.
To use this addon you need a OAuth Consumer key pair (key & secret). You will need to define the process id file in local.config.php in the 'jetstream' section using the key 'pidfile'.
You can get it from [Twitter](https://twitter.com/apps).
Register your Friendica site as "Client" application with "Read & Write" access. To keep track of the messages processed and the drift (the time difference between the date of the message and the date the system processed that message), some fields are added to the statistics endpoint.
We do not need "Twitter as login".
When you've registered the app you get a key pair with an OAuth Consumer key and a secret key for your application/site.
Add this key pair to your config/local.config.php:
[twitter]
consumerkey = your consumer_key here
consumersecret = your consumer_secret here
After this, your users can configure their Twitter account settings from "Settings -> Connector Settings".
### More documentation
Find the author's documentation here: [http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin](http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin)
GNU Social Addon for Friendica
---
* Author: Tobias Diekershoff
* tobias.diekershoff@gmx.net
* License: 3-clause BSD license
### Configuration
When the addon is activated the user has to acquire the following in order to connect to the GNU Social account of choice.
* The base URL for the GNU Social API, for quitter.se this is https://quitter.se/api/
* OAuth Consumer key & secret
To get the OAuth Consumer key pair the user has to
1 ask her Friendica admin if a pair already exists or
2 has to register the Friendica server as a client application on the GNU Social server.
This can be done from the account settings under "Settings -> Connections -> Register an OAuth client application -> Register a new application" on the GNU Social server.
During the registration of the OAuth client remember the following:
* Application names must be unique on the GNU Social site, so we recommend a Name of 'friendica-nnnn', replace 'nnnn' with a random number or your website name.
* there is no callback url
* register a desktop client
* with read & write access
* the Source URL should be the URL of your Friendica server
After the required credentials for the application are stored in the configuration you have to actually connect your Friendica account with GNU Social.
This is done from the Settings -> Connector Settings page.
Follow the Sign in with GNU Social button, allow access and then copy the security code into the box provided.
Friendica will then try to acquire the final OAuth credentials from the API.
If successful, the addon settings will allow you to select to post your public messages to your GNU Social account (have a look behind the little lock symbol beneath the status "editor" on your Home or Network pages).

View file

@ -97,13 +97,6 @@ Wir nehmen hingegen Privatsphäre ernst und agieren nicht wie andere Netzwerke,
Dein Profil und deine "Wall" sollen vielleicht auch von Freunden anderer Netzwerke besucht werden können. Dein Profil und deine "Wall" sollen vielleicht auch von Freunden anderer Netzwerke besucht werden können.
Wenn du diese Seiten allerdings für Webbesucher sperrst, die Friendica nicht kennt, kann das auch Freunde anderer Netzwerke blockieren. Wenn du diese Seiten allerdings für Webbesucher sperrst, die Friendica nicht kennt, kann das auch Freunde anderer Netzwerke blockieren.
Das kann möglicherweise ungewollte Ergebnisse produzieren, wenn du lange Statusbeiträge z.B. für Twitter oder Facebook schreibst.
Wenn Friendica einen Beitrag an diese Netzwerke schickt und nur eine bestimmte Nachrichtenlänge erlaubt ist, dann verkürzen wir diesen und erstellen einen Link, der zum Originalbeitrag führt.
Der Originallink führt zurück zu deinem Friendica-Profil.
Da Friendica nicht bestätigen kann, um wen es sich handelt, kann es passieren, dass diese Leute den Beitrag nicht komplett lesen können.
Für Leute, die davon betroffen sind, schlagen wir vor, eine Zusammenfassung in Twitter-Länge zu erstellen mit mehr Details für Freunde, die den ganzen Beitrag sehen können.
Dein Profil oder deine gesamte Friendica-Seite zu blockieren, hat außerdem ernsthafte Einflüsse auf deine Kommunikation mit GNU Social-Nutzern. Dein Profil oder deine gesamte Friendica-Seite zu blockieren, hat außerdem ernsthafte Einflüsse auf deine Kommunikation mit GNU Social-Nutzern.
Diese Netzwerke kommunizieren mit anderen über öffentliche Protokolle, die nicht authentifiziert werden. Diese Netzwerke kommunizieren mit anderen über öffentliche Protokolle, die nicht authentifiziert werden.
Um deine Beiträge zu sehen, müssen diese Netzwerke deine Beiträge als "unbekannte Webbesucher" ansehen. Um deine Beiträge zu sehen, müssen diese Netzwerke deine Beiträge als "unbekannte Webbesucher" ansehen.

View file

@ -4,15 +4,10 @@ Konnektoren (Connectors)
* [Zur Startseite der Hilfe](help) * [Zur Startseite der Hilfe](help)
Konnektoren erlauben es Dir, Dich mit anderen sozialen Netzwerken zu verbinden. Konnektoren erlauben es Dir, Dich mit anderen sozialen Netzwerken zu verbinden.
Konnektoren werden nur bei bestehenden Twitter und GNU Social-Accounts benötigt. Mit diesen Konnektoren kannst Du z.B. zu Bluesky, Tumblr oder Twitter posten.
Für Bluesky und Tumblr gibt es eine bidirektionale Verbindung, d.h. du kannst Friendica nutzen, um deine Timeline von diesen Diensten zu lesen.
Außerdem gibt es einen Konnektor, um Deinen Email-Posteingang zu nutzen. Außerdem gibt es einen Konnektor, um Deinen Email-Posteingang zu nutzen.
Wenn Du keinen eigenen Knoten betreibst und wissen willst, ob der server Deiner Wahl diese Konnektoren installiert hat, kannst Du Dich darüber auf der Seite '<domain_des_friendica-servers>/friendica' informieren. Wenn Du keinen eigenen Knoten betreibst und wissen willst, ob der Server Deiner Wahl diese Konnektoren installiert hat, kannst Du Dich darüber auf der Seite '<domain_des_friendica-servers>/friendica' informieren.
Sind die Netzwerk-Konnektoren auf Deinem System installiert sind, kannst Du mit den folgenden Links die Einstellungsseiten besuchen und für Deinen Account konfigurieren:
* [Twitter](/settings/connectors)
* [GNU Social](/settings/connectors)
* [Email](/settings/connectors)
Anleitung, um sich mit Personen in bestimmten Netzwerken zu verbinden Anleitung, um sich mit Personen in bestimmten Netzwerken zu verbinden
========================================================== ==========================================================
@ -35,14 +30,6 @@ Du hast keine Möglichkeit, diesen Kontakten zu antworten.
Das erlaubt Dir, Dich mit Millionen von Seiten im Internet zu _verbinden_. Das erlaubt Dir, Dich mit Millionen von Seiten im Internet zu _verbinden_.
Alles, was dafür nötig ist, ist dass die Seite einen Feed im RSS- oder Atom Syndication-Format nutzt und welches einen Autoren und ein Bild zur Seite liefert. Alles, was dafür nötig ist, ist dass die Seite einen Feed im RSS- oder Atom Syndication-Format nutzt und welches einen Autoren und ein Bild zur Seite liefert.
**Twitter**
Um einem Twitter-Nutzer zu folgen, trage die URL der Hauptseite des Twitter-Accounts auf Deiner ["Kontakte"-Seite](contacts) in das Feld "Neuen Kontakt hinzufügen" ein.
Um zu antworten, musst Du den Twitter-Konnektor installieren und über Deinen eigenen Status-Editor antworten.
Beginne Deine Nachricht mit @twitternutzer, ersetze das aber durch den richtigen Twitter-Namen.
**Email** **Email**
Konfiguriere den Email-Konnektor auf Deiner [Einstellungsseite](settings). Konfiguriere den Email-Konnektor auf Deiner [Einstellungsseite](settings).

View file

@ -11,8 +11,7 @@ Um die Liste der Kontakte *denen du folgst* zu exportieren, geht die [Einstellun
## Import der gefolgten Kontakte ## Import der gefolgten Kontakte
Um die Kontakt CSV Datei zu importieren, gehe in die [Einstellungen](settings). Um die Kontakt CSV Datei zu importieren, gehe zu [Kontakte Importieren](settings/importcontacts).
Am Ende der Einstellungen zum Nutzerkonto findest du den Abschnitt "Kontakte Importieren".
Hier kannst du die CSV Datei auswählen und hoch laden. Hier kannst du die CSV Datei auswählen und hoch laden.
### Unterstütztes Datei Format ### Unterstütztes Datei Format

View file

@ -32,7 +32,7 @@ Hilfe
* [Update](help/Update) (EN) * [Update](help/Update) (EN)
* [Konfigurationen & Admin-Panel](help/Settings) * [Konfigurationen & Admin-Panel](help/Settings)
* [Addons](help/Addons) * [Addons](help/Addons)
* [Konnektoren (Connectors) installieren (Twitter/GNU Social)](help/Installing-Connectors) * [Konnektoren (Connectors) installieren](help/Installing-Connectors)
* [Installation eines ejabberd Servers (XMPP-Chat) mit synchronisierten Anmeldedaten](help/install-ejabberd) (EN) * [Installation eines ejabberd Servers (XMPP-Chat) mit synchronisierten Anmeldedaten](help/install-ejabberd) (EN)
* [Betreibe deine Seite mit einem SSL-Zertifikat](help/SSL) * [Betreibe deine Seite mit einem SSL-Zertifikat](help/SSL)
* [Konfigurationswerte, die nur in der config/local.config.php gesetzt werden können](help/Config) (EN) * [Konfigurationswerte, die nur in der config/local.config.php gesetzt werden können](help/Config) (EN)

View file

@ -1,85 +1,33 @@
Konnektoren installieren (Twitter/GNU Social) Konnektoren installieren
================================================== ==================================================
* [Zur Startseite der Hilfe](help) * [Zur Startseite der Hilfe](help)
Friendica nutzt Erweiterung, um die Verbindung zu anderen Netzwerken wie Twitter oder App.net zu gewährleisten. Friendica verwendet Konnektoren, um sich mit einigen Netzwerken zu verbinden, wie Tumblr oder Bluesky.
Es gibt außerdem ein Erweiterung, um über einen bestehenden GNU Social-Account diesen Service zu nutzen.
Du brauchst dieses Erweiterung aber nicht, um mit GNU Social-Mitgliedern von Friendica aus zu kommunizieren - es sei denn, du wünschst es, über einen existierenden Account einen Beitrag zu schreiben.
Alle drei Erweiterung benötigen einen Account im gewünschten Netzwerk.
Zusätzlich musst du (bzw. der Administrator der Seite) einen API-Schlüssel holen, um einen authentifizierten Zugriff zu deinem Friendica-Server herstellen zu lassen.
Alle diese Konnektoren erfordern einen Account im Zielnetzwerk.
Außerdem musst du (oder die Server-Administration) in der Regel einen API-Schlüssel erhalten, um die Verbindung zu ermöglichen.
**Seitenkonfiguration** **Seitenkonfiguration**
Erweiterung müssen vom Administrator installiert werden, bevor sie genutzt werden können. Konnektoren müssen von der Server-Administration installiert werden, bevor sie verwendet werden können.
Dieses kann über das Administrationsmenü erstellt werden. Dies geschieht über die Server-Verwaltung.
Jeder der Konnektoren benötigt zudem einen API-Schlüssel vom Service, der verbunden werden soll. Einige der Konnektoren erfordern auch einen „API-Schlüssel“ des Dienstes, mit dem du dich verbinden möchtest.
Einige Erweiterung erlaube es, diese Informationen auf den Administrationsseiten einzustellen, wohingegen andere eine direkte Bearbeitung der Konfigurationsdatei "config/local.config.php" erfordern. Für Tumblr findet man diese Informationen auf den Seiten der Server-Verwaltung, während für Twitter (X) jede Person einen eigenen API-Schlüssel erstellen muss.
Der Weg, um diese Schlüssel zu erhalten, variiert stark, jedoch brauchen fast alle einen bestehenden Account im gewünschten Service. Andere Konnektoren, wie Bluesky, benötigen überhaupt keinen API-Schlüssel.
Einmal installiert, können diese Schlüssel von allen Seitennutzern genutzt werden.
Im Folgenden findest du die Einstellungen für die verschiedenen Services (viele dieser Informationen kommen direkt aus den Quelldateien der Erweiterung): Weitere Informationen zu den spezifischen Anforderungen findest du auf der Einstellungsseite des jeweiligen Addons, entweder auf der Verwaltungsseite oder auf der Benutzerseite.
Bluesky Jetstream
---
**Twitter Erweiterung für Friendica** Um die Konnektivität mit Bluesky weiter zu verbessern, kann die „Jetstream“-Konnektivität aktiviert werden.
Jetstream ist ein Dienst, der sich mit dem Bluesky-Firehose verbindet.
Mit Jetstream kommen die Nachrichten in Echtzeit an und müssen nicht erst abgefragt werden.
Es ermöglicht auch die Echtzeitverarbeitung von Blöcken oder Tracking-Aktivitäten, die über die Bluesky-Website oder -Anwendung durchgeführt werden.
* Author: Tobias Diekershoff Um die Jetstream-Verarbeitung zu aktivieren, führe `bin/jetstream.php' über die Befehlszeile aus.
* tobias.diekershoff@gmx.net Du musst vorher die Prozess-ID-Datei in local.config.php im Abschnitt „jetstream“ mit dem Schlüssel „pidfile“ definieren.
* License:3-clause BSD license Um die verarbeiteten Nachrichten und die Drift (die Zeitdifferenz zwischen dem Datum der Nachricht und dem Datum, an dem das System diese Nachricht verarbeitet hat) zu verfolgen, wurden dem Statistik-Endpunkt einige Felder hinzugefügt.
Konfiguration:
Um dieses Erweiterung zu nutzen, benötigst du einen OAuth Consumer-Schlüsselpaar (Schlüssel und Geheimnis), das du auf der Seite [https://twitter.com/apps](https://twitter.com/apps) erhalten kannst
Registriere deine Friendica-Seite als "Client"-Anwendung mit "Read&Write"-Zugriff. Wir benötigen "Twitter als Login" nicht. Sobald du deine Anwendung installiert hast, erhältst du das Schlüsselpaar für deine Seite.
Trage dieses Schlüsselpaar in deine globale "config/local.config.php"-Datei ein.
```
[twitter]
consumerkey = your consumer_key here
consumersecret = your consumer_secret here
```
Anschließend kann der Nutzer deiner Seite die Twitter-Einstellungen selbst eintragen: "Einstellungen -> Connector Einstellungen".
**GNU Social Erweiterung für Friendica**
* Author: Tobias Diekershoff
* tobias.diekershoff@gmx.net
* License:3-clause BSD license
Konfiguration
Wenn das Addon aktiv ist, muss der Nutzer die folgenden Einstellungen vornehmen, um sich mit dem GNU Social-Account seiner Wahl zu verbinden.
* Die Basis-URL des GNU Social-API; für quitter.se ist es https://quitter.se/api/
* OAuth Consumer key & Geheimnis
Um das OAuth-Schlüsselpaar zu erhalten, muss der Nutzer
(a) seinen Friendica-Admin fragen, ob bereits ein Schlüsselpaar existiert oder
(b) einen Friendica-Server als Anwendung auf dem GNU Social-Server anmelden.
Dies kann über Einstellungen --> Connections --> "Register an OAuth client application" -> "Register a new application" auf dem GNU Social-Server durchgeführt werden.
Während der Registrierung des OAuth-Clients ist Folgendes zu beachten:
* Der Anwendungsname muss auf der GNU Social-Seite einzigartig sein, daher empfehlen wir einen Namen wie "friendica-nnnn", ersetze dabei "nnnn" mit einer frei gewählten Nummer oder deinem Webseitennamen.
* es gibt keine Callback-URL
* Registriere einen Desktop-Client
* stelle Lese- und Schreibrechte ein
* die Quell-URL sollte die URL deines Friendica-Servers sein
Sobald die benötigten Daten gespeichert sind, musst du deinen Friendica-Account mit GNU Social verbinden.
Das kannst du über Einstellungen --> Connector-Einstellungen durchführen.
Folge dem "Einloggen mit GNU Social"-Button, erlaube den Zugriff und kopiere den Sicherheitscode in die entsprechende Box.
Friendica wird dann versuchen, die abschließende OAuth-Einstellungen über die API zu beziehen.
Wenn es geklappt hat, kannst du in den Einstellungen festlegen, ob deine öffentlichen Nachrichten automatisch in deinem GNU Social-Account erscheinen soll (achte hierbei auf das kleine Schloss-Symbol im Status-Editor)

View file

@ -558,15 +558,17 @@ class Worker
if ($method_call) { if ($method_call) {
try { try {
call_user_func_array(sprintf('Friendica\Worker\%s::execute', $funcname), $argv); call_user_func_array(sprintf('Friendica\Worker\%s::execute', $funcname), $argv);
} catch (\TypeError $e) {
// No need to defer a worker queue entry if the arguments are invalid
Logger::notice('Wrong worker arguments', ['class' => $funcname, 'argv' => $argv, 'queue' => $queue, 'message' => $e->getMessage()]);
} catch (\Throwable $e) { } catch (\Throwable $e) {
Logger::error('Uncaught exception in worker execution', ['class' => get_class($e), 'message' => $e->getMessage(), 'code' => $e->getCode(), 'file' => $e->getFile() . ':' . $e->getLine(), 'trace' => $e->getTraceAsString(), 'previous' => $e->getPrevious()]); Logger::error('Uncaught exception in worker method execution', ['class' => get_class($e), 'message' => $e->getMessage(), 'code' => $e->getCode(), 'file' => $e->getFile() . ':' . $e->getLine(), 'trace' => $e->getTraceAsString(), 'previous' => $e->getPrevious()]);
Worker::defer(); Worker::defer();
} }
} else { } else {
$funcname($argv, count($argv)); try {
$funcname($argv, count($argv));
} catch (\Throwable $e) {
Logger::error('Uncaught exception in worker execution', ['message' => $e->getMessage(), 'code' => $e->getCode(), 'file' => $e->getFile() . ':' . $e->getLine(), 'trace' => $e->getTraceAsString(), 'previous' => $e->getPrevious()]);
Worker::defer();
}
} }
Logger::disableWorker(); Logger::disableWorker();

View file

@ -24,11 +24,13 @@ use Friendica\Network\HTTPClient\Client\HttpClientAccept;
use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Network\HTTPClient\Client\HttpClientOptions;
use Friendica\Network\HTTPClient\Client\HttpClientRequest; use Friendica\Network\HTTPClient\Client\HttpClientRequest;
use Friendica\Protocol\ActivityPub; use Friendica\Protocol\ActivityPub;
use Friendica\Protocol\ATProtocol;
use Friendica\Util\Images; use Friendica\Util\Images;
use Friendica\Util\Network; use Friendica\Util\Network;
use Friendica\Util\ParseUrl; use Friendica\Util\ParseUrl;
use Friendica\Util\Proxy; use Friendica\Util\Proxy;
use Friendica\Util\Strings; use Friendica\Util\Strings;
use GuzzleHttp\Psr7\Uri;
/** /**
* Class Media * Class Media
@ -237,7 +239,7 @@ class Media
$media = self::addAccount($media); $media = self::addAccount($media);
} }
if (in_array($media['type'], [self::ACTIVITY, self::LD, self::JSON])) { if (in_array($media['type'], [self::ACTIVITY, self::LD, self::JSON]) || self::isFederatedServer($media['url'])) {
$media = self::addActivity($media); $media = self::addActivity($media);
} }
@ -248,6 +250,20 @@ class Media
return $media; return $media;
} }
private static function isFederatedServer(string $url): bool
{
$baseurl = Network::getBaseUrl(new Uri($url));
if (empty($baseurl)) {
return false;
}
if (Strings::compareLink($baseurl, ATProtocol::WEB)) {
return true;
}
return DBA::exists('gserver', ['nurl' => Strings::normaliseLink($baseurl), 'network' => Protocol::FEDERATED]);
}
private static function addPreviewData(array $media): array private static function addPreviewData(array $media): array
{ {
if (!empty($media['preview-width']) && !empty($media['preview-height'])) { if (!empty($media['preview-width']) && !empty($media['preview-height'])) {

View file

@ -151,6 +151,13 @@ class BaseSettings extends BaseModule
'accesskey' => 's', 'accesskey' => 's',
]; ];
$tabs[] = [
'label' => $this->t('Import Contacts'),
'url' => 'settings/importcontacts',
'selected' => static::class == Settings\UserExport::class ? 'active' : '',
'accesskey' => '',
];
$tabs[] = [ $tabs[] = [
'label' => $this->t('Export personal data'), 'label' => $this->t('Export personal data'),
'url' => 'settings/userexport', 'url' => 'settings/userexport',

View file

@ -9,7 +9,6 @@ namespace Friendica\Module\Settings;
use Exception; use Exception;
use Friendica\Core\ACL; use Friendica\Core\ACL;
use Friendica\Core\Logger;
use Friendica\Core\Renderer; use Friendica\Core\Renderer;
use Friendica\Core\Search; use Friendica\Core\Search;
use Friendica\Core\Worker; use Friendica\Core\Worker;
@ -25,7 +24,6 @@ use Friendica\Module\BaseSettings;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException;
use Friendica\Protocol\Activity; use Friendica\Protocol\Activity;
use Friendica\Protocol\Delivery; use Friendica\Protocol\Delivery;
use Friendica\Util\Network;
use Friendica\Util\Temporal; use Friendica\Util\Temporal;
class Account extends BaseSettings class Account extends BaseSettings
@ -322,42 +320,6 @@ class Account extends BaseSettings
DI::baseUrl()->redirect($redirectUrl); DI::baseUrl()->redirect($redirectUrl);
} }
// Import Contacts from CSV file
if (!empty($request['importcontact-submit'])) {
if (isset($_FILES['importcontact-filename'])) {
// was there an error
if ($_FILES['importcontact-filename']['error'] > 0) {
Logger::notice('Contact CSV file upload error', ['error' => $_FILES['importcontact-filename']['error']]);
DI::sysmsg()->addNotice(DI::l10n()->t('Contact CSV file upload error'));
} else {
$csvArray = array_map('str_getcsv', file($_FILES['importcontact-filename']['tmp_name']));
Logger::notice('Import started', ['lines' => count($csvArray)]);
// import contacts
foreach ($csvArray as $csvRow) {
// The 1st row may, or may not contain the headers of the table
// We expect the 1st field of the row to contain either the URL
// or the handle of the account, therefore we check for either
// "http" or "@" to be present in the string.
// All other fields from the row will be ignored
if ((strpos($csvRow[0], '@') !== false) || Network::isValidHttpUrl($csvRow[0])) {
Worker::add(Worker::PRIORITY_MEDIUM, 'AddContact', DI::userSession()->getLocalUserId(), trim($csvRow[0], '@'));
} else {
Logger::notice('Invalid account', ['url' => $csvRow[0]]);
}
}
Logger::notice('Import done');
DI::sysmsg()->addInfo(DI::l10n()->t('Importing Contacts done'));
// delete temp file
unlink($_FILES['importcontact-filename']['tmp_name']);
}
} else {
Logger::notice('Import triggered, but no import file was found.');
}
DI::baseUrl()->redirect($redirectUrl);
}
if (!empty($request['relocate-submit'])) { if (!empty($request['relocate-submit'])) {
Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, DI::userSession()->getLocalUserId()); Worker::add(Worker::PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, DI::userSession()->getLocalUserId());
DI::sysmsg()->addInfo(DI::l10n()->t("Relocate message has been send to your contacts")); DI::sysmsg()->addInfo(DI::l10n()->t("Relocate message has been send to your contacts"));
@ -633,11 +595,6 @@ class Account extends BaseSettings
'$h_descadvn' => DI::l10n()->t('Change the behaviour of this account for special situations'), '$h_descadvn' => DI::l10n()->t('Change the behaviour of this account for special situations'),
'$pagetype' => $pagetype, '$pagetype' => $pagetype,
'$importcontact' => DI::l10n()->t('Import Contacts'),
'$importcontact_text' => DI::l10n()->t('Upload a CSV file that contains the handle of your followed accounts in the first column you exported from the old account.'),
'$importcontact_button' => DI::l10n()->t('Upload File'),
'$importcontact_maxsize' => DI::config()->get('system', 'max_csv_file_size', 30720),
'$relocate' => DI::l10n()->t('Relocate'), '$relocate' => DI::l10n()->t('Relocate'),
'$relocate_text' => DI::l10n()->t("If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."), '$relocate_text' => DI::l10n()->t("If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."),
'$relocate_button' => DI::l10n()->t("Resend relocate message to contacts"), '$relocate_button' => DI::l10n()->t("Resend relocate message to contacts"),

View file

@ -62,7 +62,6 @@ class Connectors extends BaseSettings
$this->pconfig->set($this->session->getLocalUserId(), 'system', 'api_spoiler_title', intval($request['api_spoiler_title'])); $this->pconfig->set($this->session->getLocalUserId(), 'system', 'api_spoiler_title', intval($request['api_spoiler_title']));
$this->pconfig->set($this->session->getLocalUserId(), 'system', 'api_auto_attach', intval($request['api_auto_attach'])); $this->pconfig->set($this->session->getLocalUserId(), 'system', 'api_auto_attach', intval($request['api_auto_attach']));
$this->pconfig->set($this->session->getLocalUserId(), 'system', 'article_mode', intval($request['article_mode'])); $this->pconfig->set($this->session->getLocalUserId(), 'system', 'article_mode', intval($request['article_mode']));
$this->pconfig->set($this->session->getLocalUserId(), 'ostatus', 'legacy_contact', $request['legacy_contact']);
} elseif (!empty($request['mail-submit']) && function_exists('imap_open') && !$this->config->get('system', 'imap_disabled')) { } elseif (!empty($request['mail-submit']) && function_exists('imap_open') && !$this->config->get('system', 'imap_disabled')) {
$mail_server = $request['mail_server'] ?? ''; $mail_server = $request['mail_server'] ?? '';
$mail_port = $request['mail_port'] ?? ''; $mail_port = $request['mail_port'] ?? '';
@ -127,11 +126,6 @@ class Connectors extends BaseSettings
$api_spoiler_title = intval($this->pconfig->get($this->session->getLocalUserId(), 'system', 'api_spoiler_title', true)); $api_spoiler_title = intval($this->pconfig->get($this->session->getLocalUserId(), 'system', 'api_spoiler_title', true));
$api_auto_attach = intval($this->pconfig->get($this->session->getLocalUserId(), 'system', 'api_auto_attach', false)); $api_auto_attach = intval($this->pconfig->get($this->session->getLocalUserId(), 'system', 'api_auto_attach', false));
$article_mode = intval($this->pconfig->get($this->session->getLocalUserId(), 'system', 'article_mode')); $article_mode = intval($this->pconfig->get($this->session->getLocalUserId(), 'system', 'article_mode'));
$legacy_contact = $this->pconfig->get($this->session->getLocalUserId(), 'ostatus', 'legacy_contact');
if (!empty($legacy_contact)) {
$this->baseUrl->redirect('ostatus/subscribe?url=' . urlencode($legacy_contact));
}
$connector_settings_forms = []; $connector_settings_forms = [];
foreach ($this->database->selectToArray('hook', ['file', 'function'], ['hook' => 'connector_settings']) as $hook) { foreach ($this->database->selectToArray('hook', ['file', 'function'], ['hook' => 'connector_settings']) as $hook) {
@ -215,7 +209,6 @@ class Connectors extends BaseSettings
'$api_spoiler_title' => ['api_spoiler_title', $this->t('API: Use spoiler field as title'), $api_spoiler_title, $this->t('When activated, the "spoiler_text" field in the API will be used for the title on standalone posts. When deactivated it will be used for spoiler text. For comments it will always be used for spoiler text.')], '$api_spoiler_title' => ['api_spoiler_title', $this->t('API: Use spoiler field as title'), $api_spoiler_title, $this->t('When activated, the "spoiler_text" field in the API will be used for the title on standalone posts. When deactivated it will be used for spoiler text. For comments it will always be used for spoiler text.')],
'$api_auto_attach' => ['api_auto_attach', $this->t('API: Automatically links at the end of the post as attached posts'), $api_auto_attach, $this->t('When activated, added links at the end of the post react the same way as added links in the web interface.')], '$api_auto_attach' => ['api_auto_attach', $this->t('API: Automatically links at the end of the post as attached posts'), $api_auto_attach, $this->t('When activated, added links at the end of the post react the same way as added links in the web interface.')],
'$article_mode' => ['article_mode', $this->t('Article Mode'), $article_mode, $this->t("Controls how posts with titles are transmitted. Mastodon and its forks don't display the content of these posts if the post is created in the correct (default) way."), $article_modes], '$article_mode' => ['article_mode', $this->t('Article Mode'), $article_mode, $this->t("Controls how posts with titles are transmitted. Mastodon and its forks don't display the content of these posts if the post is created in the correct (default) way."), $article_modes],
'$legacy_contact' => ['legacy_contact', $this->t('Your legacy ActivityPub/GNU Social account'), $legacy_contact, $this->t('If you enter your old account name from an ActivityPub based system or your 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.')],
'$connector_settings_forms' => $connector_settings_forms, '$connector_settings_forms' => $connector_settings_forms,

View file

@ -0,0 +1,118 @@
<?php
// Copyright (C) 2010-2024, the Friendica project
// SPDX-FileCopyrightText: 2010-2024 the Friendica project
//
// SPDX-License-Identifier: AGPL-3.0-or-later
namespace Friendica\Module\Settings;
use Friendica\App;
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Core\L10n;
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
use Friendica\Core\Renderer;
use Friendica\Core\Session\Capability\IHandleUserSessions;
use Friendica\Core\Worker;
use Friendica\Module\BaseSettings;
use Friendica\Module\Response;
use Friendica\Navigation\SystemMessages;
use Friendica\Network\HTTPException;
use Friendica\Util\Network;
use Friendica\Util\Profiler;
use Psr\Log\LoggerInterface;
/**
* Module to export user data
**/
class ContactImport extends BaseSettings
{
/** @var IManageConfigValues */
private $config;
/** @var IManagePersonalConfigValues */
private $pconfig;
/** @var SystemMessages */
protected $systemMessages;
public function __construct(SystemMessages $systemMessages, IManagePersonalConfigValues $pconfig, IManageConfigValues $config, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
{
parent::__construct($session, $page, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
$this->config = $config;
$this->pconfig = $pconfig;
$this->systemMessages = $systemMessages;
}
protected function post(array $request = [])
{
if (!$this->session->getLocalUserId()) {
throw new HTTPException\ForbiddenException($this->l10n->t('Permission denied.'));
}
self::checkFormSecurityTokenRedirectOnError($this->args->getQueryString(), 'contactimport');
parent::post();
// Import Contacts from CSV file
if (!empty($request['importcontact-submit'])) {
$this->pconfig->set($this->session->getLocalUserId(), 'ostatus', 'legacy_contact', $request['legacy_contact']);
if (isset($_FILES['importcontact-filename']) && !empty($_FILES['importcontact-filename']['tmp_name'])) {
// was there an error
if ($_FILES['importcontact-filename']['error'] > 0) {
$this->logger->notice('Contact CSV file upload error', ['error' => $_FILES['importcontact-filename']['error']]);
$this->systemMessages->addNotice($this->l10n->t('Contact CSV file upload error'));
} else {
$csvArray = array_map('str_getcsv', file($_FILES['importcontact-filename']['tmp_name']));
$this->logger->notice('Import started', ['lines' => count($csvArray)]);
// import contacts
foreach ($csvArray as $csvRow) {
// The 1st row may, or may not contain the headers of the table
// We expect the 1st field of the row to contain either the URL
// or the handle of the account, therefore we check for either
// "http" or "@" to be present in the string.
// All other fields from the row will be ignored
if ((strpos($csvRow[0], '@') !== false) || Network::isValidHttpUrl($csvRow[0])) {
Worker::add(Worker::PRIORITY_MEDIUM, 'AddContact', $this->session->getLocalUserId(), trim($csvRow[0], '@'));
} else {
$this->logger->notice('Invalid account', ['url' => $csvRow[0]]);
}
}
$this->logger->notice('Import done');
$this->systemMessages->addInfo($this->l10n->t('Importing Contacts done'));
// delete temp file
unlink($_FILES['importcontact-filename']['tmp_name']);
}
} else {
$this->logger->notice('Import triggered, but no import file was found.');
}
}
$this->baseUrl->redirect($this->args->getQueryString());
}
protected function content(array $request = []): string
{
if (!$this->session->getLocalUserId()) {
throw new HTTPException\ForbiddenException($this->l10n->t('Permission denied.'));
}
parent::content();
$legacy_contact = $this->pconfig->get($this->session->getLocalUserId(), 'ostatus', 'legacy_contact');
if (!empty($legacy_contact)) {
$this->baseUrl->redirect('ostatus/subscribe?url=' . urlencode($legacy_contact));
}
$tpl = Renderer::getMarkupTemplate('settings/contactimport.tpl');
return Renderer::replaceMacros($tpl, [
'$title' => $this->l10n->t('Import Contacts'),
'$submit' => $this->l10n->t('Save Settings'),
'$form_security_token' => self::getFormSecurityToken('contactimport'),
'$importcontact_text' => $this->l10n->t('Upload a CSV file that contains the handle of your followed accounts in the first column you exported from the old account.'),
'$importcontact_button' => $this->l10n->t('Upload File'),
'$importcontact_maxsize' => $this->config->get('system', 'max_csv_file_size', 30720),
'$legacy_contact' => ['legacy_contact', $this->t('Your legacy ActivityPub/GNU Social account'), $legacy_contact, $this->t('If you enter your old account name from an ActivityPub based system or your 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.')],
]);
}
}

View file

@ -129,7 +129,17 @@ final class ATProtocol
} }
$data = $this->get($pds . '/xrpc/' . $url, [HttpClientOptions::HEADERS => $headers]); $data = $this->get($pds . '/xrpc/' . $url, [HttpClientOptions::HEADERS => $headers]);
$this->pConfig->set($uid, 'bluesky', 'status', is_null($data) ? self::STATUS_API_FAIL : self::STATUS_SUCCESS); if (empty($data) || (!empty($data->code) && ($data->code < 200 || $data->code >= 400))) {
$this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_API_FAIL);
if (!empty($data->message)) {
$this->pConfig->set($uid, 'bluesky', 'status-message', $data->message);
} elseif (!empty($data->code)) {
$this->pConfig->set($uid, 'bluesky', 'status-message', 'Error Code: ' . $data->code);
}
} elseif (!empty($data)) {
$this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_SUCCESS);
$this->pConfig->set($uid, 'bluesky', 'status-message', '');
}
return $data; return $data;
} }
@ -156,6 +166,9 @@ final class ATProtocol
return null; return null;
} }
$data->code = $curlResult->getReturnCode(); $data->code = $curlResult->getReturnCode();
} elseif (($curlResult->getReturnCode() < 200) || ($curlResult->getReturnCode() >= 400)) {
$this->logger->notice('Unexpected return code', ['url' => $url, 'code' => $curlResult->getReturnCode(), 'error' => $data ?: $curlResult->getBodyString()]);
$data->code = $curlResult->getReturnCode();
} }
Item::incrementInbound(Protocol::BLUESKY); Item::incrementInbound(Protocol::BLUESKY);
@ -197,6 +210,7 @@ final class ATProtocol
} catch (\Exception $e) { } catch (\Exception $e) {
$this->logger->notice('Exception on post', ['exception' => $e]); $this->logger->notice('Exception on post', ['exception' => $e]);
$this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_API_FAIL); $this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_API_FAIL);
$this->pConfig->set($uid, 'bluesky', 'status-message', $e->getMessage());
return null; return null;
} }
@ -205,6 +219,11 @@ final class ATProtocol
$this->logger->notice('API Error', ['url' => $url, 'code' => $curlResult->getReturnCode(), 'error' => $data ?: $curlResult->getBodyString()]); $this->logger->notice('API Error', ['url' => $url, 'code' => $curlResult->getReturnCode(), 'error' => $data ?: $curlResult->getBodyString()]);
if (!$data) { if (!$data) {
$this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_API_FAIL); $this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_API_FAIL);
if (!empty($data->message)) {
$this->pConfig->set($uid, 'bluesky', 'status-message', $data->message);
} elseif (!empty($data->code)) {
$this->pConfig->set($uid, 'bluesky', 'status-message', 'Error Code: ' . $data->code);
}
return null; return null;
} }
$data->code = $curlResult->getReturnCode(); $data->code = $curlResult->getReturnCode();
@ -212,8 +231,14 @@ final class ATProtocol
if (!empty($data->code) && ($data->code >= 200) && ($data->code < 400)) { if (!empty($data->code) && ($data->code >= 200) && ($data->code < 400)) {
$this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_SUCCESS); $this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_SUCCESS);
$this->pConfig->set($uid, 'bluesky', 'status-message', '');
} else { } else {
$this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_API_FAIL); $this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_API_FAIL);
if (!empty($data->message)) {
$this->pConfig->set($uid, 'bluesky', 'status-message', $data->message);
} elseif (!empty($data->code)) {
$this->pConfig->set($uid, 'bluesky', 'status-message', 'Error Code: ' . $data->code);
}
} }
return $data; return $data;
} }
@ -501,10 +526,6 @@ final class ATProtocol
$data = $this->post($uid, '/xrpc/com.atproto.server.refreshSession', '', ['Authorization' => ['Bearer ' . $token]]); $data = $this->post($uid, '/xrpc/com.atproto.server.refreshSession', '', ['Authorization' => ['Bearer ' . $token]]);
if (empty($data) || empty($data->accessJwt)) { if (empty($data) || empty($data->accessJwt)) {
$this->logger->debug('Refresh failed', ['return' => $data]); $this->logger->debug('Refresh failed', ['return' => $data]);
$password = $this->pConfig->get($uid, 'bluesky', 'password');
if (!empty($password)) {
return $this->createUserToken($uid, $password);
}
$this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_TOKEN_FAIL); $this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_TOKEN_FAIL);
return ''; return '';
} }
@ -541,6 +562,7 @@ final class ATProtocol
$this->pConfig->set($uid, 'bluesky', 'refresh_token', $data->refreshJwt); $this->pConfig->set($uid, 'bluesky', 'refresh_token', $data->refreshJwt);
$this->pConfig->set($uid, 'bluesky', 'token_created', time()); $this->pConfig->set($uid, 'bluesky', 'token_created', time());
$this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_TOKEN_OK); $this->pConfig->set($uid, 'bluesky', 'status', self::STATUS_TOKEN_OK);
$this->pConfig->set($uid, 'bluesky', 'status-message', '');
return $data->accessJwt; return $data->accessJwt;
} }
} }

View file

@ -1,5 +1,5 @@
#!/usr/bin/env php
<?php <?php
/** /**
* Copyright (C) 2010-2024, the Friendica project * Copyright (C) 2010-2024, the Friendica project
* SPDX-FileCopyrightText: 2010-2024 the Friendica project * SPDX-FileCopyrightText: 2010-2024 the Friendica project

View file

@ -1,5 +1,5 @@
#!/usr/bin/env php
<?php <?php
/** /**
* Copyright (C) 2010-2024, the Friendica project * Copyright (C) 2010-2024, the Friendica project
* SPDX-FileCopyrightText: 2010-2024 the Friendica project * SPDX-FileCopyrightText: 2010-2024 the Friendica project

View file

@ -1,5 +1,5 @@
#!/usr/bin/env php
<?php <?php
/** /**
* Copyright (C) 2010-2024, the Friendica project * Copyright (C) 2010-2024, the Friendica project
* SPDX-FileCopyrightText: 2010-2024 the Friendica project * SPDX-FileCopyrightText: 2010-2024 the Friendica project
@ -178,7 +178,7 @@ class Processor
if ($id) { if ($id) {
$this->logger->info('Post inserted', ['id' => $id, 'guid' => $item['guid']]); $this->logger->info('Post inserted', ['id' => $id, 'guid' => $item['guid']]);
} elseif (Post::exists(['uid' => $uid, 'uri-id' => $item['uri-id']])) { } elseif (Post::exists(['uid' => $uid, 'uri-id' => $item['uri-id']])) {
$this->logger->warning('Post was found', ['guid' => $item['guid'], 'uri' => $item['uri']]); $this->logger->notice('Post was found', ['guid' => $item['guid'], 'uri' => $item['uri']]);
} else { } else {
$this->logger->warning('Post was not inserted', ['guid' => $item['guid'], 'uri' => $item['uri']]); $this->logger->warning('Post was not inserted', ['guid' => $item['guid'], 'uri' => $item['uri']]);
} }
@ -208,7 +208,7 @@ class Processor
if ($id) { if ($id) {
$this->logger->info('Repost inserted', ['id' => $id]); $this->logger->info('Repost inserted', ['id' => $id]);
} elseif (Post::exists(['uid' => $uid, 'uri-id' => $item['uri-id']])) { } elseif (Post::exists(['uid' => $uid, 'uri-id' => $item['uri-id']])) {
$this->logger->warning('Repost was found', ['uri' => $item['uri']]); $this->logger->notice('Repost was found', ['uri' => $item['uri']]);
} else { } else {
$this->logger->warning('Repost was not inserted', ['uri' => $item['uri']]); $this->logger->warning('Repost was not inserted', ['uri' => $item['uri']]);
} }
@ -237,7 +237,7 @@ class Processor
if ($id) { if ($id) {
$this->logger->info('Like inserted', ['id' => $id]); $this->logger->info('Like inserted', ['id' => $id]);
} elseif (Post::exists(['uid' => $uid, 'uri-id' => $item['uri-id']])) { } elseif (Post::exists(['uid' => $uid, 'uri-id' => $item['uri-id']])) {
$this->logger->warning('Like was found', ['uri' => $item['uri']]); $this->logger->notice('Like was found', ['uri' => $item['uri']]);
} else { } else {
$this->logger->warning('Like was not inserted', ['uri' => $item['uri']]); $this->logger->warning('Like was not inserted', ['uri' => $item['uri']]);
} }
@ -317,7 +317,7 @@ class Processor
if ($id) { if ($id) {
$this->logger->info('Fetched post inserted', ['id' => $id, 'guid' => $item['guid']]); $this->logger->info('Fetched post inserted', ['id' => $id, 'guid' => $item['guid']]);
} elseif (Post::exists(['uid' => $uid, 'uri-id' => $item['uri-id']])) { } elseif (Post::exists(['uid' => $uid, 'uri-id' => $item['uri-id']])) {
$this->logger->warning('Fetched post was found', ['guid' => $item['guid'], 'uri' => $item['uri']]); $this->logger->notice('Fetched post was found', ['guid' => $item['guid'], 'uri' => $item['uri']]);
} else { } else {
$this->logger->warning('Fetched post was not inserted', ['guid' => $item['guid'], 'uri' => $item['uri']]); $this->logger->warning('Fetched post was not inserted', ['guid' => $item['guid'], 'uri' => $item['uri']]);
} }

View file

@ -164,7 +164,7 @@ class Delivery
} }
Logger::notice('Delivery failed', ['retcode' => $response->getReturnCode(), 'serverfailure' => $serverfail, 'drop' => $drop, 'runtime' => round($runtime, 3), 'uri-id' => $uri_id, 'uid' => $uid, 'item_id' => $item_id, 'cmd' => $cmd, 'inbox' => $inbox]); Logger::notice('Delivery failed', ['retcode' => $response->getReturnCode() ?? 0, 'serverfailure' => $serverfail, 'drop' => $drop, 'runtime' => round($runtime, 3), 'uri-id' => $uri_id, 'uid' => $uid, 'item_id' => $item_id, 'cmd' => $cmd, 'inbox' => $inbox]);
} }
if ($uri_id) { if ($uri_id) {
if ($success) { if ($success) {

View file

@ -127,7 +127,6 @@ class JsonLD
$messages[] = $currentException->getMessage(); $messages[] = $currentException->getMessage();
} while ($currentException = $currentException->getPrevious()); } while ($currentException = $currentException->getPrevious());
Logger::warning('JsonLD normalize error');
Logger::notice('JsonLD normalize error', ['messages' => $messages]); Logger::notice('JsonLD normalize error', ['messages' => $messages]);
Logger::info('JsonLD normalize error', ['trace' => $e->getTraceAsString()]); Logger::info('JsonLD normalize error', ['trace' => $e->getTraceAsString()]);
Logger::debug('JsonLD normalize error', ['jsonobj' => $jsonobj]); Logger::debug('JsonLD normalize error', ['jsonobj' => $jsonobj]);

View file

@ -682,4 +682,19 @@ class Network
return (string)Uri::fromParts($parts); return (string)Uri::fromParts($parts);
} }
/**
* Get base url without a path, fragment or query
*
* @param UriInterface $uri
* @return string baseurl
*/
public static function getBaseUrl(UriInterface $uri): string
{
return $uri
->withUserInfo('')
->withQuery('')
->withFragment('')
->withPath('');
}
} }

View file

@ -453,6 +453,10 @@ class Notifier
} }
$cdata = Contact::getPublicAndUserContactID($contact['id'], $sender_uid); $cdata = Contact::getPublicAndUserContactID($contact['id'], $sender_uid);
if (empty($cdata)) {
Logger::info('No contact entry found', ['id' => $contact['id'], 'uid' => $sender_uid]);
continue;
}
if (in_array($cdata['public'] ?: $contact['id'], $ap_contacts)) { if (in_array($cdata['public'] ?: $contact['id'], $ap_contacts)) {
Logger::info('The public contact is already delivered via AP, so skip delivery via legacy DFRN/Diaspora', ['batch' => $in_batch, 'target' => $post_uriid, 'uid' => $sender_uid, 'contact' => $contact['url']]); Logger::info('The public contact is already delivered via AP, so skip delivery via legacy DFRN/Diaspora', ['batch' => $in_batch, 'target' => $post_uriid, 'uid' => $sender_uid, 'contact' => $contact['url']]);
continue; continue;
@ -639,8 +643,8 @@ class Notifier
private static function activityPubDelivery($cmd, array $target_item, array $parent, array $thr_parent, int $priority, string $created, array $recipients): array private static function activityPubDelivery($cmd, array $target_item, array $parent, array $thr_parent, int $priority, string $created, array $recipients): array
{ {
// Don't deliver via AP when the starting post isn't from a federated network // Don't deliver via AP when the starting post isn't from a federated network
if (!in_array($parent['network'], Protocol::FEDERATED)) { if (!in_array($parent['network'] ?? '', Protocol::FEDERATED)) {
Logger::info('Parent network is no federated network, so no AP delivery', ['network' => $parent['network']]); Logger::info('Parent network is no federated network, so no AP delivery', ['network' => $parent['network'] ?? '']);
return ['count' => 0, 'contacts' => []]; return ['count' => 0, 'contacts' => []];
} }

View file

@ -622,6 +622,7 @@ return [
'/delegation[/{action}/{user_id}]' => [Module\Settings\Delegation::class, [R::GET, R::POST]], '/delegation[/{action}/{user_id}]' => [Module\Settings\Delegation::class, [R::GET, R::POST]],
'/display' => [Module\Settings\Display::class, [R::GET, R::POST]], '/display' => [Module\Settings\Display::class, [R::GET, R::POST]],
'/features' => [Module\Settings\Features::class, [R::GET, R::POST]], '/features' => [Module\Settings\Features::class, [R::GET, R::POST]],
'/importcontacts' => [Module\Settings\ContactImport::class, [R::GET, R::POST]],
'/oauth' => [Module\Settings\OAuth::class, [R::GET, R::POST]], '/oauth' => [Module\Settings\OAuth::class, [R::GET, R::POST]],
'/profile' => [ '/profile' => [
'[/]' => [Module\Settings\Profile\Index::class, [R::GET, R::POST]], '[/]' => [Module\Settings\Profile\Index::class, [R::GET, R::POST]],

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2024.12-dev\n" "Project-Id-Version: 2024.12-dev\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-07 15:24+0000\n" "POT-Creation-Date: 2024-12-23 10:09+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -65,8 +65,10 @@ msgstr ""
#: src/Module/Profile/Schedule.php:42 src/Module/Register.php:71 #: src/Module/Profile/Schedule.php:42 src/Module/Register.php:71
#: src/Module/Register.php:84 src/Module/Register.php:200 #: src/Module/Register.php:84 src/Module/Register.php:200
#: src/Module/Register.php:239 src/Module/Search/Directory.php:23 #: src/Module/Register.php:239 src/Module/Search/Directory.php:23
#: src/Module/Settings/Account.php:36 src/Module/Settings/Account.php:375 #: src/Module/Settings/Account.php:34 src/Module/Settings/Account.php:337
#: src/Module/Settings/Channels.php:52 src/Module/Settings/Channels.php:127 #: src/Module/Settings/Channels.php:52 src/Module/Settings/Channels.php:127
#: src/Module/Settings/ContactImport.php:49
#: src/Module/Settings/ContactImport.php:96
#: src/Module/Settings/Delegation.php:76 src/Module/Settings/Display.php:80 #: src/Module/Settings/Delegation.php:76 src/Module/Settings/Display.php:80
#: src/Module/Settings/Display.php:194 #: src/Module/Settings/Display.php:194
#: src/Module/Settings/Profile/Photo/Crop.php:148 #: src/Module/Settings/Profile/Photo/Crop.php:148
@ -283,7 +285,7 @@ msgstr ""
#: mod/message.php:188 mod/message.php:344 mod/photos.php:1253 #: mod/message.php:188 mod/message.php:344 mod/photos.php:1253
#: src/Content/Conversation.php:389 src/Content/Conversation.php:1565 #: src/Content/Conversation.php:389 src/Content/Conversation.php:1565
#: src/Module/Item/Compose.php:202 src/Module/Post/Edit.php:136 #: src/Module/Item/Compose.php:202 src/Module/Post/Edit.php:136
#: src/Object/Post.php:604 #: src/Object/Post.php:605
msgid "Please wait" msgid "Please wait"
msgstr "" msgstr ""
@ -305,7 +307,7 @@ msgstr ""
#: src/Module/Moderation/Report/Create.php:249 #: src/Module/Moderation/Report/Create.php:249
#: src/Module/Profile/Profile.php:265 src/Module/Settings/Profile/Index.php:248 #: src/Module/Profile/Profile.php:265 src/Module/Settings/Profile/Index.php:248
#: src/Module/Settings/Server/Action.php:65 src/Module/User/Delegation.php:177 #: src/Module/Settings/Server/Action.php:65 src/Module/User/Delegation.php:177
#: src/Object/Post.php:1145 view/theme/duepuntozero/config.php:73 #: src/Object/Post.php:1146 view/theme/duepuntozero/config.php:73
#: view/theme/frio/config.php:155 view/theme/quattro/config.php:75 #: view/theme/frio/config.php:155 view/theme/quattro/config.php:75
#: view/theme/vier/config.php:123 #: view/theme/vier/config.php:123
msgid "Submit" msgid "Submit"
@ -588,30 +590,30 @@ msgstr ""
#: mod/photos.php:1091 mod/photos.php:1147 mod/photos.php:1227 #: mod/photos.php:1091 mod/photos.php:1147 mod/photos.php:1227
#: src/Module/Contact.php:600 src/Module/Item/Compose.php:184 #: src/Module/Contact.php:600 src/Module/Item/Compose.php:184
#: src/Object/Post.php:1142 #: src/Object/Post.php:1143
msgid "This is you" msgid "This is you"
msgstr "" msgstr ""
#: mod/photos.php:1093 mod/photos.php:1149 mod/photos.php:1229 #: mod/photos.php:1093 mod/photos.php:1149 mod/photos.php:1229
#: src/Module/Moderation/Reports.php:105 src/Object/Post.php:598 #: src/Module/Moderation/Reports.php:105 src/Object/Post.php:599
#: src/Object/Post.php:1144 #: src/Object/Post.php:1145
msgid "Comment" msgid "Comment"
msgstr "" msgstr ""
#: mod/photos.php:1095 mod/photos.php:1151 mod/photos.php:1231 #: mod/photos.php:1095 mod/photos.php:1151 mod/photos.php:1231
#: src/Content/Conversation.php:403 src/Module/Calendar/Event/Form.php:234 #: src/Content/Conversation.php:403 src/Module/Calendar/Event/Form.php:234
#: src/Module/Item/Compose.php:197 src/Module/Post/Edit.php:156 #: src/Module/Item/Compose.php:197 src/Module/Post/Edit.php:156
#: src/Object/Post.php:1158 #: src/Object/Post.php:1159
msgid "Preview" msgid "Preview"
msgstr "" msgstr ""
#: mod/photos.php:1096 src/Content/Conversation.php:357 #: mod/photos.php:1096 src/Content/Conversation.php:357
#: src/Module/Post/Edit.php:121 src/Object/Post.php:1146 #: src/Module/Post/Edit.php:121 src/Object/Post.php:1147
msgid "Loading..." msgid "Loading..."
msgstr "" msgstr ""
#: mod/photos.php:1188 src/Content/Conversation.php:1487 #: mod/photos.php:1188 src/Content/Conversation.php:1487
#: src/Object/Post.php:260 #: src/Object/Post.php:261
msgid "Select" msgid "Select"
msgstr "" msgstr ""
@ -619,24 +621,24 @@ msgstr ""
#: src/Module/Moderation/Users/Active.php:125 #: src/Module/Moderation/Users/Active.php:125
#: src/Module/Moderation/Users/Blocked.php:125 #: src/Module/Moderation/Users/Blocked.php:125
#: src/Module/Moderation/Users/Index.php:140 #: src/Module/Moderation/Users/Index.php:140
#: src/Module/Settings/Connectors.php:233 #: src/Module/Settings/Connectors.php:226
#: src/Module/Settings/Server/Index.php:95 #: src/Module/Settings/Server/Index.php:95
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: mod/photos.php:1250 src/Object/Post.php:426 #: mod/photos.php:1250 src/Object/Post.php:427
msgid "Like" msgid "Like"
msgstr "" msgstr ""
#: mod/photos.php:1251 src/Object/Post.php:426 #: mod/photos.php:1251 src/Object/Post.php:427
msgid "I like this (toggle)" msgid "I like this (toggle)"
msgstr "" msgstr ""
#: mod/photos.php:1252 src/Object/Post.php:427 #: mod/photos.php:1252 src/Object/Post.php:428
msgid "Dislike" msgid "Dislike"
msgstr "" msgstr ""
#: mod/photos.php:1254 src/Object/Post.php:427 #: mod/photos.php:1254 src/Object/Post.php:428
msgid "I don't like this (toggle)" msgid "I don't like this (toggle)"
msgstr "" msgstr ""
@ -644,7 +646,7 @@ msgstr ""
msgid "Map" msgid "Map"
msgstr "" msgstr ""
#: src/App.php:461 #: src/App.php:255
msgid "Apologies but the website is unavailable at the moment." msgid "Apologies but the website is unavailable at the moment."
msgstr "" msgstr ""
@ -959,12 +961,12 @@ msgid "Enter new password: "
msgstr "" msgstr ""
#: src/Console/User.php:196 src/Module/Security/PasswordTooLong.php:55 #: src/Console/User.php:196 src/Module/Security/PasswordTooLong.php:55
#: src/Module/Settings/Account.php:59 #: src/Module/Settings/Account.php:57
msgid "Password update failed. Please try again." msgid "Password update failed. Please try again."
msgstr "" msgstr ""
#: src/Console/User.php:199 src/Module/Security/PasswordTooLong.php:58 #: src/Console/User.php:199 src/Module/Security/PasswordTooLong.php:58
#: src/Module/Settings/Account.php:62 #: src/Module/Settings/Account.php:60
msgid "Password changed." msgid "Password changed."
msgstr "" msgstr ""
@ -1231,7 +1233,7 @@ msgid "Visible to <strong>everybody</strong>"
msgstr "" msgstr ""
#: src/Content/Conversation.php:327 src/Module/Item/Compose.php:196 #: src/Content/Conversation.php:327 src/Module/Item/Compose.php:196
#: src/Object/Post.php:1157 #: src/Object/Post.php:1158
msgid "Please enter a image/video/audio/webpage URL:" msgid "Please enter a image/video/audio/webpage URL:"
msgstr "" msgstr ""
@ -1276,52 +1278,52 @@ msgid "attach file"
msgstr "" msgstr ""
#: src/Content/Conversation.php:362 src/Module/Item/Compose.php:186 #: src/Content/Conversation.php:362 src/Module/Item/Compose.php:186
#: src/Module/Post/Edit.php:162 src/Object/Post.php:1147 #: src/Module/Post/Edit.php:162 src/Object/Post.php:1148
msgid "Bold" msgid "Bold"
msgstr "" msgstr ""
#: src/Content/Conversation.php:363 src/Module/Item/Compose.php:187 #: src/Content/Conversation.php:363 src/Module/Item/Compose.php:187
#: src/Module/Post/Edit.php:163 src/Object/Post.php:1148 #: src/Module/Post/Edit.php:163 src/Object/Post.php:1149
msgid "Italic" msgid "Italic"
msgstr "" msgstr ""
#: src/Content/Conversation.php:364 src/Module/Item/Compose.php:188 #: src/Content/Conversation.php:364 src/Module/Item/Compose.php:188
#: src/Module/Post/Edit.php:164 src/Object/Post.php:1149 #: src/Module/Post/Edit.php:164 src/Object/Post.php:1150
msgid "Underline" msgid "Underline"
msgstr "" msgstr ""
#: src/Content/Conversation.php:365 src/Module/Item/Compose.php:189 #: src/Content/Conversation.php:365 src/Module/Item/Compose.php:189
#: src/Module/Post/Edit.php:165 src/Object/Post.php:1151 #: src/Module/Post/Edit.php:165 src/Object/Post.php:1152
msgid "Quote" msgid "Quote"
msgstr "" msgstr ""
#: src/Content/Conversation.php:366 src/Module/Item/Compose.php:190 #: src/Content/Conversation.php:366 src/Module/Item/Compose.php:190
#: src/Module/Post/Edit.php:166 src/Object/Post.php:1152 #: src/Module/Post/Edit.php:166 src/Object/Post.php:1153
msgid "Add emojis" msgid "Add emojis"
msgstr "" msgstr ""
#: src/Content/Conversation.php:367 src/Module/Item/Compose.php:191 #: src/Content/Conversation.php:367 src/Module/Item/Compose.php:191
#: src/Object/Post.php:1150 #: src/Object/Post.php:1151
msgid "Content Warning" msgid "Content Warning"
msgstr "" msgstr ""
#: src/Content/Conversation.php:368 src/Module/Item/Compose.php:192 #: src/Content/Conversation.php:368 src/Module/Item/Compose.php:192
#: src/Module/Post/Edit.php:167 src/Object/Post.php:1153 #: src/Module/Post/Edit.php:167 src/Object/Post.php:1154
msgid "Code" msgid "Code"
msgstr "" msgstr ""
#: src/Content/Conversation.php:369 src/Module/Item/Compose.php:193 #: src/Content/Conversation.php:369 src/Module/Item/Compose.php:193
#: src/Object/Post.php:1154 #: src/Object/Post.php:1155
msgid "Image" msgid "Image"
msgstr "" msgstr ""
#: src/Content/Conversation.php:370 src/Module/Item/Compose.php:194 #: src/Content/Conversation.php:370 src/Module/Item/Compose.php:194
#: src/Module/Post/Edit.php:168 src/Object/Post.php:1155 #: src/Module/Post/Edit.php:168 src/Object/Post.php:1156
msgid "Link" msgid "Link"
msgstr "" msgstr ""
#: src/Content/Conversation.php:371 src/Module/Item/Compose.php:195 #: src/Content/Conversation.php:371 src/Module/Item/Compose.php:195
#: src/Module/Post/Edit.php:169 src/Object/Post.php:1156 #: src/Module/Post/Edit.php:169 src/Object/Post.php:1157
msgid "Link or Media" msgid "Link or Media"
msgstr "" msgstr ""
@ -1477,25 +1479,25 @@ msgstr ""
msgid "Pushed to us" msgid "Pushed to us"
msgstr "" msgstr ""
#: src/Content/Conversation.php:1507 src/Object/Post.php:247 #: src/Content/Conversation.php:1507 src/Object/Post.php:248
msgid "Pinned item" msgid "Pinned item"
msgstr "" msgstr ""
#: src/Content/Conversation.php:1524 src/Object/Post.php:541 #: src/Content/Conversation.php:1524 src/Object/Post.php:542
#: src/Object/Post.php:542 #: src/Object/Post.php:543
#, php-format #, php-format
msgid "View %s's profile @ %s" msgid "View %s's profile @ %s"
msgstr "" msgstr ""
#: src/Content/Conversation.php:1538 src/Object/Post.php:529 #: src/Content/Conversation.php:1538 src/Object/Post.php:530
msgid "Categories:" msgid "Categories:"
msgstr "" msgstr ""
#: src/Content/Conversation.php:1539 src/Object/Post.php:530 #: src/Content/Conversation.php:1539 src/Object/Post.php:531
msgid "Filed under:" msgid "Filed under:"
msgstr "" msgstr ""
#: src/Content/Conversation.php:1547 src/Object/Post.php:556 #: src/Content/Conversation.php:1547 src/Object/Post.php:557
#, php-format #, php-format
msgid "%s from %s" msgid "%s from %s"
msgstr "" msgstr ""
@ -1633,7 +1635,7 @@ msgstr ""
msgid "Posts that mention or involve you" msgid "Posts that mention or involve you"
msgstr "" msgstr ""
#: src/Content/Conversation/Factory/Network.php:28 src/Object/Post.php:397 #: src/Content/Conversation/Factory/Network.php:28 src/Object/Post.php:398
msgid "Starred" msgid "Starred"
msgstr "" msgstr ""
@ -1734,7 +1736,7 @@ msgid "Display posts with the selected protocols."
msgstr "" msgstr ""
#: src/Content/Feature.php:119 src/Content/Widget.php:561 #: src/Content/Feature.php:119 src/Content/Widget.php:561
#: src/Module/Settings/Account.php:429 #: src/Module/Settings/Account.php:391
msgid "Account Types" msgid "Account Types"
msgstr "" msgstr ""
@ -1904,17 +1906,17 @@ msgstr ""
msgid "Collapse" msgid "Collapse"
msgstr "" msgstr ""
#: src/Content/Item.php:429 src/Object/Post.php:288 #: src/Content/Item.php:429 src/Object/Post.php:289
#, php-format #, php-format
msgid "Ignore %s server" msgid "Ignore %s server"
msgstr "" msgstr ""
#: src/Content/Item.php:433 src/Module/Settings/Channels.php:188 #: src/Content/Item.php:433 src/Module/Settings/Channels.php:188
#: src/Module/Settings/Channels.php:209 src/Object/Post.php:502 #: src/Module/Settings/Channels.php:209 src/Object/Post.php:503
msgid "Languages" msgid "Languages"
msgstr "" msgstr ""
#: src/Content/Item.php:436 src/Object/Post.php:582 #: src/Content/Item.php:436 src/Object/Post.php:583
msgid "Search Text" msgid "Search Text"
msgstr "" msgstr ""
@ -2146,7 +2148,7 @@ msgstr ""
msgid "See all notifications" msgid "See all notifications"
msgstr "" msgstr ""
#: src/Content/Nav.php:301 src/Module/Settings/Connectors.php:233 #: src/Content/Nav.php:301 src/Module/Settings/Connectors.php:226
msgid "Mark as seen" msgid "Mark as seen"
msgstr "" msgstr ""
@ -2175,7 +2177,7 @@ msgid "Manage other pages"
msgstr "" msgstr ""
#: src/Content/Nav.php:313 src/Module/Admin/Addons/Details.php:98 #: src/Content/Nav.php:313 src/Module/Admin/Addons/Details.php:98
#: src/Module/Admin/Themes/Details.php:85 src/Module/BaseSettings.php:170 #: src/Module/Admin/Themes/Details.php:85 src/Module/BaseSettings.php:177
#: src/Module/Welcome.php:38 view/theme/frio/theme.php:233 #: src/Module/Welcome.php:38 view/theme/frio/theme.php:233
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
@ -3467,7 +3469,7 @@ msgstr ""
msgid "[no subject]" msgid "[no subject]"
msgstr "" msgstr ""
#: src/Model/Photo.php:1191 src/Module/Media/Photo/Upload.php:154 #: src/Model/Photo.php:1192 src/Module/Media/Photo/Upload.php:154
msgid "Wall Photos" msgid "Wall Photos"
msgstr "" msgstr ""
@ -3923,9 +3925,10 @@ msgstr ""
#: src/Module/Admin/Addons/Index.php:61 src/Module/Admin/Features.php:69 #: src/Module/Admin/Addons/Index.php:61 src/Module/Admin/Features.php:69
#: src/Module/Admin/Logs/Settings.php:76 src/Module/Admin/Site.php:450 #: src/Module/Admin/Logs/Settings.php:76 src/Module/Admin/Site.php:450
#: src/Module/Admin/Themes/Index.php:105 src/Module/Admin/Tos.php:72 #: src/Module/Admin/Themes/Index.php:105 src/Module/Admin/Tos.php:72
#: src/Module/Settings/Account.php:545 src/Module/Settings/Addons.php:64 #: src/Module/Settings/Account.php:507 src/Module/Settings/Addons.php:64
#: src/Module/Settings/Connectors.php:149 #: src/Module/Settings/Connectors.php:143
#: src/Module/Settings/Connectors.php:235 #: src/Module/Settings/Connectors.php:228
#: src/Module/Settings/ContactImport.php:110
#: src/Module/Settings/Delegation.php:179 src/Module/Settings/Display.php:317 #: src/Module/Settings/Delegation.php:179 src/Module/Settings/Display.php:317
#: src/Module/Settings/Features.php:61 #: src/Module/Settings/Features.php:61
msgid "Save Settings" msgid "Save Settings"
@ -5766,7 +5769,7 @@ msgstr ""
msgid "Display" msgid "Display"
msgstr "" msgstr ""
#: src/Module/BaseSettings.php:120 src/Module/Settings/Connectors.php:195 #: src/Module/BaseSettings.php:120 src/Module/Settings/Connectors.php:189
msgid "Social Networks" msgid "Social Networks"
msgstr "" msgstr ""
@ -5782,11 +5785,15 @@ msgstr ""
msgid "Remote servers" msgid "Remote servers"
msgstr "" msgstr ""
#: src/Module/BaseSettings.php:155 src/Module/Settings/UserExport.php:84 #: src/Module/BaseSettings.php:155 src/Module/Settings/ContactImport.php:109
msgid "Import Contacts"
msgstr ""
#: src/Module/BaseSettings.php:162 src/Module/Settings/UserExport.php:84
msgid "Export personal data" msgid "Export personal data"
msgstr "" msgstr ""
#: src/Module/BaseSettings.php:162 #: src/Module/BaseSettings.php:169
msgid "Remove account" msgid "Remove account"
msgstr "" msgstr ""
@ -6042,7 +6049,7 @@ msgid "Only show blocked contacts"
msgstr "" msgstr ""
#: src/Module/Contact.php:349 src/Module/Contact.php:421 #: src/Module/Contact.php:349 src/Module/Contact.php:421
#: src/Module/Settings/Server/Index.php:93 src/Object/Post.php:385 #: src/Module/Settings/Server/Index.php:93 src/Object/Post.php:386
msgid "Ignored" msgid "Ignored"
msgstr "" msgstr ""
@ -7432,23 +7439,23 @@ msgstr ""
msgid "List of pending user deletions" msgid "List of pending user deletions"
msgstr "" msgstr ""
#: src/Module/Moderation/BaseUsers.php:110 src/Module/Settings/Account.php:469 #: src/Module/Moderation/BaseUsers.php:110 src/Module/Settings/Account.php:431
msgid "Normal Account Page" msgid "Normal Account Page"
msgstr "" msgstr ""
#: src/Module/Moderation/BaseUsers.php:111 src/Module/Settings/Account.php:476 #: src/Module/Moderation/BaseUsers.php:111 src/Module/Settings/Account.php:438
msgid "Soapbox Page" msgid "Soapbox Page"
msgstr "" msgstr ""
#: src/Module/Moderation/BaseUsers.php:112 src/Module/Settings/Account.php:483 #: src/Module/Moderation/BaseUsers.php:112 src/Module/Settings/Account.php:445
msgid "Public Group" msgid "Public Group"
msgstr "" msgstr ""
#: src/Module/Moderation/BaseUsers.php:113 src/Module/Settings/Account.php:490 #: src/Module/Moderation/BaseUsers.php:113 src/Module/Settings/Account.php:452
msgid "Public Group - Restricted" msgid "Public Group - Restricted"
msgstr "" msgstr ""
#: src/Module/Moderation/BaseUsers.php:114 src/Module/Settings/Account.php:497 #: src/Module/Moderation/BaseUsers.php:114 src/Module/Settings/Account.php:459
msgid "Automatic Friend Page" msgid "Automatic Friend Page"
msgstr "" msgstr ""
@ -7457,22 +7464,22 @@ msgid "Private Group"
msgstr "" msgstr ""
#: src/Module/Moderation/BaseUsers.php:118 src/Module/Moderation/Summary.php:42 #: src/Module/Moderation/BaseUsers.php:118 src/Module/Moderation/Summary.php:42
#: src/Module/Settings/Account.php:440 #: src/Module/Settings/Account.php:402
msgid "Personal Page" msgid "Personal Page"
msgstr "" msgstr ""
#: src/Module/Moderation/BaseUsers.php:119 src/Module/Moderation/Summary.php:43 #: src/Module/Moderation/BaseUsers.php:119 src/Module/Moderation/Summary.php:43
#: src/Module/Settings/Account.php:447 #: src/Module/Settings/Account.php:409
msgid "Organisation Page" msgid "Organisation Page"
msgstr "" msgstr ""
#: src/Module/Moderation/BaseUsers.php:120 src/Module/Moderation/Summary.php:44 #: src/Module/Moderation/BaseUsers.php:120 src/Module/Moderation/Summary.php:44
#: src/Module/Settings/Account.php:454 #: src/Module/Settings/Account.php:416
msgid "News Page" msgid "News Page"
msgstr "" msgstr ""
#: src/Module/Moderation/BaseUsers.php:121 src/Module/Moderation/Summary.php:45 #: src/Module/Moderation/BaseUsers.php:121 src/Module/Moderation/Summary.php:45
#: src/Module/Settings/Account.php:461 #: src/Module/Settings/Account.php:423
msgid "Community Group" msgid "Community Group"
msgstr "" msgstr ""
@ -8050,7 +8057,7 @@ msgstr[1] ""
msgid "URL of the reported contact." msgid "URL of the reported contact."
msgstr "" msgstr ""
#: src/Module/Moderation/Summary.php:46 src/Module/Settings/Account.php:418 #: src/Module/Moderation/Summary.php:46 src/Module/Settings/Account.php:380
msgid "Channel Relay" msgid "Channel Relay"
msgstr "" msgstr ""
@ -8424,7 +8431,7 @@ msgstr ""
msgid "Keep this window open until done." msgid "Keep this window open until done."
msgstr "" msgstr ""
#: src/Module/OpenSearch.php:54 #: src/Module/OpenSearch.php:55
#, php-format #, php-format
msgid "Search in Friendica %s" msgid "Search in Friendica %s"
msgstr "" msgstr ""
@ -8755,7 +8762,7 @@ msgid "Please repeat your e-mail address:"
msgstr "" msgstr ""
#: src/Module/Register.php:156 src/Module/Security/PasswordTooLong.php:86 #: src/Module/Register.php:156 src/Module/Security/PasswordTooLong.php:86
#: src/Module/Settings/Account.php:551 #: src/Module/Settings/Account.php:513
msgid "New Password:" msgid "New Password:"
msgstr "" msgstr ""
@ -8764,7 +8771,7 @@ msgid "Leave empty for an auto generated password."
msgstr "" msgstr ""
#: src/Module/Register.php:157 src/Module/Security/PasswordTooLong.php:87 #: src/Module/Register.php:157 src/Module/Security/PasswordTooLong.php:87
#: src/Module/Settings/Account.php:552 #: src/Module/Settings/Account.php:514
msgid "Confirm:" msgid "Confirm:"
msgstr "" msgstr ""
@ -8949,7 +8956,7 @@ msgid "Account not found. Please register a new account or login to your existin
msgstr "" msgstr ""
#: src/Module/Security/PasswordTooLong.php:43 #: src/Module/Security/PasswordTooLong.php:43
#: src/Module/Settings/Account.php:51 #: src/Module/Settings/Account.php:49
msgid "Passwords do not match." msgid "Passwords do not match."
msgstr "" msgstr ""
@ -8958,7 +8965,7 @@ msgid "Password does not need changing."
msgstr "" msgstr ""
#: src/Module/Security/PasswordTooLong.php:63 #: src/Module/Security/PasswordTooLong.php:63
#: src/Module/Settings/Account.php:65 #: src/Module/Settings/Account.php:63
msgid "Password unchanged." msgid "Password unchanged."
msgstr "" msgstr ""
@ -8975,22 +8982,22 @@ msgid "Update Password"
msgstr "" msgstr ""
#: src/Module/Security/PasswordTooLong.php:85 #: src/Module/Security/PasswordTooLong.php:85
#: src/Module/Settings/Account.php:553 #: src/Module/Settings/Account.php:515
msgid "Current Password:" msgid "Current Password:"
msgstr "" msgstr ""
#: src/Module/Security/PasswordTooLong.php:85 #: src/Module/Security/PasswordTooLong.php:85
#: src/Module/Settings/Account.php:553 #: src/Module/Settings/Account.php:515
msgid "Your current password to confirm the changes" msgid "Your current password to confirm the changes"
msgstr "" msgstr ""
#: src/Module/Security/PasswordTooLong.php:86 #: src/Module/Security/PasswordTooLong.php:86
#: src/Module/Settings/Account.php:537 #: src/Module/Settings/Account.php:499
msgid "Allowed characters are a-z, A-Z, 0-9 and special characters except white spaces and accentuated letters." msgid "Allowed characters are a-z, A-Z, 0-9 and special characters except white spaces and accentuated letters."
msgstr "" msgstr ""
#: src/Module/Security/PasswordTooLong.php:86 #: src/Module/Security/PasswordTooLong.php:86
#: src/Module/Settings/Account.php:538 #: src/Module/Settings/Account.php:500
msgid "Password length is limited to 72 characters." msgid "Password length is limited to 72 characters."
msgstr "" msgstr ""
@ -9084,445 +9091,425 @@ msgstr ""
msgid "Verify code and complete login" msgid "Verify code and complete login"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:80 #: src/Module/Settings/Account.php:78
msgid "Please use a shorter name." msgid "Please use a shorter name."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:83 #: src/Module/Settings/Account.php:81
msgid "Name too short." msgid "Name too short."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:92 #: src/Module/Settings/Account.php:90
msgid "Wrong Password." msgid "Wrong Password."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:97 #: src/Module/Settings/Account.php:95
msgid "Invalid email." msgid "Invalid email."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:101 #: src/Module/Settings/Account.php:99
msgid "Cannot change to that email." msgid "Cannot change to that email."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:130 src/Module/Settings/Account.php:179 #: src/Module/Settings/Account.php:128 src/Module/Settings/Account.php:177
#: src/Module/Settings/Account.php:200 src/Module/Settings/Account.php:284 #: src/Module/Settings/Account.php:198 src/Module/Settings/Account.php:282
#: src/Module/Settings/Account.php:313 #: src/Module/Settings/Account.php:311
msgid "Settings were not updated." msgid "Settings were not updated."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:331 #: src/Module/Settings/Account.php:325
msgid "Contact CSV file upload error"
msgstr ""
#: src/Module/Settings/Account.php:350
msgid "Importing Contacts done"
msgstr ""
#: src/Module/Settings/Account.php:363
msgid "Relocate message has been send to your contacts" msgid "Relocate message has been send to your contacts"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:380 #: src/Module/Settings/Account.php:342
msgid "Unable to find your profile. Please contact your admin." msgid "Unable to find your profile. Please contact your admin."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:420 #: src/Module/Settings/Account.php:382
msgid "Account for a service that automatically shares content based on user defined channels." msgid "Account for a service that automatically shares content based on user defined channels."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:430 #: src/Module/Settings/Account.php:392
msgid "Personal Page Subtypes" msgid "Personal Page Subtypes"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:431 #: src/Module/Settings/Account.php:393
msgid "Community Group Subtypes" msgid "Community Group Subtypes"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:442 #: src/Module/Settings/Account.php:404
msgid "Account for a personal profile." msgid "Account for a personal profile."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:449 #: src/Module/Settings/Account.php:411
msgid "Account for an organisation that automatically approves contact requests as \"Followers\"." msgid "Account for an organisation that automatically approves contact requests as \"Followers\"."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:456 #: src/Module/Settings/Account.php:418
msgid "Account for a news reflector that automatically approves contact requests as \"Followers\"." msgid "Account for a news reflector that automatically approves contact requests as \"Followers\"."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:463 #: src/Module/Settings/Account.php:425
msgid "Account for community discussions." msgid "Account for community discussions."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:471 #: src/Module/Settings/Account.php:433
msgid "Account for a regular personal profile that requires manual approval of \"Friends\" and \"Followers\"." msgid "Account for a regular personal profile that requires manual approval of \"Friends\" and \"Followers\"."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:478 #: src/Module/Settings/Account.php:440
msgid "Account for a public profile that automatically approves contact requests as \"Followers\"." msgid "Account for a public profile that automatically approves contact requests as \"Followers\"."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:485 #: src/Module/Settings/Account.php:447
msgid "Automatically approves all contact requests." msgid "Automatically approves all contact requests."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:492 #: src/Module/Settings/Account.php:454
msgid "Contact requests have to be manually approved." msgid "Contact requests have to be manually approved."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:499 #: src/Module/Settings/Account.php:461
msgid "Account for a popular profile that automatically approves contact requests as \"Friends\"." msgid "Account for a popular profile that automatically approves contact requests as \"Friends\"."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:504 #: src/Module/Settings/Account.php:466
msgid "Private Group [Experimental]" msgid "Private Group [Experimental]"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:506 #: src/Module/Settings/Account.php:468
msgid "Requires manual approval of contact requests." msgid "Requires manual approval of contact requests."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:515 #: src/Module/Settings/Account.php:477
msgid "OpenID:" msgid "OpenID:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:515 #: src/Module/Settings/Account.php:477
msgid "(Optional) Allow this OpenID to login to this account." msgid "(Optional) Allow this OpenID to login to this account."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:523 #: src/Module/Settings/Account.php:485
msgid "Publish your profile in your local site directory?" msgid "Publish your profile in your local site directory?"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:523 #: src/Module/Settings/Account.php:485
#, php-format #, php-format
msgid "Your profile will be published in this node's <a href=\"%s\">local directory</a>. Your profile details may be publicly visible depending on the system settings." msgid "Your profile will be published in this node's <a href=\"%s\">local directory</a>. Your profile details may be publicly visible depending on the system settings."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:529 #: src/Module/Settings/Account.php:491
#, php-format #, php-format
msgid "Your profile will also be published in the global friendica directories (e.g. <a href=\"%s\">%s</a>)." msgid "Your profile will also be published in the global friendica directories (e.g. <a href=\"%s\">%s</a>)."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:542 #: src/Module/Settings/Account.php:504
msgid "Account Settings" msgid "Account Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:543 #: src/Module/Settings/Account.php:505
#, php-format #, php-format
msgid "Your Identity Address is <strong>'%s'</strong> or '%s'." msgid "Your Identity Address is <strong>'%s'</strong> or '%s'."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:550 #: src/Module/Settings/Account.php:512
msgid "Password Settings" msgid "Password Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:552 #: src/Module/Settings/Account.php:514
msgid "Leave password fields blank unless changing" msgid "Leave password fields blank unless changing"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:554 #: src/Module/Settings/Account.php:516
msgid "Password:" msgid "Password:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:554 #: src/Module/Settings/Account.php:516
msgid "Your current password to confirm the changes of the email address" msgid "Your current password to confirm the changes of the email address"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:557 #: src/Module/Settings/Account.php:519
msgid "Delete OpenID URL" msgid "Delete OpenID URL"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:559 #: src/Module/Settings/Account.php:521
msgid "Basic Settings" msgid "Basic Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:560 #: src/Module/Settings/Account.php:522
#: src/Module/Settings/Profile/Index.php:274 #: src/Module/Settings/Profile/Index.php:274
msgid "Display name:" msgid "Display name:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:561 #: src/Module/Settings/Account.php:523
msgid "Email Address:" msgid "Email Address:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:562 #: src/Module/Settings/Account.php:524
msgid "Your Timezone:" msgid "Your Timezone:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:563 #: src/Module/Settings/Account.php:525
msgid "Your Language:" msgid "Your Language:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:563 #: src/Module/Settings/Account.php:525
msgid "Set the language we use to show you friendica interface and to send you emails" msgid "Set the language we use to show you friendica interface and to send you emails"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:564 #: src/Module/Settings/Account.php:526
msgid "Default Post Location:" msgid "Default Post Location:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:565 #: src/Module/Settings/Account.php:527
msgid "Use Browser Location:" msgid "Use Browser Location:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:567 #: src/Module/Settings/Account.php:529
msgid "Security and Privacy Settings" msgid "Security and Privacy Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:569 #: src/Module/Settings/Account.php:531
msgid "Maximum Friend Requests/Day:" msgid "Maximum Friend Requests/Day:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:569 #: src/Module/Settings/Account.php:531
msgid "(to prevent spam abuse)" msgid "(to prevent spam abuse)"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:571 #: src/Module/Settings/Account.php:533
msgid "Allow your profile to be searchable globally?" msgid "Allow your profile to be searchable globally?"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:571 #: src/Module/Settings/Account.php:533
msgid "Activate this setting if you want others to easily find and follow you. Your profile will be searchable on remote systems. This setting also determines whether Friendica will inform search engines that your profile should be indexed or not." msgid "Activate this setting if you want others to easily find and follow you. Your profile will be searchable on remote systems. This setting also determines whether Friendica will inform search engines that your profile should be indexed or not."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:572 #: src/Module/Settings/Account.php:534
msgid "Hide your contact/friend list from viewers of your profile?" msgid "Hide your contact/friend list from viewers of your profile?"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:572 #: src/Module/Settings/Account.php:534
msgid "A list of your contacts is displayed on your profile page. Activate this option to disable the display of your contact list." msgid "A list of your contacts is displayed on your profile page. Activate this option to disable the display of your contact list."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:573 #: src/Module/Settings/Account.php:535
msgid "Hide your public content from anonymous viewers" msgid "Hide your public content from anonymous viewers"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:573 #: src/Module/Settings/Account.php:535
msgid "Anonymous visitors will only see your basic profile details. Your public posts and replies will still be freely accessible on the remote servers of your followers and through relays." msgid "Anonymous visitors will only see your basic profile details. Your public posts and replies will still be freely accessible on the remote servers of your followers and through relays."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:574 #: src/Module/Settings/Account.php:536
msgid "Make public posts unlisted" msgid "Make public posts unlisted"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:574 #: src/Module/Settings/Account.php:536
msgid "Your public posts will not appear on the community pages or in search results, nor be sent to relay servers. However they can still appear on public feeds on remote servers." msgid "Your public posts will not appear on the community pages or in search results, nor be sent to relay servers. However they can still appear on public feeds on remote servers."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:575 #: src/Module/Settings/Account.php:537
msgid "Make all posted pictures accessible" msgid "Make all posted pictures accessible"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:575 #: src/Module/Settings/Account.php:537
msgid "This option makes every posted picture accessible via the direct link. This is a workaround for the problem that most other networks can't handle permissions on pictures. Non public pictures still won't be visible for the public on your photo albums though." msgid "This option makes every posted picture accessible via the direct link. This is a workaround for the problem that most other networks can't handle permissions on pictures. Non public pictures still won't be visible for the public on your photo albums though."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:576 #: src/Module/Settings/Account.php:538
msgid "Allow friends to post to your profile page?" msgid "Allow friends to post to your profile page?"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:576 #: src/Module/Settings/Account.php:538
msgid "Your contacts may write posts on your profile wall. These posts will be distributed to your contacts" msgid "Your contacts may write posts on your profile wall. These posts will be distributed to your contacts"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:577 #: src/Module/Settings/Account.php:539
msgid "Allow friends to tag your posts?" msgid "Allow friends to tag your posts?"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:577 #: src/Module/Settings/Account.php:539
msgid "Your contacts can add additional tags to your posts." msgid "Your contacts can add additional tags to your posts."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:578 #: src/Module/Settings/Account.php:540
msgid "Default privacy circle for new contacts" msgid "Default privacy circle for new contacts"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:579 #: src/Module/Settings/Account.php:541
msgid "Default privacy circle for new group contacts" msgid "Default privacy circle for new group contacts"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:580 #: src/Module/Settings/Account.php:542
msgid "Default Post Permissions" msgid "Default Post Permissions"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:584 #: src/Module/Settings/Account.php:546
msgid "Expiration settings" msgid "Expiration settings"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:585 #: src/Module/Settings/Account.php:547
msgid "Automatically expire posts after this many days:" msgid "Automatically expire posts after this many days:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:585 #: src/Module/Settings/Account.php:547
msgid "If empty, posts will not expire. Expired posts will be deleted" msgid "If empty, posts will not expire. Expired posts will be deleted"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:586 #: src/Module/Settings/Account.php:548
msgid "Expire posts" msgid "Expire posts"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:586 #: src/Module/Settings/Account.php:548
msgid "When activated, posts and comments will be expired." msgid "When activated, posts and comments will be expired."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:587 #: src/Module/Settings/Account.php:549
msgid "Expire personal notes" msgid "Expire personal notes"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:587 #: src/Module/Settings/Account.php:549
msgid "When activated, the personal notes on your profile page will be expired." msgid "When activated, the personal notes on your profile page will be expired."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:588 #: src/Module/Settings/Account.php:550
msgid "Expire starred posts" msgid "Expire starred posts"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:588 #: src/Module/Settings/Account.php:550
msgid "Starring posts keeps them from being expired. That behaviour is overwritten by this setting." msgid "Starring posts keeps them from being expired. That behaviour is overwritten by this setting."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:589 #: src/Module/Settings/Account.php:551
msgid "Only expire posts by others" msgid "Only expire posts by others"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:589 #: src/Module/Settings/Account.php:551
msgid "When activated, your own posts never expire. Then the settings above are only valid for posts you received." msgid "When activated, your own posts never expire. Then the settings above are only valid for posts you received."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:592 #: src/Module/Settings/Account.php:554
msgid "Notification Settings" msgid "Notification Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:593 #: src/Module/Settings/Account.php:555
msgid "Send a notification email when:" msgid "Send a notification email when:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:594 #: src/Module/Settings/Account.php:556
msgid "You receive an introduction" msgid "You receive an introduction"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:595 #: src/Module/Settings/Account.php:557
msgid "Your introductions are confirmed" msgid "Your introductions are confirmed"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:596 #: src/Module/Settings/Account.php:558
msgid "Someone writes on your profile wall" msgid "Someone writes on your profile wall"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:597 #: src/Module/Settings/Account.php:559
msgid "Someone writes a followup comment" msgid "Someone writes a followup comment"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:598 #: src/Module/Settings/Account.php:560
msgid "You receive a private message" msgid "You receive a private message"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:599 #: src/Module/Settings/Account.php:561
msgid "You receive a friend suggestion" msgid "You receive a friend suggestion"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:600 #: src/Module/Settings/Account.php:562
msgid "You are tagged in a post" msgid "You are tagged in a post"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:602 #: src/Module/Settings/Account.php:564
msgid "Create a desktop notification when:" msgid "Create a desktop notification when:"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:603 #: src/Module/Settings/Account.php:565
msgid "Someone tagged you" msgid "Someone tagged you"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:604 #: src/Module/Settings/Account.php:566
msgid "Someone directly commented on your post" msgid "Someone directly commented on your post"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:605 #: src/Module/Settings/Account.php:567
msgid "Someone liked your content" msgid "Someone liked your content"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:605 src/Module/Settings/Account.php:606 #: src/Module/Settings/Account.php:567 src/Module/Settings/Account.php:568
msgid "Can only be enabled, when the direct comment notification is enabled." msgid "Can only be enabled, when the direct comment notification is enabled."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:606 #: src/Module/Settings/Account.php:568
msgid "Someone shared your content" msgid "Someone shared your content"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:607 #: src/Module/Settings/Account.php:569
msgid "Someone commented in your thread" msgid "Someone commented in your thread"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:608 #: src/Module/Settings/Account.php:570
msgid "Someone commented in a thread where you commented" msgid "Someone commented in a thread where you commented"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:609 #: src/Module/Settings/Account.php:571
msgid "Someone commented in a thread where you interacted" msgid "Someone commented in a thread where you interacted"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:611 #: src/Module/Settings/Account.php:573
msgid "Activate desktop notifications" msgid "Activate desktop notifications"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:611 #: src/Module/Settings/Account.php:573
msgid "Show desktop popup on new notifications" msgid "Show desktop popup on new notifications"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:615 #: src/Module/Settings/Account.php:577
msgid "Text-only notification emails" msgid "Text-only notification emails"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:617 #: src/Module/Settings/Account.php:579
msgid "Send text only notification emails, without the html part" msgid "Send text only notification emails, without the html part"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:621 #: src/Module/Settings/Account.php:583
msgid "Show detailled notifications" msgid "Show detailled notifications"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:623 #: src/Module/Settings/Account.php:585
msgid "Per default, notifications are condensed to a single notification per item. When enabled every notification is displayed." msgid "Per default, notifications are condensed to a single notification per item. When enabled every notification is displayed."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:627 #: src/Module/Settings/Account.php:589
msgid "Show notifications of ignored contacts" msgid "Show notifications of ignored contacts"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:629 #: src/Module/Settings/Account.php:591
msgid "You don't see posts from ignored contacts. But you still see their comments. This setting controls if you want to still receive regular notifications that are caused by ignored contacts or not." msgid "You don't see posts from ignored contacts. But you still see their comments. This setting controls if you want to still receive regular notifications that are caused by ignored contacts or not."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:632 #: src/Module/Settings/Account.php:594
msgid "Advanced Account/Page Type Settings" msgid "Advanced Account/Page Type Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:633 #: src/Module/Settings/Account.php:595
msgid "Change the behaviour of this account for special situations" msgid "Change the behaviour of this account for special situations"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:636 #: src/Module/Settings/Account.php:598
msgid "Import Contacts"
msgstr ""
#: src/Module/Settings/Account.php:637
msgid "Upload a CSV file that contains the handle of your followed accounts in the first column you exported from the old account."
msgstr ""
#: src/Module/Settings/Account.php:638
msgid "Upload File"
msgstr ""
#: src/Module/Settings/Account.php:641
msgid "Relocate" msgid "Relocate"
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:642 #: src/Module/Settings/Account.php:599
msgid "If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button." msgid "If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."
msgstr "" msgstr ""
#: src/Module/Settings/Account.php:643 #: src/Module/Settings/Account.php:600
msgid "Resend relocate message to contacts" msgid "Resend relocate message to contacts"
msgstr "" msgstr ""
@ -9670,186 +9657,202 @@ msgstr ""
msgid "Delete entry from the channel list?" msgid "Delete entry from the channel list?"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:108 #: src/Module/Settings/Connectors.php:107
msgid "Failed to connect with email account using the settings provided." msgid "Failed to connect with email account using the settings provided."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:155 #: src/Module/Settings/Connectors.php:149
#: src/Module/Settings/Connectors.php:156 #: src/Module/Settings/Connectors.php:150
msgid "Diaspora (Socialhome, Hubzilla)" msgid "Diaspora (Socialhome, Hubzilla)"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:155 #: src/Module/Settings/Connectors.php:149
#, php-format #, php-format
msgid "Built-in support for %s connectivity is enabled" msgid "Built-in support for %s connectivity is enabled"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:156 #: src/Module/Settings/Connectors.php:150
#, php-format #, php-format
msgid "Built-in support for %s connectivity is disabled" msgid "Built-in support for %s connectivity is disabled"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:167 #: src/Module/Settings/Connectors.php:161
msgid "Email access is disabled on this site." msgid "Email access is disabled on this site."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:182 #: src/Module/Settings/Connectors.php:176
#: src/Module/Settings/Connectors.php:233 #: src/Module/Settings/Connectors.php:226
msgid "None" msgid "None"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:186 #: src/Module/Settings/Connectors.php:180
msgid "Default (Mastodon will display the title and a link to the post)" msgid "Default (Mastodon will display the title and a link to the post)"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:187 #: src/Module/Settings/Connectors.php:181
msgid "Use the summary (Mastodon and some others will treat it as content warning)" msgid "Use the summary (Mastodon and some others will treat it as content warning)"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:188 #: src/Module/Settings/Connectors.php:182
msgid "Embed the title in the body" msgid "Embed the title in the body"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:199 #: src/Module/Settings/Connectors.php:193
msgid "General Social Media Settings" msgid "General Social Media Settings"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:202 #: src/Module/Settings/Connectors.php:196
msgid "Followed content scope" msgid "Followed content scope"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:204 #: src/Module/Settings/Connectors.php:198
msgid "By default, conversations in which your follows participated but didn't start will be shown in your timeline. You can turn this behavior off, or expand it to the conversations in which your follows liked a post." msgid "By default, conversations in which your follows participated but didn't start will be shown in your timeline. You can turn this behavior off, or expand it to the conversations in which your follows liked a post."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:206 #: src/Module/Settings/Connectors.php:200
msgid "Only conversations my follows started" msgid "Only conversations my follows started"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:207 #: src/Module/Settings/Connectors.php:201
msgid "Conversations my follows started or commented on (default)" msgid "Conversations my follows started or commented on (default)"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:208 #: src/Module/Settings/Connectors.php:202
msgid "Any conversation my follows interacted with, including likes" msgid "Any conversation my follows interacted with, including likes"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:211 #: src/Module/Settings/Connectors.php:205
msgid "Collapse sensitive posts" msgid "Collapse sensitive posts"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:211 #: src/Module/Settings/Connectors.php:205
msgid "If a post is marked as \"sensitive\", it will be displayed in a collapsed state, if this option is enabled." msgid "If a post is marked as \"sensitive\", it will be displayed in a collapsed state, if this option is enabled."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:212 #: src/Module/Settings/Connectors.php:206
msgid "Enable intelligent shortening" msgid "Enable intelligent shortening"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:212 #: src/Module/Settings/Connectors.php:206
msgid "Normally the system tries to find the best link to add to shortened posts. If disabled, every shortened post will always point to the original friendica post." msgid "Normally the system tries to find the best link to add to shortened posts. If disabled, every shortened post will always point to the original friendica post."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:213 #: src/Module/Settings/Connectors.php:207
msgid "Enable simple text shortening" msgid "Enable simple text shortening"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:213 #: src/Module/Settings/Connectors.php:207
msgid "Normally the system shortens posts at the next line feed. If this option is enabled then the system will shorten the text at the maximum character limit." msgid "Normally the system shortens posts at the next line feed. If this option is enabled then the system will shorten the text at the maximum character limit."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:214 #: src/Module/Settings/Connectors.php:208
msgid "Attach the link title" msgid "Attach the link title"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:214 #: src/Module/Settings/Connectors.php:208
msgid "When activated, the title of the attached link will be added as a title on posts to Diaspora. This is mostly helpful with \"remote-self\" contacts that share feed content." msgid "When activated, the title of the attached link will be added as a title on posts to Diaspora. This is mostly helpful with \"remote-self\" contacts that share feed content."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:215 #: src/Module/Settings/Connectors.php:209
msgid "API: Use spoiler field as title" msgid "API: Use spoiler field as title"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:215 #: src/Module/Settings/Connectors.php:209
msgid "When activated, the \"spoiler_text\" field in the API will be used for the title on standalone posts. When deactivated it will be used for spoiler text. For comments it will always be used for spoiler text." msgid "When activated, the \"spoiler_text\" field in the API will be used for the title on standalone posts. When deactivated it will be used for spoiler text. For comments it will always be used for spoiler text."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:216 #: src/Module/Settings/Connectors.php:210
msgid "API: Automatically links at the end of the post as attached posts" msgid "API: Automatically links at the end of the post as attached posts"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:216 #: src/Module/Settings/Connectors.php:210
msgid "When activated, added links at the end of the post react the same way as added links in the web interface." msgid "When activated, added links at the end of the post react the same way as added links in the web interface."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:217 #: src/Module/Settings/Connectors.php:211
msgid "Article Mode" msgid "Article Mode"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:217 #: src/Module/Settings/Connectors.php:211
msgid "Controls how posts with titles are transmitted. Mastodon and its forks don't display the content of these posts if the post is created in the correct (default) way." msgid "Controls how posts with titles are transmitted. Mastodon and its forks don't display the content of these posts if the post is created in the correct (default) way."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:218 #: src/Module/Settings/Connectors.php:215
msgid "Your legacy ActivityPub/GNU Social account"
msgstr ""
#: src/Module/Settings/Connectors.php:218
msgid "If you enter your old account name from an ActivityPub based system or your 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."
msgstr ""
#: src/Module/Settings/Connectors.php:222
msgid "Email/Mailbox Setup" msgid "Email/Mailbox Setup"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:223 #: src/Module/Settings/Connectors.php:216
msgid "If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox." msgid "If you wish to communicate with email contacts using this service (optional), please specify how to connect to your mailbox."
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:224 #: src/Module/Settings/Connectors.php:217
msgid "Last successful email check:" msgid "Last successful email check:"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:226 #: src/Module/Settings/Connectors.php:219
msgid "IMAP server name:" msgid "IMAP server name:"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:227 #: src/Module/Settings/Connectors.php:220
msgid "IMAP port:" msgid "IMAP port:"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:228 #: src/Module/Settings/Connectors.php:221
msgid "Security:" msgid "Security:"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:229 #: src/Module/Settings/Connectors.php:222
msgid "Email login name:" msgid "Email login name:"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:230 #: src/Module/Settings/Connectors.php:223
msgid "Email password:" msgid "Email password:"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:231 #: src/Module/Settings/Connectors.php:224
msgid "Reply-to address:" msgid "Reply-to address:"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:232 #: src/Module/Settings/Connectors.php:225
msgid "Send public posts to all email contacts:" msgid "Send public posts to all email contacts:"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:233 #: src/Module/Settings/Connectors.php:226
msgid "Action after import:" msgid "Action after import:"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:233 #: src/Module/Settings/Connectors.php:226
msgid "Move to folder" msgid "Move to folder"
msgstr "" msgstr ""
#: src/Module/Settings/Connectors.php:234 #: src/Module/Settings/Connectors.php:227
msgid "Move to folder:" msgid "Move to folder:"
msgstr "" msgstr ""
#: src/Module/Settings/ContactImport.php:63
msgid "Contact CSV file upload error"
msgstr ""
#: src/Module/Settings/ContactImport.php:82
msgid "Importing Contacts done"
msgstr ""
#: src/Module/Settings/ContactImport.php:112
msgid "Upload a CSV file that contains the handle of your followed accounts in the first column you exported from the old account."
msgstr ""
#: src/Module/Settings/ContactImport.php:113
msgid "Upload File"
msgstr ""
#: src/Module/Settings/ContactImport.php:115
msgid "Your legacy ActivityPub/GNU Social account"
msgstr ""
#: src/Module/Settings/ContactImport.php:115
msgid "If you enter your old account name from an ActivityPub based system or your 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."
msgstr ""
#: src/Module/Settings/Delegation.php:59 #: src/Module/Settings/Delegation.php:59
msgid "Delegation successfully granted." msgid "Delegation successfully granted."
msgstr "" msgstr ""
@ -11442,286 +11445,286 @@ msgstr ""
msgid "%s posted an update." msgid "%s posted an update."
msgstr "" msgstr ""
#: src/Object/Post.php:124 #: src/Object/Post.php:125
msgid "Private Message" msgid "Private Message"
msgstr "" msgstr ""
#: src/Object/Post.php:128 #: src/Object/Post.php:129
msgid "Public Message" msgid "Public Message"
msgstr "" msgstr ""
#: src/Object/Post.php:132 #: src/Object/Post.php:133
msgid "Unlisted Message" msgid "Unlisted Message"
msgstr "" msgstr ""
#: src/Object/Post.php:168 #: src/Object/Post.php:169
msgid "This entry was edited" msgid "This entry was edited"
msgstr "" msgstr ""
#: src/Object/Post.php:196 #: src/Object/Post.php:197
msgid "Connector Message" msgid "Connector Message"
msgstr "" msgstr ""
#: src/Object/Post.php:225 src/Object/Post.php:227 #: src/Object/Post.php:226 src/Object/Post.php:228
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
#: src/Object/Post.php:261 #: src/Object/Post.php:262
msgid "Delete globally" msgid "Delete globally"
msgstr "" msgstr ""
#: src/Object/Post.php:261 #: src/Object/Post.php:262
msgid "Remove locally" msgid "Remove locally"
msgstr "" msgstr ""
#: src/Object/Post.php:268 #: src/Object/Post.php:269
#, php-format #, php-format
msgid "Block %s" msgid "Block %s"
msgstr "" msgstr ""
#: src/Object/Post.php:273 #: src/Object/Post.php:274
#, php-format #, php-format
msgid "Ignore %s" msgid "Ignore %s"
msgstr "" msgstr ""
#: src/Object/Post.php:278 #: src/Object/Post.php:279
#, php-format #, php-format
msgid "Collapse %s" msgid "Collapse %s"
msgstr "" msgstr ""
#: src/Object/Post.php:282 #: src/Object/Post.php:283
msgid "Report post" msgid "Report post"
msgstr "" msgstr ""
#: src/Object/Post.php:293 #: src/Object/Post.php:294
msgid "Save to folder" msgid "Save to folder"
msgstr "" msgstr ""
#: src/Object/Post.php:333 #: src/Object/Post.php:334
msgid "I will attend" msgid "I will attend"
msgstr "" msgstr ""
#: src/Object/Post.php:333 #: src/Object/Post.php:334
msgid "I will not attend" msgid "I will not attend"
msgstr "" msgstr ""
#: src/Object/Post.php:333 #: src/Object/Post.php:334
msgid "I might attend" msgid "I might attend"
msgstr "" msgstr ""
#: src/Object/Post.php:380 #: src/Object/Post.php:381
msgid "Ignore thread" msgid "Ignore thread"
msgstr "" msgstr ""
#: src/Object/Post.php:381 #: src/Object/Post.php:382
msgid "Unignore thread" msgid "Unignore thread"
msgstr "" msgstr ""
#: src/Object/Post.php:382 #: src/Object/Post.php:383
msgid "Toggle ignore status" msgid "Toggle ignore status"
msgstr "" msgstr ""
#: src/Object/Post.php:392 #: src/Object/Post.php:393
msgid "Add star" msgid "Add star"
msgstr "" msgstr ""
#: src/Object/Post.php:393 #: src/Object/Post.php:394
msgid "Remove star" msgid "Remove star"
msgstr "" msgstr ""
#: src/Object/Post.php:394 #: src/Object/Post.php:395
msgid "Toggle star status" msgid "Toggle star status"
msgstr "" msgstr ""
#: src/Object/Post.php:405 #: src/Object/Post.php:406
msgid "Pin" msgid "Pin"
msgstr "" msgstr ""
#: src/Object/Post.php:406 #: src/Object/Post.php:407
msgid "Unpin" msgid "Unpin"
msgstr "" msgstr ""
#: src/Object/Post.php:407 #: src/Object/Post.php:408
msgid "Toggle pin status" msgid "Toggle pin status"
msgstr "" msgstr ""
#: src/Object/Post.php:410 #: src/Object/Post.php:411
msgid "Pinned" msgid "Pinned"
msgstr "" msgstr ""
#: src/Object/Post.php:415 #: src/Object/Post.php:416
msgid "Add tag" msgid "Add tag"
msgstr "" msgstr ""
#: src/Object/Post.php:430 #: src/Object/Post.php:431
msgid "Quote share this" msgid "Quote share this"
msgstr "" msgstr ""
#: src/Object/Post.php:430 #: src/Object/Post.php:431
msgid "Quote Share" msgid "Quote Share"
msgstr "" msgstr ""
#: src/Object/Post.php:433 #: src/Object/Post.php:434
msgid "Reshare this" msgid "Reshare this"
msgstr "" msgstr ""
#: src/Object/Post.php:433 #: src/Object/Post.php:434
msgid "Reshare" msgid "Reshare"
msgstr "" msgstr ""
#: src/Object/Post.php:434 #: src/Object/Post.php:435
msgid "Cancel your Reshare" msgid "Cancel your Reshare"
msgstr "" msgstr ""
#: src/Object/Post.php:434 #: src/Object/Post.php:435
msgid "Unshare" msgid "Unshare"
msgstr "" msgstr ""
#: src/Object/Post.php:478 #: src/Object/Post.php:479
#, php-format #, php-format
msgid "%s (Received %s)" msgid "%s (Received %s)"
msgstr "" msgstr ""
#: src/Object/Post.php:484 #: src/Object/Post.php:485
msgid "Comment this item on your system" msgid "Comment this item on your system"
msgstr "" msgstr ""
#: src/Object/Post.php:484 #: src/Object/Post.php:485
msgid "Remote comment" msgid "Remote comment"
msgstr "" msgstr ""
#: src/Object/Post.php:506 #: src/Object/Post.php:507
msgid "Share via ..." msgid "Share via ..."
msgstr "" msgstr ""
#: src/Object/Post.php:506 #: src/Object/Post.php:507
msgid "Share via external services" msgid "Share via external services"
msgstr "" msgstr ""
#: src/Object/Post.php:513 #: src/Object/Post.php:514
msgid "Unknown parent" msgid "Unknown parent"
msgstr "" msgstr ""
#: src/Object/Post.php:517 #: src/Object/Post.php:518
#, php-format #, php-format
msgid "in reply to %s" msgid "in reply to %s"
msgstr "" msgstr ""
#: src/Object/Post.php:519 #: src/Object/Post.php:520
msgid "Parent is probably private or not federated." msgid "Parent is probably private or not federated."
msgstr "" msgstr ""
#: src/Object/Post.php:543 #: src/Object/Post.php:544
msgid "to" msgid "to"
msgstr "" msgstr ""
#: src/Object/Post.php:544 #: src/Object/Post.php:545
msgid "via" msgid "via"
msgstr "" msgstr ""
#: src/Object/Post.php:545 #: src/Object/Post.php:546
msgid "Wall-to-Wall" msgid "Wall-to-Wall"
msgstr "" msgstr ""
#: src/Object/Post.php:546 #: src/Object/Post.php:547
msgid "via Wall-To-Wall:" msgid "via Wall-To-Wall:"
msgstr "" msgstr ""
#: src/Object/Post.php:599 #: src/Object/Post.php:600
#, php-format #, php-format
msgid "Reply to %s" msgid "Reply to %s"
msgstr "" msgstr ""
#: src/Object/Post.php:602 #: src/Object/Post.php:603
msgid "More" msgid "More"
msgstr "" msgstr ""
#: src/Object/Post.php:621 #: src/Object/Post.php:622
msgid "Notifier task is pending" msgid "Notifier task is pending"
msgstr "" msgstr ""
#: src/Object/Post.php:622 #: src/Object/Post.php:623
msgid "Delivery to remote servers is pending" msgid "Delivery to remote servers is pending"
msgstr "" msgstr ""
#: src/Object/Post.php:623 #: src/Object/Post.php:624
msgid "Delivery to remote servers is underway" msgid "Delivery to remote servers is underway"
msgstr "" msgstr ""
#: src/Object/Post.php:624 #: src/Object/Post.php:625
msgid "Delivery to remote servers is mostly done" msgid "Delivery to remote servers is mostly done"
msgstr "" msgstr ""
#: src/Object/Post.php:625 #: src/Object/Post.php:626
msgid "Delivery to remote servers is done" msgid "Delivery to remote servers is done"
msgstr "" msgstr ""
#: src/Object/Post.php:647 #: src/Object/Post.php:648
#, php-format #, php-format
msgid "%d comment" msgid "%d comment"
msgid_plural "%d comments" msgid_plural "%d comments"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Object/Post.php:648 #: src/Object/Post.php:649
msgid "Show more" msgid "Show more"
msgstr "" msgstr ""
#: src/Object/Post.php:649 #: src/Object/Post.php:650
msgid "Show fewer" msgid "Show fewer"
msgstr "" msgstr ""
#: src/Object/Post.php:686 #: src/Object/Post.php:687
#, php-format #, php-format
msgid "Reshared by: %s" msgid "Reshared by: %s"
msgstr "" msgstr ""
#: src/Object/Post.php:691 #: src/Object/Post.php:692
#, php-format #, php-format
msgid "Viewed by: %s" msgid "Viewed by: %s"
msgstr "" msgstr ""
#: src/Object/Post.php:696 #: src/Object/Post.php:697
#, php-format #, php-format
msgid "Read by: %s" msgid "Read by: %s"
msgstr "" msgstr ""
#: src/Object/Post.php:701 #: src/Object/Post.php:702
#, php-format #, php-format
msgid "Liked by: %s" msgid "Liked by: %s"
msgstr "" msgstr ""
#: src/Object/Post.php:706 #: src/Object/Post.php:707
#, php-format #, php-format
msgid "Disliked by: %s" msgid "Disliked by: %s"
msgstr "" msgstr ""
#: src/Object/Post.php:711 #: src/Object/Post.php:712
#, php-format #, php-format
msgid "Attended by: %s" msgid "Attended by: %s"
msgstr "" msgstr ""
#: src/Object/Post.php:716 #: src/Object/Post.php:717
#, php-format #, php-format
msgid "Maybe attended by: %s" msgid "Maybe attended by: %s"
msgstr "" msgstr ""
#: src/Object/Post.php:721 #: src/Object/Post.php:722
#, php-format #, php-format
msgid "Not attended by: %s" msgid "Not attended by: %s"
msgstr "" msgstr ""
#: src/Object/Post.php:726 #: src/Object/Post.php:727
#, php-format #, php-format
msgid "Commented by: %s" msgid "Commented by: %s"
msgstr "" msgstr ""
#: src/Object/Post.php:731 #: src/Object/Post.php:732
#, php-format #, php-format
msgid "Reacted with %s by: %s" msgid "Reacted with %s by: %s"
msgstr "" msgstr ""
#: src/Object/Post.php:754 #: src/Object/Post.php:755
#, php-format #, php-format
msgid "Quote shared by: %s" msgid "Quote shared by: %s"
msgstr "" msgstr ""

View file

@ -178,18 +178,6 @@
</div> </div>
</form> </form>
<h2 class="settings-heading"><a href="javascript:;">{{$importcontact}}</a></h2>
<form class="settings-content-block" action="settings" method="post" autocomplete="off" enctype="multipart/form-data">
<input type="hidden" name="form_security_token" value="{{$form_security_token}}">
<input type="hidden" name="MAX_FILE_SIZE" value="{{$importcontact_maxsize}}"/>
<p id="settings-pagetype-desc">{{$importcontact_text}}</p>
<p><input type="file" name="importcontact-filename"/></p>
<div class="settings-submit-wrapper">
<input type="submit" name="importcontact-submit" class="importcontact-submit" value="{{$importcontact_button}}"/>
</div>
</form>
<h2 class="settings-heading"><a href="javascript:;">{{$relocate}}</a></h2> <h2 class="settings-heading"><a href="javascript:;">{{$relocate}}</a></h2>
<form class="settings-content-block" action="settings" method="post" autocomplete="off" enctype="multipart/form-data"> <form class="settings-content-block" action="settings" method="post" autocomplete="off" enctype="multipart/form-data">
<input type="hidden" name="form_security_token" value="{{$form_security_token}}"> <input type="hidden" name="form_security_token" value="{{$form_security_token}}">

View file

@ -25,7 +25,6 @@
{{include file="field_checkbox.tpl" field=$api_spoiler_title}} {{include file="field_checkbox.tpl" field=$api_spoiler_title}}
{{include file="field_checkbox.tpl" field=$api_auto_attach}} {{include file="field_checkbox.tpl" field=$api_auto_attach}}
{{include file="field_select.tpl" field=$article_mode}} {{include file="field_select.tpl" field=$article_mode}}
{{include file="field_input.tpl" field=$legacy_contact}}
<div class="settings-submit-wrapper"> <div class="settings-submit-wrapper">
<input type="submit" id="general-submit" name="general-submit" class="settings-submit" value="{{$submit}}"/> <input type="submit" id="general-submit" name="general-submit" class="settings-submit" value="{{$submit}}"/>

View file

@ -0,0 +1,23 @@
{{*
* Copyright (C) 2010-2024, the Friendica project
* SPDX-FileCopyrightText: 2010-2024 the Friendica project
*
* SPDX-License-Identifier: AGPL-3.0-or-later
*}}
<h1>{{$title}}</h1>
<div id="settings-form">
<form action="settings/importcontacts" method="post" autocomplete="off" enctype="multipart/form-data">
<input type="hidden" name="form_security_token" value="{{$form_security_token}}">
<input type="hidden" name="MAX_FILE_SIZE" value="{{$importcontact_maxsize}}" />
{{include file="field_input.tpl" field=$legacy_contact}}
<hr>
<p id="settings-pagetype-desc">{{$importcontact_text}}</p>
<p><input type="file" name="importcontact-filename" /></p>
<div class="settings-submit-wrapper">
<input type="submit" name="importcontact-submit" class="importcontact-submit"
value="{{$importcontact_button}}" />
</div>
</form>
</div>

View file

@ -246,28 +246,6 @@
</div> </div>
</form> </form>
{{* Import contacts CSV *}}
<form action="settings/account/importcontact" method="post" autocomplete="off" class="panel" enctype="multipart/form-data">
<input type="hidden" name="form_security_token" value="{{$form_security_token}}">
<div class="section-subtitle-wrapper panel-heading" role="tab" id="importcontact-settings">
<h2>
<button class="btn-link accordion-toggle{{if $open !== 'importcontact'}} collapsed{{/if}}" data-toggle="collapse" data-parent="#settings" href="#importcontact-settings-collapse" aria-expanded="false" aria-controls="importcontact-settings-collapse">
{{$importcontact}}
</button>
</h2>
</div>
<div id="importcontact-settings-collapse" class="panel-collapse collapse{{if $open == 'importcontact'}} in{{/if}}" role="tabpanel" aria-labelledby="importcontact-settings">
<div class="panel-body">
<div id="importcontact-relocate-desc">{{$importcontact_text}}</div>
<input type="hidden" name="MAX_FILE_SIZE" value="{{$importcontact_maxsize}}" />
<input type="file" name="importcontact-filename" />
</div>
<div class="panel-footer">
<button type="submit" name="importcontact-submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
</div>
</form>
{{* The relocate setting section *}} {{* The relocate setting section *}}
<form action="settings/account/relocate" method="post" autocomplete="off" class="panel"> <form action="settings/account/relocate" method="post" autocomplete="off" class="panel">
<input type="hidden" name="form_security_token" value="{{$form_security_token}}"> <input type="hidden" name="form_security_token" value="{{$form_security_token}}">

View file

@ -39,8 +39,6 @@
{{include file="field_checkbox.tpl" field=$api_auto_attach}} {{include file="field_checkbox.tpl" field=$api_auto_attach}}
{{include file="field_select.tpl" field=$article_mode}} {{include file="field_select.tpl" field=$article_mode}}
{{include file="field_input.tpl" field=$legacy_contact}}
</div> </div>
<div class="panel-footer"> <div class="panel-footer">
<button type="submit" id="general-submit" name="general-submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button> <button type="submit" id="general-submit" name="general-submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>

View file

@ -0,0 +1,28 @@
{{*
* Copyright (C) 2010-2024, the Friendica project
* SPDX-FileCopyrightText: 2010-2024 the Friendica project
*
* SPDX-License-Identifier: AGPL-3.0-or-later
*}}
<div class="generic-page-wrapper">
<h1>{{$title}}</h1>
<div id="settings-form">
{{* Import contacts CSV *}}
<form action="settings/importcontacts" method="post" autocomplete="off" class="panel"
enctype="multipart/form-data">
<input type="hidden" name="form_security_token" value="{{$form_security_token}}">
<div class="panel-body">
{{include file="field_input.tpl" field=$legacy_contact}}
<hr>
<div id="importcontact-relocate-desc">{{$importcontact_text}}</div>
<input type="hidden" name="MAX_FILE_SIZE" value="{{$importcontact_maxsize}}" />
<input type="file" name="importcontact-filename" />
</div>
<div class="panel-footer">
<button type="submit" name="importcontact-submit" class="btn btn-primary"
value="{{$submit}}">{{$submit}}</button>
</div>
</div>
</form>
</div>
</div>