415 Commits

Author SHA1 Message Date
8edd975b11 [ActivityPub] Set Notice scope when storing activities 2021-12-07 15:23:20 +00:00
504c21a519 [CORE] Bump PHP version to 7.4 2021-12-07 15:23:20 +00:00
6e031d623a [VersionBump] 2.0.0beta0
Updated composer and translations

composer install --no-dev
composer dump-autoload --optimize
git add vendor/ --force
make updatepo
2021-07-18 12:49:17 +01:00
Maiyannah Bishop
cd3a9ec6a9 [API] Security hotfix for source, picked from postActive 2021-07-17 20:24:27 +01:00
983478aeec [PEAR] Force using extlib's patched version 2021-07-16 19:44:42 +01:00
56ece91f4c [ActivityPub][POSTMAN] Do not die on network errors 2021-07-16 19:44:42 +01:00
5396f3c9d1 [DirectMessage] Fix some wrong calls after MessageModel introduction in d9a9a3746b 2021-07-16 19:44:42 +01:00
68dfaff413 [ActivityPub][INBOX] CREATE NOTE Attachments, we handle enclosures elsewhere
It was trying to make enclosures with objects instead of strings, also attachments don't use this, only links
2021-07-16 19:44:42 +01:00
1b69d02875 [MEDIA][MediaFile] Prevent issues with huge original filenames 2021-07-16 19:44:42 +01:00
4cc3a779b5 [ActivityPub][INBOX] CREATE NOTE now accepts <br> tag 2021-07-16 19:44:42 +01:00
28a044077f [StoreRemoteMedia][SCRIPTS] Fix typo in query
This was introduced in 11ebb98919f56f7dcf888adfbebf9e8826f995b4#diff-96141878409d7418ea5a9eefbde509b43482c01R70
The arg number should have been one, as there's only one...
2021-07-16 19:44:42 +01:00
Alexei Sorokin
c5e433d577 Update the project homepage and IRC channel 2021-07-16 19:44:42 +01:00
76a1facd55 [INSTALL] Update mailing list URL, as recommended by @Gijs
Closes notabug issue #327
2021-07-16 19:44:42 +01:00
761ce7fd81 [StoreRemoteMedia] Fix failing to show remote thumbnails on first load
imgPath onCreateFileImageThumbnailSource would throw FileNotFoundException
2021-07-16 19:44:42 +01:00
0eb96d4805 [Embed] Apply encoding and increased type strictness patches from StoreRemoteMedia 2021-07-16 19:44:42 +01:00
5582ccfcb7 [StoreRemoteMedia] Gracefully recover from poorly encoded images 2021-07-16 19:44:42 +01:00
b96a44c73f [StoreRemoteMedia] Increase type strictness 2021-07-16 19:44:42 +01:00
a500277dca [Embed] Revert defaults and fix Readme example 2021-07-16 19:44:42 +01:00
bcae2f26b5 [StoreRemoteMedia][SCRIPTS] Move removeRemoteMedia deleteRemoteMedia 2021-07-16 19:44:42 +01:00
422b82d3be [MEDIA] Allow thumbnail only entries 2021-07-16 19:44:42 +01:00
4deaaa8dbe [StoreRemoteMedia][SCRIPTS] Update removeRemoteMedia 2021-07-16 19:44:42 +01:00
890f3bd91e [SCRIPTS] Update clean_file_table 2021-07-16 19:44:42 +01:00
f8e6ad416b [MEDIA][SCRIPTS] clean_thumbnails Allow to delete remote thumbs as well
If the sysadmin decides that StoreRemoteMedia plugin should store
original, then its thumbs will be regenerated as well, making it safe to
delete them if needed. Beware that Embed plugin never stores the original tho.
2021-07-16 19:44:42 +01:00
ee872b5e44 [Media] Document recently added settings and add some more
Fix some buggy ones, especially Embed crop
2021-07-16 19:44:42 +01:00
5e3fa2bba1 [StoreRemoteMedia][Embed] Bump plugins version 2021-07-16 19:44:42 +01:00
4fec13eb20 [Media] Upload of previously uploaded files now works (bug fix)
This bug was introduced with the commit "[Media] Fix issues with database file storage"
due to the API change "File::getByHash now returns a yield of files".

I had updated this function on that commit but had missed this little detail.
2021-07-16 19:44:42 +01:00
cab2112f1c [StoreRemoteMedia] Remote images are now stored exactly on the necessary size for the thumb 2021-07-16 19:44:42 +01:00
5077b65d71 [Media] Fix several issues
[StoreRemoteMedia] Upgrade plugin to use the new Media system

API Changes:
- Added getters to File to better formalize the ideas of the commit "[Media] Fix issues with database file storage"

UI Changes:
- Now presented thumbnails are actual thumbnails (bug fix)
- Attachment actions have a slightly more extended behaviour

Many other minor bug fixes...
2021-07-16 19:44:42 +01:00
c2d2f90312 [ActivityPub] Attachment fetch should happen on StoreRemoteMedia 2021-07-16 19:44:42 +01:00
96197d16b5 [Core] Add an event for StoreRemoteMedia and Embed 2021-07-16 19:44:42 +01:00
8bbbb890e3 [Media] Fix issues with database file storage
Fixed file quota as well.

There can be more than one file for the same filehash IF the url are different.

Possible states:
  - A file with no url and with filename is a local file.
  - A file with an url but no filename is a remote file that wasn't fetched,
    not even the thumbnail.
  - A file with an url and filename is a fetched remote file (maybe just a
    thumbnail of it).
  - A file with no filename nor url is a redirect.

Routes:
  Given these states, updated routes so that an attachment can only be
  retrieved by id and a file by filehash.

Major API changes:
  File::getByHash now returns a yield of files

Major UI changes:
  - Now remote non stored files are presented.
  - /view became preferred
  - Redirects to remote originals are preferred.

Many other minor bug fixes...
2021-07-16 19:44:42 +01:00
11fa4b617a [DOCUMENTATION] git clone with https so people don't need an account 2021-07-16 19:44:42 +01:00
eacbd81dfa [i18n] Re-add gettext emulation
Removed by mistake with 9cc7df51d6#L50
2021-07-16 19:44:42 +01:00
8d84451200 [ActivityPub] Re-implement Delete Actor 2021-07-16 19:44:42 +01:00
Andrew Tokarskiy
c7cee7fe1a Added some ukr translations 2021-07-16 19:44:41 +01:00
Andrew Tokarskiy
058614866b Fixed some ukrainian translation errors 2021-07-16 19:44:41 +01:00
Alexei Sorokin
ebfc248ff6 Various fixes
Fix OAuth and Realtime issues introduced in 9a515b9234

[DATABASE] Fix an empty default value mistake introduced in
fde929b151

[DATABASE][PostgreSQL] Avoid use of pg_constraint.consrc, which was removed in
PostgreSQL 12.

[DATABASE][MariaDB] Fix a typo introduced in aed2344bd4

[DAEMON] Wrap an assignment inside "switch":
a follow-up to adc689cb15
2021-07-16 19:44:41 +01:00
Alexei Sorokin
a67953b840 [XMPP] Respond to ping and track time monotonically
This also fetches a necessary update from the XMPPHP upstream.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
8181b28441 Clear out potential duplicates when semi-joining a union
Using a left outer join as a semi-join is not a valid approach.
Can still be used for an anti-semi-join.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
318d2cb6ca Set the character set before making a connection
Ideally the character set should be set with the connection, and so this is
exactly what's being done now.

And now the character set code is attempted to be generalised.
2021-07-16 19:44:41 +01:00
SENOO, Ken
0b4a49d262 Change required MySQL database character set variable
Changing `character_set_server` requires root permissions and rebooting
the server.

Which is impossible on shared web hosting services.

So use `character_set_database`. This variable can be changed with
user permissions using `ALTER DATABASE`.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
a0f72fe5c6 Avoid ordering just by a timestamp
Try to also employ an id when possible.
Involves reworking some of the indices.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
ae4f3176b1 Remove "magic quotes" code and avoid wrong order implode
"Magic quotes" were removed in PHP 5.4, no need to mitigate it anymore.

Avoid implode() with the join()-like order of arguments which was deprecated
since PHP 7.4 and implicitly since PHP 5.3.
Also avoid implode() with an implicit separator for stylistic reasons.

mktime() with no arguments has been deprecated since PHP 5.1.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
22f6d3ce14 [UTIL] Sanitise instead of validate in common_copy_args()
And remove common_validate_utf8() which is now unused.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
9e94b7f145 [DATABASE] Switch from PEAR DB to MDB2 2021-07-16 19:44:41 +01:00
Alexei Sorokin
2f7d6ef07b [ActivityPub][INBOX][Delete] Stop if the ID is not present 2021-07-16 19:44:41 +01:00
Alexei Sorokin
04018ea4ca [ActivityPub] Fix use of ActivityPubPlugin::pull_remote_profile
It does not throw but return null.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
160b6ccd94 Fix "Implement a class for automatic temporary file handling"
TemporaryFile::commit throws instead of returning a bool.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
d7e7396d17 [Memcached_DataObject] Do not encache on insert
This resulted in N=0 and empty "modified" in cache.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
7e1091eb8c [DATABASE] Make sure the session always uses UTF-8 and UTC 2021-07-16 19:44:41 +01:00
Alexei Sorokin
4e02cb437a [API] Fix /api/statuses/update reporting a failure 2021-07-16 19:44:41 +01:00
Alexei Sorokin
9efbef720d Avoid use of assignments bare inside statements
Either use them in a subroutine call or put parentheses around the assignment.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
7c2cf605f4 [Profile] Extend the allowed length of nicknames to 191 characters 2021-07-16 19:44:41 +01:00
Alexei Sorokin
7fa4d56f05 Implement a class for automatic temporary file handling
And adopt it all over the code.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
590891139f [Memcached_DataObject] Change how multiGet achieves an ordered result
The previous approach sent the key values twice, which for large sets is
twice as bad.

As an optional feature of this approach multiGet now allows retrieving tuples
in exact order and amount of the requested key values.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
b2e009bcd3 [DirectMessage] Simplify the inbox query 2021-07-16 19:44:41 +01:00
Alexei Sorokin
6cb3a0c390 [ActivityPub] Check if a Notice is public via CC as well 2021-07-16 19:44:41 +01:00
Diogo Cordeiro
238652b15d [ActivityPub] Fix note URIs 2021-07-16 19:44:41 +01:00
Diogo Cordeiro
c3cdde0873 [ActivityPub] Tombstones now have datetimes 2021-07-16 19:44:41 +01:00
Diogo Cordeiro
cb78573f59 [TheFreeNetwork] Fix invalid index on lookup 2021-07-16 19:44:41 +01:00
Diogo Cordeiro
82f1fc7ca2 [ActivityPub] Implement Failed Queue 2021-07-16 19:44:41 +01:00
Diogo Cordeiro
751b23f6fe [ActivityPub] Fix DELETE 2021-07-16 19:44:41 +01:00
Diogo Cordeiro
af0366ed58 [ActivityPub] Fix issues concerning Activity URIs
And some other minor bugs.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
d71eea1ba4 [DATABASE] Fix use of ORDER BY with DISTINCT
statuses/retweets_of_me has performance fixed, so it is also stripped of its
"bad query" status.
2021-07-16 19:44:41 +01:00
Diogo Cordeiro
300c4e3d04 [ActivityPub] Revert moving Disfavor to Queues
It seems this kind of notice isn't queued?
2021-07-16 19:44:41 +01:00
Diogo Cordeiro
5f35d9633d [ActivityPub][Queues] Fix Like 2021-07-16 19:44:41 +01:00
Diogo Cordeiro
c834d27dd6 [TheFreeNetwork] Do not allow lower priority protocols to handle remote actors already handled by the higher ones 2021-07-16 19:44:41 +01:00
Alexei Sorokin
a0a37352c8 [Directory] Fix SQL string quotation 2021-07-16 19:44:41 +01:00
Alexei Sorokin
6e5217dc3a [Foreign_link] Change the type of "credentials" to blob
TwitterOAuthClient::packToken uses \0 as a delimeter which can cause issues on
TEXT or VARCHAR.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
912a0cb16c [OpenID] Correct table definition types
"server_url" should not be blob.
Lengths are adjusted to Auth/OpenID/(PostgreSQL|MySQL)Store.php.
2021-07-16 19:44:41 +01:00
Alexei Sorokin
3b514abd6b [Queue_item] Let DataObject construct WHERE IN 2021-07-16 19:44:41 +01:00
Alexei Sorokin
8290b137fa [TwitterBridge][DAEMONS] Fix database connection clean-up 2021-07-16 19:44:40 +01:00
Alexei Sorokin
681aa5b326 [NOTICES] Condition pushdown in the subquery in inboxnoticestream
This improves performance on PostgreSQL.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
47c9bea46f [DATABASE][PostgreSQL] Ignore index prefix length 2021-07-16 19:44:40 +01:00
Alexei Sorokin
2d8f320586 [PostgreSQL] Set timezone to UTC
And remove some redundant neighbouring cruft:
utf8mb4 is already set in mysqlschema more than enough times.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
1f3edd8fdf Rename the mysql_foreign_keys option to foreign_keys
And apply it universally.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
ed68659ece [SESSION] Session ID can be as long as 128 characters 2021-07-16 19:44:40 +01:00
Alexei Sorokin
ddc3371b43 [NOTICE] Store "url" as TEXT and not VARCHAR(191) 2021-07-16 19:44:40 +01:00
Alexei Sorokin
3075cffcd7 [DATABASE] Change collation handling
Before now table definitions could define collations only for MariaDB using the
MariaDB's collation names directly.
Now instead definitions get a slightly more abstract collation name syntax, but
only supporting the collations utf8mb4_bin and utf8mb4_unicode_(cs|ci) (wrapped
as utf8_bin, utf8_general_(cs|ci)), because those are the ones that have
practical use for GNU social.

Which also means that on MariaDB the formerly used utf8mb4_general_(cs|ci) have
been superseded by utf8mb4_unicode_(cs|ci), as they are the more modern
replacement.

Introduce collation support on PostgreSQL which results in use of the C (POSIX)
collation as utf8_bin and the und-x-icu collation as utf8_general_cs.
utf8_general_ci is also mapped to und-x-icu, which makes it case-sensitive,
unfortunately.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
86826a1a68 [SEARCH][PostgreSQL] Make LIKE search case-insensitive 2021-07-16 19:44:40 +01:00
Alexei Sorokin
598e8e4d56 [TwitterBridge] Create Foreign_user before Foreign_link
To keep foreign key constraints intact.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
c11629035b [SEARCH][MariaDB] Change user-facing fulltext search syntax
Now analogous to the simple and safe PostgreSQL's websearch_to_tsquery syntax.
MariaDB's full-text boolean search queries will fail on input such as "@user"
(unquoted) which is particularly noticeable to the user.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
2d6e4e3912 [SEARCH] Exclude message scope 2021-07-16 19:44:40 +01:00
tenma
b7cf60c7b4 [FFmpeg] Add FFmpeg plugin
FFmpeg plugin serves as a better performant/quality alternative to
resize animated GIFs than the ImageMagick plugin.
2021-07-16 19:44:40 +01:00
tenma
4a50579ef1 [MEDIA] Add WebP support
WebP format is now the default image format for anything that
is not an animated GIF. Image Intervention doesn't support
animated WebPs so we don't convert animated GIFs.

ImageFile:
MediaFile:
default:
- Add WebP support
2021-07-16 19:44:40 +01:00
tenma
228e7c423e [ImageMagick] Remove unnecessary code
ImageMagickPlugin:
- Remove animated thumbnail setting, we'll be able to use FFmpeg for performance
- Remove onFillImageFileMetadata and onCreateFileImageThumbnailSource(), these
  are handled just fine by ImageFile
- Bump minor version number

README:
- Update
2021-07-16 19:44:40 +01:00
Alexei Sorokin
e62e429302 [File] Fix file deletion violating foreign keys 2021-07-16 19:44:40 +01:00
Alexei Sorokin
8fc807343b [RedisCache] Connections should not be shared by daemon threads 2021-07-16 19:44:40 +01:00
Alexei Sorokin
a9ae96fa4c [Memcached] Do not set persistent connections for daemons 2021-07-16 19:44:40 +01:00
Alexei Sorokin
1e36ceb5b1 [Embed] Fix a query typo in fixup_files.php
Regression introduced in ec86de2bc4
2021-07-16 19:44:40 +01:00
Alexei Sorokin
668bdc7a6d [Memcached_DataObject] Thorough check of pivotGetClass arguments 2021-07-16 19:44:40 +01:00
Alexei Sorokin
dd8612c39a [Bookmark] Silence a warning when no tags in BookmarkForm 2021-07-16 19:44:40 +01:00
Alexei Sorokin
df03e5311b [Bookmark] Fix undefined variable "rendered" in Activity options 2021-07-16 19:44:40 +01:00
Alexei Sorokin
60c82bc9a0 [EXTLIB][VALIDATE] Declare everything as static
As was originally intended by the author and is expected.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
fc7925f4c8 [RSSCloud] Avoid the deprecated in PHP each() function 2021-07-16 19:44:40 +01:00
Alexei Sorokin
d045bf6f5c [Managed_DataObject] Remove the "timestamp" type
It is converted to "datetime" in lib/database/schema.php
2021-07-16 19:44:40 +01:00
Alexei Sorokin
1095475645 [RSSCloud] Update schema definition 2021-07-16 19:44:40 +01:00
Alexei Sorokin
e051572f84 [Profile] Allow grantRole to work when role exists 2021-07-16 19:44:40 +01:00
Alexei Sorokin
cce2c763d3 [RedisCache][DiskCache] Check if unserialize succeeded 2021-07-16 19:44:40 +01:00
Alexei Sorokin
ed08b46c0b [TwitterBridge] Check if Notice::$lat and Notice::$lon are defined 2021-07-16 19:44:40 +01:00
Alexei Sorokin
01093e3583 [DATABASE][MariaDB] Always use LONGBLOB for "blob"
"blob" is practically used with the expectation of unlimited length, which is
true with PostgreSQL's bytea, but not with MariaDB's BLOB, which is limited to
64KiB.
So instead use LONGBLOB, which has a maximum of 4GiB, effectively unlimited.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
03e69e8c31 [DATABASE] Fix remaining misuses of SQL's GROUP BY 2021-07-16 19:44:40 +01:00
Alexei Sorokin
b0b10cf186 [Queue_item] There is no "modified" attribute
Fixes a regression introduced in ec86de2bc4
2021-07-16 19:44:40 +01:00
Alexei Sorokin
e8f5e34202 Revert "[CORE] Avoid the old "reply" relation in inboxnoticestream"
It is needed for mentions.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
024f5fe3a8 [RequireValidatedEmail] Only check current user posts
This check made registration impossible when welcomeuser didn't have validation
as well.

And rename the "grandfatherCutoff" option to "exemptBefore".
"Grandfathering" is a relatively obscure term linked to the history of the
United States of America, so replace that with something self-descriptive.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
2de195d20c [NOTICES] Restore FullNoticeStream
But only allow a select number of verbs.
This is to display optional subscription notices.
2021-07-16 19:44:40 +01:00
Alexei Sorokin
5b95c1172a [EmailAuthentication] Check if e-mail with filter_var 2021-07-16 19:44:40 +01:00
Alexei Sorokin
6d203d42e9 [DATABASE] Enable fulltext search by default
Also rename fulltext indices to more fitting names
and move the check from classes into database/schema.php
2021-07-16 19:44:40 +01:00
Alexei Sorokin
974404bcfd [DATABASE][PostgreSQL] Add fulltext search support 2021-07-16 19:44:40 +01:00
Alexei Sorokin
46ac40d981 Clean Notice_prefs and Fave_tally when a notice is deleted 2021-07-16 19:44:40 +01:00
t3nma
d7ec199793 [COMPOSER] Add new php-ffmpeg package 2021-07-16 19:44:40 +01:00
Alexei Sorokin
83ba7030cc [ExtendedProfile] Clean up of missing array indices handling 2021-07-16 19:44:38 +01:00
Alexei Sorokin
5196b45e62 [TwitterBridge] Do not fail on missing notice 2021-07-16 19:44:38 +01:00
Alexei Sorokin
abacbf3e0a [ACTIONS] Fix selftag 2021-07-16 19:44:38 +01:00
Alexei Sorokin
8c939b70cc [UTIL] Fix up common_ensure_session()
Give priority to cookies over GET.

Make sure session ids have only expected characters
(PHP file session handler's limitation).

Replace a mostly useless log warning with a debug message.
2021-07-16 19:44:38 +01:00
Alexei Sorokin
881ea12f3f [EXCEPTIONS] Inherit the Previous Exception parameter 2021-07-16 19:44:38 +01:00
t3nma
bf274d34c6 [TwitterBridge] Fix issue "Only variables should be assigned by reference"
From the docs: "The new operator returns a reference automatically, so
assigning the result of new by reference is not allowed as of PHP 7.0.0"
2021-07-16 19:44:38 +01:00
Diogo Cordeiro
33721c85cd [ActivityPub][NOTICE] Process attachments 2021-07-16 19:44:38 +01:00
Diogo Cordeiro
4c92cc967b [MEDIA] fromUrl now supports using original file name 2021-07-16 19:44:38 +01:00
Diogo Cordeiro
7e559f0cd0 [ActivityPub][NOTICE] Fix variable being wrongly reused 2021-07-16 19:44:38 +01:00
Diogo Cordeiro
f3df3762f1 [ActivityPub][INBOX][Delete] Support Delete Actor object being a Tombstone 2021-07-16 19:44:38 +01:00
Diogo Cordeiro
ce4ceaf8c7 [ActivityPub][NOTICE] Fix other federation protocols mention handling 2021-07-16 19:44:38 +01:00
Diogo Cordeiro
30024b4d47 [ActivityPub][SCRIPTS] Add fix_subscriptions.php 2021-07-16 19:44:38 +01:00
Diogo Cordeiro
4dfa7f374a [TheFreeNetwork][fix_duplicates.php] Don't die because you couldn't federate an undo follow 2021-07-16 19:44:38 +01:00
Diogo Cordeiro
f81b578a37 [TheFreeNetwork][fix_duplicates.php] Small improvements on queries performed 2021-07-16 19:44:38 +01:00
Alexei Sorokin
1667d727b4 Set HTTP status codes with http_​response_​code() 2021-07-16 19:44:38 +01:00
Alexei Sorokin
3429a3644d [Favorite] Fix "Properly trigger DisfavorNotice on profile deletion"
Calling find() inside delete() is probably not a good idea.
2021-07-16 19:44:38 +01:00
Diogo Cordeiro
10f0a15614 [VersionBump] 2.0.0alpha0
Ran composer update and locale updater
2021-07-16 19:44:38 +01:00
Diogo Cordeiro
31003c8914 [TheFreeNetwork] Add Readme
Improve script fix_duplicates.php's comments
2021-07-16 19:44:38 +01:00
t3nma
f476708f3a [TheFreeNetwork] Add fix_duplicates script 2021-07-16 19:44:38 +01:00
t3nma
bda5a7db97 [TheFreeNetwork] Small rewrite to the onStartTFNLookup event 2021-07-16 19:44:38 +01:00
Diogo Cordeiro
2a863ba746 [MODULES] Make default loading attributes available in global config 2021-07-16 19:44:38 +01:00
t3nma
119783f80e [ActivityPub][QUEUES] Handle Create (AS1 POST) verb properly
Fixes a bug introduced in e504d13120
2021-07-16 19:44:38 +01:00
Alexei Sorokin
caac2cea44 [SCHEMA] Better DBMS information fetching
On PostgreSQL:
  - Parse defaults for strings and booleans properly.
  - Parse the "serial" definition type properly.
  - Get information on the "enum" definition type.
  - Re-work getting information about keys/indices.

On MariaDB:
  - Get information about lengths in indices.
  - Get foreign key information separately from the rest as they can have
    colliding names.
2021-07-16 19:44:38 +01:00
Alexei Sorokin
d55488cdec [OpenID][DATABASE] Store UNIX timestamps as BIGINT 2021-07-16 19:44:38 +01:00
Alexei Sorokin
573cd7d450 [SCHEMA] Fix a few mistakes 2021-07-16 19:44:38 +01:00
Alexei Sorokin
50dd216f44 [BLOCK] Increase type strictness 2021-07-16 19:44:38 +01:00
Alexei Sorokin
bee3dea9c2 [DATABASE] Add explicit indices for all foreign keys
This adds a requirement for all definitions that have foreign keys to also
require indices for all source (local) attributes mentioned in foreign keys.

MariaDB/MySQL creates indices for source attributes automatically, so this
serves as a way to get rid of those automatic indices and create clean explicit
ones instead.

In PostgreSQL, most of the time, indices on the source are necessary to
decrease performance penalty of foreign keys (like in MariaDB), but they aren't
created automatically, so this serves to remove that difference between
PostgreSQL and MariaDB.
2021-07-16 19:44:38 +01:00
Alexei Sorokin
665e4574da [DATABASE] Fix index identifiers and clean up redundant ones 2021-07-16 19:44:38 +01:00
t3nma
f3ab63957d [DirectMessage] Update ApiDirectMessageNew action
- Messages are now saved as Notices
2021-07-16 19:44:38 +01:00
t3nma
8ca412bd1d [DirectMessage] Update ApiDirectMessage action
- getMessages() is now fetching from the Notice table as supposed
- every show{format}* method is properly updated to use Notice objects
- json and xml responses retrieve multi-recipients without compromising
  backwards compatibility
2021-07-16 19:44:38 +01:00
t3nma
8b0abc0382 [DirectMessage] Update inboxMessages() to stop fetching replies
This is yet to be supported in the plugin.
2021-07-16 19:44:38 +01:00
t3nma
58d7ab4d13 [DirectMessage] PSR12-format 2021-07-16 19:44:38 +01:00
Alexei Sorokin
903a9d2667 [DOCUMENTATION] Adopt PSR-12 and clarify on arrays 2021-07-16 19:44:37 +01:00
Alexei Sorokin
b1b1d2af93 [DATABASE] Update "modified" in Managed_DataObject instead of a DBMS trigger
Instead of relying on the MariaDB's ON UPDATE CURRENT_TIMESTAMP trigger update
"modified" attributes in Managed_DataObject. Every raw query that needs
adjusting is adjusted, as they won't update "modified" automatically anymore.

The main goal behind this change is to fix "modified" updates on PostgreSQL.
2021-07-16 19:44:37 +01:00
Alexei Sorokin
346aec9b2a [DATABASE] Fix more incorrect uses of quotation in SQL 2021-07-16 19:44:37 +01:00
Alexei Sorokin
5b6a64b125 [Notice] Fix clearReplies() and clearRepeats() 2021-07-16 19:44:37 +01:00
Alexei Sorokin
7c727e2969 [SHOWSTREAM] Add "noindex" robots meta-tag for silenced profiles 2021-07-16 19:44:37 +01:00
Alexei Sorokin
7d7dbe627b [AuthCrypt] Password storage and comparison improvements
Password hashes are now stored in a TEXT attribute, not limited to 199 symbols.
That limitation makes no sense as password hashes are not the kind of
information to be indexed.

Actually replace crypt() with password_verify() for password checking, current
code left password_verify() unused.

Only update passwords when they use a different algorithm from the current
default. Previously "overwrite" meant rehashing every login.

Replace the "argon" boolean option with "algorithm" and "algorithm_options" for
better configurability.
The default remains whichever is default for PHP's password_hash.
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
c85feeaa1f [AuthCrypt] Update README and fix formatting 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
360fc0262b [MODULES] Make settings great again
Plugin main class doesn't use this construct despite extending this class.
2021-07-16 19:44:37 +01:00
Alexei Sorokin
2d3ec87ea4 [Profile][User_group] Fix profile deletion violating foreign keys 2021-07-16 19:44:37 +01:00
Alexei Sorokin
a719684c6c [Favorite] Properly trigger DisfavorNotice on profile deletion 2021-07-16 19:44:37 +01:00
Alexei Sorokin
182f94cf6f [DATABASE][MariaDB] Fix index changes with foreign keys enabled 2021-07-16 19:44:37 +01:00
Alexei Sorokin
9ec1b667c0 [DATABASE][Schema_version] Change the hashing algorithm to SHA3-512 2021-07-16 19:44:37 +01:00
Alexei Sorokin
65b6a924bd [DATABASE] Make unprefixed schema.php a bit more DBMS-neutral 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
452f05512f [ActivityPub][Explorer] More robust exception handler for invalid remote answers 2021-07-16 19:44:37 +01:00
Alexei Sorokin
b79d97c4e1 [RemoteFollow] Fix location display 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
2894eb9ed2 [MEDIA] Fix headers when using x-static-delivery 2021-07-16 19:44:37 +01:00
Alexei Sorokin
8b5be9fe1b [LRDD] Fix unhandled bad data in HostMeta, LinkHTML and WebFinger 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
7022d85b93 [ActivityPub][AProfile] Complete strict typing 2021-07-16 19:44:37 +01:00
Alexei Sorokin
e902a9bdfc [DATABASE] Check SQL boolean values with "IS TRUE"
This way UNKNOWN (NULL) explicitly turns to FALSE when three-valued logic is
reduced to binary.
In pgsqlschema, however, use "IS FALSE" as boolean attributes in pg_index are
non-nullable, there is no outer join and there's no clear preference for NULL
reduction.

Over-complicated constructions in TagCloud queries have been simplified, which
should not affect their performance.

Additionally, in TagCloud's lib/subscriptionspeopleselftagcloudsection.php
a typing mistake in an equi-join of "profile_tag" and "profile_list" on
"tagger" was fixed.
That regression was introduced in f446db8e2a
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
a996ac797a [UserFlag] Fix type of onUserRightsCheck 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
e046d4faa5 [UserFlag] Increase strict typing of main file
Run php-cs-fixer
Correct case of class name onDeleteRelated event handlers
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
235122280d [ActivityPub] Increase type strictness on Explorer 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
05790c124c [ActivityPub] Fix wrong type handling on AProfile:update_profile 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
f1b3db8e59 [Bookmark] Fix misuse of XMLOutputter
Argument 3 passed to htmloutputter::input() must be of the type string or null, array given, called in /srv/gnusocial/plugins/Bookmark/forms/bookmark.php on line 166
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
80a4811539 [ExtendedProfile] Fix misuse of XMLOutputter
Argument 1 passed to xmloutputter::text() must be of the type string, null given, called in /srv/gnusocial/plugins/ExtendedProfile/lib/extendedprofilewidget.php on line 556
2021-07-16 19:44:37 +01:00
Hugo Sales
58af4799ee [NOTICE][UI] Fix bug: Option to message "Everyone at site" when using private instance 2021-07-16 19:44:37 +01:00
Alexei Sorokin
af0ec1380e [DOCUMENTATION] Adapt the nginx config for avatars located in /file 2021-07-16 19:44:37 +01:00
Alexei Sorokin
9ba9006014 [CORE] Avoid materialisation in the TaggedProfileNoticeStream query
This is analogous to c862589dcf
2021-07-16 19:44:37 +01:00
Alexei Sorokin
e3f1667b47 [NOTICE] Update index for verbs in ProfileNoticeStream
After adding a verb condition there, MariaDB now prefers the
("created", "id", "is_local") and ("profile_id", "verb", "created", "id")
indices for that query, even though they are slow for the job.
So replace them with ("is_local", "created", "id") and
("profile_id", "verb", "created", "id") respectively.
Also fix the naming of the ("profile_id", "created", "id") index.
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
b5180d6096 [ActivityPub] Fix bug introduced with 4d171b27
Too few arguments to function Activitypub_notice::create_notice()
2021-07-16 19:44:37 +01:00
Alexei Sorokin
c461030066 [RedisCache] Catch string return type from Predis\Client::setex 2021-07-16 19:44:37 +01:00
Alexei Sorokin
c50f16ba58 [CORE] Do not set "confirm_address"."user_id" to 0 by default
That breaks the foreign key constraint, it is better to just have it nullable.
2021-07-16 19:44:37 +01:00
Alexei Sorokin
cbb83a9752 [NOTICES] Revert "We want the profile stream to be as raw as possible!"
There are only three possible visible notice verbs: POST, SHARE and DELETE.
What including all verbs does is it makes limiting (FETCH FIRST) unreliable as
the query will fetch invisible stuff (like favourites) and count it in, but
nothing will be displayed.
NoticeStream only allows POST and SHARE, so this effectively removes tombstones
from the profile page like in 78a111b57d
2021-07-16 19:44:37 +01:00
Alexei Sorokin
eb647f15a7 [NOTICES] Fix InboxNoticeStream caching
Introduce a new property in CachingNoticeStream for always checking if there
are any new elements in the stream.
It would be extremely hard to blow InboxNoticeStream, so instead the database
hit will still occur, but it is be much faster than starting fresh.

This fixes a regression introduced in 36a55d8436
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
8ec2af0020 [TheFreeNetwork] Fix small logic issue regarding StartTFNLookup return 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
d81e795cc0 [ActivityPub][SCRIPTS] Make update profiles work with an uri 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
4bbfb2dd56 [ActivityPub][QUEUES] Add Like, Undo and Delete 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
2b4aaca14a [ActivityPub][INBOX][Delete] Fix misconceptions
References:
- https://socialhub.activitypub.rocks/t/the-delete-activity-and-its-misconceptions/137
- https://socialhub.activitypub.rocks/t/the-update-activity-more-than-caching/260
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
64108aa51d [ActivityPub][NOTE] Do not extract actor from attributedTo
There was no checking of attributedTo, actors and referent object IDs to make
sure they exist in the same domain. Therefore, one could spoof messages from
people by doing attributedTo: whoever-i-want-to-spoof
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
9f4c4edb02 [ActivityPub][Ostatus] Fetch avatars in accordance to the new media system 2021-07-16 19:44:37 +01:00
Alexei Sorokin
e9d1c5593d [CORE] Avoid materialisation in the TagNoticeStream query
The notice.created sort forced the notice_tag by notice join plain to employ
materialisation, which can have a serious performance penalty depending on the
size of the database.
Sort by notice_tag.created instead, which should be exactly the same.
2021-07-16 19:44:37 +01:00
Alexei Sorokin
d3e63bbac0 [CORE] Avoid the old "reply" relation in inboxnoticestream
All verbs for not visible notices are filtered out, so this should not
break the timeline.
Additionally, filter by profile outside of the derived relation as that shows
better performance in PostgreSQL and MariaDB both.
2021-07-16 19:44:37 +01:00
Alexei Sorokin
819ece93aa Revert "FullNoticeStream selects all verbs"
It appears this was added to display "tombstones" of deleted notices.
However, it has other side-effects and the concept of keeping them visible has
not been adopted by the wider fediverse.
2021-07-16 19:44:37 +01:00
Alexei Sorokin
26115482ef [SCHEMA] Improve timestamp storage
Avoid the use of deprecated MariaDB "zero dates" globally. If they're present
as attribute defaults somewhere, they will be replaced with NULL implicitly.
The existing "zero dates" in MariaDB storage will be left intact and this
should not present any issues.

The "timestamp" type in table definitions now corresponds to DATETIME in
MariaDB with "DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP", which
should be close enough to the original behaviour for compatibility purposes.
It is now the recommended type for "modified" attributes, because of the
update trigger on MariaDB. But there is no such trigger implemented on
PostgreSQL as of this moment.
2021-07-16 19:44:37 +01:00
Alexei Sorokin
eb993df072 [DATABASE] Fix MariaDB schema verification 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
32a7cd6458 [ActivityPub][HTTPSignatures] Fix verify 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
78f0ab022c [ActivityPub][Inbox] Signature verification after Actor update would always fail 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
f93d8694c3 [AVATAR] Ensure this Action stays secure 2021-07-16 19:44:37 +01:00
Hugo Sales
ff75bb796b [MEDIA] Move AttachmentAction::sendFile to common_send_file
This fixed the wrong content type and status code returned by the Avatar action
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
c7e1352618 [ActivityPub][Inbox] With PHP 7.3 we don't need get_all_headers workaround anymore
Furthermore, it was broken on Apache2 because the actual function
doesn't put the resulting array's key in lowercase.
2021-07-16 19:44:37 +01:00
Alexei Sorokin
ad6955e7ff [Memcached_DataObject] Check if it is possible to sort efficiently 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
25f67a1ce9 [ActivityPub][Inbox] get_all_headers was nginx only 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
bc1af78bf7 [TESTS] Move AcceptHeader from ActivityPub plugin to Core
Delete temporary ActivityPub tests (they were to be deleted long ago)
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
8c2d87b3b8 [ExtendedProfile] Fix XML type bug 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
81d50c4ec3 [FORMAT] Run php-cs-fixer on tests/ 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
bba9c0d560 [TESTS] Fix CommandInterpreterTest
Also corrected a bad refactoring that affected Xmpp plugin test
2021-07-16 19:44:37 +01:00
Diogo Cordeiro
6a9dce2cc5 [PEAR] I'm tired of this issue still popping up, this seems to silence it 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
e8a5347157 [UI] Make neo-quitter default theme 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
7568789f62 [XML] Inscrease types strictness 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
02055dee49 [AVATAR] Temporary ImageFile wasn't 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
44ad0d3a85 [AVATAR] Try to delete tmp avatar if something goes wrong during the process 2021-07-16 19:44:37 +01:00
Diogo Cordeiro
5439ff3ec5 [MEDIA] ImageFile fromUpload method wasn't ensuring uploaded file was an image 2021-07-16 19:44:37 +01:00
Alexei Sorokin
d01f44ee99 [DATABASE] Some query improvements
Make common_sql_weight employ standard SQL functions for the timestamp
difference in seconds.
Also replace UTC_TIMESTAMP in the MariaDB-specific part with CURRENT_TIMESTAMP
as it is the only occurence and GNU social sets UTC as a default timezone.

In a delete_orphan_files.php script simplify the main query considerably.

In clean_profiles.php stop using COUNT as if it is ANY, that is unnecessary
punishment for the database. Instead implement the anti-join with a
left outer join.

In Autocomplete and Activitypub_profile use joins instead of a WHERE OR
anti-pattern for the semi-joins.

In lib/ui/galleryaction.php replace a CROSS JOIN with an INNER JOIN.

In actions/sup.php remove a redundant subquery: WHERE is applied before
grouping either way.
2021-07-16 19:44:36 +01:00
Alexei Sorokin
a93c38a9af [CORE][DATABASE] Another approach to semi-join in the inboxnoticestream query
Compared to the solution with INNER JOIN this seems to have better performance
as there is no need to deduplicate the subquery result before use.
2021-07-16 19:44:36 +01:00
Alexei Sorokin
ed4cc01b2f [DATABASE] Replace NOW() with CURRENT_TIMESTAMP 2021-07-16 19:44:36 +01:00
Alexei Sorokin
434f07430d [DATABASE] Use "<>" as an SQL non-equality sign in more cases
A follow-up to commit 644b417f6c
2021-07-16 19:44:36 +01:00
Alexei Sorokin
9ac632ca2d [DATABASE] Start transactions with START TRANSACTION
"BEGIN" is non-standard and unnecessary.
2021-07-16 19:44:36 +01:00
susdiv
6ea0d441cd [Autocomplete] Fix postgres incompatible query in AutocompleteAction 2021-07-16 19:44:36 +01:00
susdiv
2a82f2774d [SCRIPTS] Fix postgres incompatible query in clean_profiles.php 2021-07-16 19:44:36 +01:00
susdiv
4153a93390 [ActivityPub] Fix Postgres incompatible query in Following and Followed collection 2021-07-16 19:44:36 +01:00
rainydaysavings
14ea9b41c2 [THEME][neo-quitter] Added icon for Network in navbar 2021-07-16 19:44:36 +01:00
Hugo Sales
facf3204d3 [FIX] Fix 'Trying to access array offset on value of type null' in AntiBrutePlugin and SimpleCaptchaPlugin when using scripts 2021-07-16 19:44:36 +01:00
tenma
34e1a6ee08 [OStatus] Remove TFN's deprecated Census event and fix small typo in the code 2021-07-16 19:44:36 +01:00
tenma
12945c4d20 [ActivityPub] Remove TFN's deprecated Census event 2021-07-16 19:44:36 +01:00
tenma
bbd9044626 [TheFreeNetwork] Use config + module settings for initialization and online lookup
The Census event is now replaced with module settings for populating the
protocols array. With this we can shutdown some plugins and still make
them be checked by TFN.

The performance:high config is now added when deciding whether or not to
do online lookup after the offline lookup fails.

default:
- Add default values for the TFN protocol setting

EVENTS:
- Remove Cencus event

TheFreeNetworkModule
- Remove Census event handler, update protocols array to use module's settings
- Use performance:high config when deciding to do online lookup
2021-07-16 19:44:36 +01:00
tenma
135c50762a [OStatus] Add TheFreeNetwork module's support in handling profile insertion
Ostatus_profile:
- Update createActivityObjectProfile to trigger TFN's assistance in inserting the profile
2021-07-16 19:44:36 +01:00
tenma
9fcccd8b5a [ActivityPub] Add TheFreeNetwork module's support in handling profile insertion
Activitypub_profile:
- Update do_insert to trigger TFN's assistance in inserting the profile

explorer:
- Use the new LRDD's method for grabbing profile aliases
2021-07-16 19:44:36 +01:00
tenma
f1021358ed [TheFreeNetwork] Handle new StartTFNLookup and EndTFNLookup events
EVENTS:
- describe new events

TheFreeNetworkModule:
- add event handlers and necessary auxiliary methods
- minor comment updates
2021-07-16 19:44:36 +01:00
tenma
40bc43215d [OStatus] Update salmonaction to use the new LRDD's method for grabbing aliases 2021-07-16 19:44:36 +01:00
tenma
8b8157ce25 [LRDD] Add a new method for grabing profile aliases 2021-07-16 19:44:36 +01:00
tenma
a17c010bb9 [ActivityPub] Autofix profile URIs through alias discovering
Activitypub_profile:
- Add updateUri method

explorer:
- Add grab_aliases method
- Update grab_local_user's online course to grab and test aliases
2021-07-16 19:44:36 +01:00
Alexei Sorokin
aa2f09fa3c [UI] Fix group member pages showing up twice 2021-07-16 19:44:36 +01:00
Alexei Sorokin
26622cb84b [UI] Order groups in join descending order in profiles 2021-07-16 19:44:36 +01:00
Hugo Sales
3f8f77dff1 [CORE] Fix 'Array and string offset access syntax with curly braces is deprecated' in AuthCryptModule and DirectionDetectorPlugin 2021-07-16 19:44:36 +01:00
Alexei Sorokin
7b1c3dbb3f [Nodeinfo] Count active users for full days and without silenced 2021-07-16 19:44:36 +01:00
Alexei Sorokin
9396539f58 [CORE] Re-format the inboxnoticestream query 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
4caa394db6 [UI] Small improvement on attachment's visual 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
617e3af5cd [SensitiveContent] Fix plugin settings
Also reformatted the code and minor bug fixed it
2021-07-16 19:44:36 +01:00
nee
7ee8751b8e [SensitiveContent] Add option to activate for not-logged-in visitors
Remove redundant setting retrival code.

An example config.php entry to activate the new config:
$config['site']['sensitivecontent']['hideforvisitors'] = true;
2021-07-16 19:44:36 +01:00
nee
2419d85edf [SensitiveContent] Don't crash in GNU social classic
When an attachment has no thumbnail (for example when it's a video).
2021-07-16 19:44:36 +01:00
Hugo Sales
5b3105402e [SensitiveContent] Fix bug where having this plugin activated would not size thumbnails correctly 2021-07-16 19:44:36 +01:00
Hugo Sales
b7ed15c865 [CORE] Make avatars be served with the same mechanism as attachments 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
1ea12e0cdf [PLUGINS] Remove VideoThumbnails not useful anymore 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
6598b89db0 [ActivityPub] Fix profile url handling 2021-07-16 19:44:36 +01:00
tenma
1d7855a70d [INSTALL] Allow the setup of sslproxy during install time
install.php:
installer.php:
- add option field and handle logic

display.css:
- hardcode ssl's label margin-top value so all options are correctly displayed
2021-07-16 19:44:36 +01:00
tenma
eac3f58e9a [DOCUMENTATION] Add further notes to the nginx sample config 2021-07-16 19:44:36 +01:00
tenma
d369e807fb [DATABASE] Fix deprecated call to implode() 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
4a90f281ed [ActivityPub] Fix undefined tag index 'type' in Activitypub_notice 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
0204ffb1fa [NOTICES] Add data-nosnippet attribute for notices by remote profiles 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
570fc17e8a [SHOWSTREAM] Add robots meta-tag for remote profiles 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
684a1a4143 [FORMAT] Ran php-cs-fixer on the handlers of notice items and streams
This was to keep the following two commits readable
- actions/showstream.php
- actions/userbyid.php
- lib/modules/ActivityHandlerModule.php
- lib/modules/ActivityHandlerPlugin.php
- lib/notices/conversationnoticestream.php
- lib/notices/noticelistitem.php
- lib/notices/noticestream.php
- lib/notices/threadednoticelistitem.php
2021-07-16 19:44:36 +01:00
Alexei Sorokin
3951ccbef7 [CORE] Use monotonic time via hrtime() where applicable
The realtime clock is not reliable when calculating elapsed time.
2021-07-16 19:44:36 +01:00
Alexei Sorokin
d467370efb [Embed][CORE] Validate the hexadecimal for hex2bin properly 2021-07-16 19:44:36 +01:00
Alexei Sorokin
ceeb6d4d8f [PEAR DB_DataObject] Make static methods in Cast actually static 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
73a514ddcc [DOCUMENTATION] Updated TODO and branches info 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
91869c78ac [CORE] Better queues defaults 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
351e356bb4 [ActivityPub][Postman] Fix not sending notices to self 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
705b679332 [Ostatus] Partially revert 69add504e6
updateuris isn't needed after alll, we should solve this with TFNM and existing infrastructure.
2021-07-16 19:44:36 +01:00
Diogo Cordeiro
e7778bd5d7 [ActivityPub][RSA] Revision, increase type scrictness and improve docs 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
73af7be061 [ActivityPub] Properly handle Actor URIs by using events correctly
This should fix nulls on explorer lookups inputed by postman after generate_followers/getSubscribers, that I think were caused by calling common_profile_uri that, curiously, only handles local profiles
2021-07-16 19:44:36 +01:00
Diogo Cordeiro
165edc2609 [CORE] Add GNUSOCIAL_ENGINE_REPO_URL and increase usage of GNUSOCIAL_ENGINE_URL 2021-07-16 19:44:36 +01:00
Alexei Sorokin
7bd316b506 [API] Show a nicer no such user error on statusnet/groups/list_all 2021-07-16 19:44:36 +01:00
Alexei Sorokin
f24d122ef5 [SCRIPTS] Fix resend_confirm_address.php
Fix a regression from 6ec72b2978,
check if an address is set when using --email.
2021-07-16 19:44:36 +01:00
Alexei Sorokin
ef056779fc [Xmpp] Adjust type declarations for changes in XMPPHP 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
63669d3447 [COMPOSER] update 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
c96dafa191 [ActivityPub][RSA] Fix types of generate_keys 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
3d805026a2 [ExtendedProfile] Fix updates and allow to delete values 2021-07-16 19:44:36 +01:00
Alexei Sorokin
53af27a303 [NodeInfo][DATABASE] Adjust indices of the "notice" and "user" tables
On big databases these queries from the Nodeinfo plugin choked up:

SELECT profile_id FROM notice
  WHERE notice.created >= (CURRENT_DATE - INTERVAL '180' DAY)
  AND notice.is_local = 1;
SELECT id FROM "user"
  WHERE "user".created >= (CURRENT_DATE - INTERVAL '180' DAY);
2021-07-16 19:44:36 +01:00
Diogo Cordeiro
fbc6fe0818 [UI] Fix a small typo 2021-07-16 19:44:36 +01:00
Diogo Cordeiro
3b01aa31d3 [REALTIME] Reviewed both the superclass and its dist plugins 2021-07-16 19:44:36 +01:00
Alexei Sorokin
aab3584f93 [DATABASE] Remove profile_tag_tag_fkey
profile_list.tag is not supposed to be unique,
this also reverts the addition of profile_list_tag_key.
2021-07-16 19:44:35 +01:00
Alexei Sorokin
0bbcb5b098 [Xmpp] Latin-1 space characters are not forbidden for XMPP resources
Also use mb_strlen() with the 8bit encoding to count octets, strlen() is not as
reliable (mbstring.func_overload).
2021-07-16 19:44:35 +01:00
Alexei Sorokin
05f4b1e97d [Xmpp] Use UnexpectedValueException in splitJid, a bit narrower 2021-07-16 19:44:35 +01:00
Alexei Sorokin
eab5725698 [DATABASE] Disable 'NULL' strings evaluation as SQL NULLs
Use $object->sqlValue('NULL') (identical to DataObject_Cast'ing) instead and
fix related issues like (email|sms)settings considering these NULLs as a
false positive for the E-Mail address still being set when it's been removed.

There could also be security implications to the now-disabled approach of
considering 'NULL' strings as SQL NULLs.
2021-07-16 19:44:35 +01:00
Diogo Cordeiro
fd68965255 [ActivityPub] New URI system 2021-07-16 19:44:35 +01:00
Diogo Cordeiro
4dbc8d1233 [PEAR DB_DataObject] Removed DB_DATAOBJECT_NO_OVERLOAD as we don't have support for either PHP 4 or 5 2021-07-16 19:44:35 +01:00
tenma
b19da881c7 [TheFreeNetwork] First code: Module class and census event 2021-07-16 19:44:35 +01:00
tenma
128c2c2e15 [SCRIPTS] Add updateuris script
To fix user URIs to their non-fancy version
2021-07-16 19:44:35 +01:00
tenma
c861eb7232 [CORE] Update common_user_uri
To be consistent between federated-protocols and maintain non-fancy URIs
2021-07-16 19:44:35 +01:00
tenma
3fb78ab108 [OStatus] Add script for profile deduplication and URI fixing 2021-07-16 19:44:35 +01:00
tenma
6a37c21ead [ActivityPub] Fix some small known problems
ActivityPubPlugin:
- Rework onProfileDeleteRelated to account for the tables _rsa and _pending_follow_requests
- Update onEndShowAccountProfileBlock to stop creating the ap_profile if it doesn't exist (we'll handle this in a different manner)

Activitypub_profile:
- Remove unnecessary code from from_profile method and add return type information

Explorer:
- Update travel_collection to call itself instead of _lookup, that was wrong
2021-07-16 19:44:35 +01:00
Alexei Sorokin
b3c2dfd9c9 [AnonymousFave][DATABASE] Set the created timestamp on INSERT 2021-07-16 19:44:35 +01:00
Alexei Sorokin
0c1e9bbc17 [DAEMONS][TwitterBridge] Set PUBLICDIR 2021-07-16 19:44:35 +01:00
Alexei Sorokin
ab020c7528 [COMPOSER] Remove some pre-composer remnants from the code 2021-07-16 19:44:35 +01:00
Alexei Sorokin
c1bd59e243 [DOCUMENTATION][NGINX conf] snippets/fastcgi-php.conf is Debian-specific 2021-07-16 19:44:35 +01:00
Alexei Sorokin
01696246eb [Embed][CORE] hex2bin should always get an even amount of symbols 2021-07-16 19:44:35 +01:00
tenma
234ba7705f [ActivityPub] Fix successive "Cannot use object of type stdClass as array" errors in the postman 2021-07-16 19:44:35 +01:00
tenma
06d7e5bf06 [MODULES] Fix VERSION constant to MODULE_VERSION in various modules 2021-07-16 19:44:35 +01:00
Diogo Cordeiro
d69f479cba [CORE] Allow to force non-fancy URLs
Essential to allow toggling fancy urls later. In some cases it is
critical to keep the URL an unique URI.
2021-07-16 19:44:35 +01:00
Diogo Cordeiro
3dcedfa8bd [MEDIA] Simplify Attachment actions 2021-07-16 19:44:35 +01:00
Diogo Cordeiro
4a78510e37 [FILE] Fix Return value of File::getFileOrThumbnailSize() must be of the type int, null returned 2021-07-16 19:44:35 +01:00
Diogo Cordeiro
81711a18d9 [LIB_REFACTOR] Fix minor issues 2021-07-16 19:44:35 +01:00
tenma
4901126519 [ActivityPub] Revert usage of bitwise-operator & in the inbox_handler class. 2021-07-16 19:44:35 +01:00
Diogo Cordeiro
9088e58a64 [ActivityPub] The protocol allows content to be null, GNU social doesn't, we'll reject silentiously
Reported by kaniini
2021-07-16 19:44:35 +01:00
Diogo Cordeiro
4133874e59 [ActivityPub] attributedTo itself is not required, if not present then it should be inferred from the actor
Reported by kaniini
2021-07-16 19:44:35 +01:00
Diogo Cordeiro
b7ce5b91a4 [ActivityPub] Fix security issue concerning remote profile deletes
Reported by kaniini
2021-07-16 19:44:35 +01:00
Diogo Cordeiro
48eee0e018 [ActivityPub] Inbox Handler: Remove old guzzle import
Improve exception information in doc blocks
2021-07-16 19:44:35 +01:00
Diogo Cordeiro
174733edc8 [ActivityPub] Slightly increase robustness on exception handling
Also ported Activitypub_rsa to PHP7
Minor indentation fixes
2021-07-16 19:44:35 +01:00
Diogo Cordeiro
c93049d0da [ActivityPub] Consistent headers in explorer requests
Minor indentation fixes
2021-07-16 19:44:35 +01:00
Miguel Dantas
9692150c23 Fix 'Call to a member function getPayload() on null'
Trying to enable the RedisCache with the latest nightly, getting this with the daemon:

sep 25 11:40:18 friedrich startdaemons.sh[21428]: PHP Fatal error:  Uncaught Error: Call to a member function getPayload() on null in /var/www/social/plugins/RedisCache/RedisCachePlugin.php:96
sep 25 11:40:18 friedrich startdaemons.sh[21428]: Stack trace:
sep 25 11:40:18 friedrich startdaemons.sh[21428]: #0 /var/www/social/lib/util/event.php(89): RedisCachePlugin->onStartCacheSet('gnusocial:herds...', Object(HubSub), NULL, 86400, false)
sep 25 11:40:18 friedrich startdaemons.sh[21428]: #1 /var/www/social/lib/cache/cache.php(202): Event::handle('StartCacheSet', Array)
sep 25 11:40:18 friedrich startdaemons.sh[21428]: #2 /var/www/social/classes/Memcached_DataObject.php(520): Cache->set('gnusocial:herds...', Object(HubSub))
sep 25 11:40:18 friedrich startdaemons.sh[21428]: #3 /var/www/social/classes/Memcached_DataObject.php(52): Memcached_DataObject->encache()
sep 25 11:40:18 friedrich startdaemons.sh[21428]: #4 /var/www/social/classes/Managed_DataObject.php(50): Memcached_DataObject::getClassKV('HubSub', 'hashkey', 'a38b9dc516371af...')
sep 25 11:40:18 friedrich startdaemons.sh[21428]: #5 /var/www/social/plugins/OStatus/classes/HubSub.php(47): Managed_DataObject::getKV('hashkey', 'a38b9dc516371af...')
sep 25 11:40:18 friedrich startdaemons.sh[21428]: #6 /var/www/social/plugins/OStatus/lib/hubprepqueuehandler.php(68): HubSub::getByHashkey('https://herds.e...', 'https://raki.so...')
sep 25 11:40:18 friedrich startdaemons.sh[21428]: #7 /var/www/social/plugins/RedisQueue/classes/RedisQueueManager.php(58): HubPrepQueueHandl in /var/www/social/plugins/RedisCache/RedisCachePlugin.php on line 96
Sign in to j
2021-07-16 19:44:35 +01:00
Miguel Dantas
e25803b537 [Embed][CORE] Fixes 'Invalid Filename' on Embed. Regex didn't get updated 2021-07-16 19:44:35 +01:00
Alexei Sorokin
0fac7e49e2 Fix minor git merge resolving issues 2021-07-16 19:44:35 +01:00
Alexei Sorokin
1ba3416cd1 [SCRIPTS] Set PUBLICDIR in plugin scripts as well 2021-07-16 19:44:35 +01:00
Alexei Sorokin
3460c13535 [DAEMONS] Move resetDb to the Daemon class
As it is used inside the Daemon class now, it should always be available.
2021-07-16 19:44:35 +01:00
Diogo Cordeiro
344db5dcdf [ActivityPub] Add missing parenthesis in class instantiation
Fixed some issues related to thrown exceptions in the doblocks; also boolean -> bool
2021-07-16 19:44:35 +01:00
Alexei Sorokin
5f87c14bf8 [ActivityPub] Fix an unhandled error in onStartGetProfileFromURI 2021-07-16 19:44:35 +01:00
Diogo Cordeiro
d0e3f9c823 [ActivityPub] Fix some bugs with onStartNoticeSearch
Refactored Activitypub_profile::ensure_web_finger to Activitypub_profile::ensure_webfinger
Do not throw exceptions in the handling of this event because we don't
want to stop the regular search just because we were unable to find
ActivityPub actors or notes.
2021-07-16 19:44:35 +01:00
Alexei Sorokin
ffef85414e [CORE] Fix logging of very early failures 2021-07-16 19:44:35 +01:00
Alexei Sorokin
cfc93bacbb [DATABASE][MariaDB] Properly account for foreign keys 2021-07-16 19:44:35 +01:00
Diogo Cordeiro
acd64ba54a [BugFix] Plugins ExtendedProfile and OverwriteThemeBackground - admin is identical to system path names. 2021-07-16 19:44:35 +01:00
Alexei Sorokin
8e9db78258 [OStatus] The unsubscribe state also needs a label 2021-07-16 19:44:35 +01:00
Alexei Sorokin
a9443d754a [INSTALL] Fix lib/util/installer.php import path 2021-07-16 19:44:35 +01:00
Diogo Cordeiro
ee405df000 [MODULES] Make disable in admin panel effective 2021-07-16 19:44:35 +01:00
Alexei Sorokin
16b5ddd230 [DATABASE] Re-introduce PostgreSQL support 2021-07-16 19:44:35 +01:00
Alexei Sorokin
e807e3bf08 [DATABASE] Use "<>" as an SQL non-equality sign
"!=" is not SQL compliant.
2021-07-16 19:44:35 +01:00
Alexei Sorokin
37e5983aca [DATABASE] Columns not in GROUP BY must not be queried 2021-07-16 19:44:35 +01:00
Alexei Sorokin
0e0c375e65 [DATABASE] Re-introduce the enum type abstraction 2021-07-16 19:44:35 +01:00
Alexei Sorokin
6b4344968d [DATABASE] Set all primary keys as "not null" explicitly 2021-07-16 19:44:35 +01:00
Alexei Sorokin
2b0251213f [DATABASE] Various table schema related fixes 2021-07-16 19:44:35 +01:00
Alexei Sorokin
bc97f34f5a [DATABASE] Re-order tables to be created
Foreign keys need to be created after the respective tables are already in
place. This order makes sure this is the case.
2021-07-16 19:44:35 +01:00
Alexei Sorokin
3f17a0efea [DATABASE] Introduce a bool type in schema
PostgreSQL has a clear distinction between integers and booleans, so it makes
sense to draw a clear line.
2021-07-16 19:44:35 +01:00
Alexei Sorokin
9d87c37ac1 [DATABASE] Consistently use the "LIMIT $limit OFFSET $offset" syntax
The "LIMIT $offset, $limit" syntax is only supported by MySQL and MariaDB.
2021-07-16 19:44:35 +01:00
Alexei Sorokin
60ada8ae65 [DATABASE] Use time intervals in a SQL standard compliant way 2021-07-16 19:44:35 +01:00
Alexei Sorokin
6095a6de64 [DATABASE] Only use single quotation marks for SQL strings
Double quotation marks are only used for identifiers in the SQL standard.
2021-07-16 19:44:35 +01:00
Alexei Sorokin
6fae840ee7 [DATABASE] Set NULL in DB_DataObject in a more reliable manner
Also stop assuming that FeedSub::sub_state (enum) and FeedSub::sub_end
(datetime) can possibly be set to an empty string.
2021-07-16 19:44:35 +01:00
Alexei Sorokin
d26aac77b3 [DATABASE] Always quote identifiers
The code used to operate under the assumption that MariaDB doesn't support
quoting identifiers. Not only is that not exactly true, but MariaDB has
reserved keywords that cannot be used as table or column names unquoted.
2021-07-16 19:44:35 +01:00
Alexei Sorokin
1b41a38719 [CORE] Another inboxnoticestream improvement 2021-07-16 19:44:35 +01:00
Alexei Sorokin
1b66209e53 [DAEMONS] Switch daemons to double-forking for daemonisation 2021-07-16 19:44:35 +01:00
Alexei Sorokin
72f5576795 [DAEMONS] Properly disconnect daemons from the database 2021-07-16 19:44:35 +01:00
Miguel Dantas
cb412d228c [OpportunisticQM] Revamped plugin to be able to use other poll based queuemanagers, no just the DB 2021-07-16 19:44:35 +01:00
Miguel Dantas
b0e10f01cb [StompQueue] Changed StompQueueManager to use polling rather than sockets 2021-07-16 19:44:34 +01:00
Miguel Dantas
7cdd64f594 [PLUGINS] Added UnQueue, a new default plugin which does all actions immediately 2021-07-16 19:44:34 +01:00
Miguel Dantas
333b915740 [PLUGINS] Added DBQueue plugin 2021-07-16 19:44:34 +01:00
Miguel Dantas
e3c34c4693 [PLUGINS] Added StompQueue plugin, based on the implementation in lib/queue/stompqueuemanager. Updated to new STOMP library version. Dropped liberalstomp.php and stompqueuemanager.php 2021-07-16 19:44:34 +01:00
Miguel Dantas
3fbf974dad [PLUGINS] Added RedisQueue 2021-07-16 19:44:34 +01:00
Miguel Dantas
44e96deecd [CORE][AUTOLOAD] Fix class OAuthRequest not found
Issue description as reported by aab:

2019-08-28 17:34:48 LOG_ERR: [khp.ignorelist.com:61055.f5f7f51c GET /api/statuses/show/178372.atom] ServerErrorAction: 500 Class 'OAuthRequest' not found
2019-08-28 17:39:50 LOG_ERR: [khp.ignorelist.com:65390.4483ff85 GET /api/statusnet/conversation/104672.rss] Handled serverError (500) but cannot output into desired format ('rss'): 'Class \'OAuthRequest\' not found'
2019-08-28 17:39:50 LOG_ERR: [khp.ignorelist.com:65390.4483ff85 GET /api/statusnet/conversation/104672.rss] ServerErrorAction: 500 Class 'OAuthRequest' not found
2019-08-28 17:40:49 LOG_ERR: [khp.ignorelist.com:65390.4c745f68 GET /api/statuses/show/18132.atom] Handled serverError (500) but cannot output into desired format ('atom'): 'Class \'OAuthRequest\' not found'
2019-08-28 17:40:49 LOG_ERR: [khp.ignorelist.com:65390.4c745f68 GET /api/statuses/show/18132.atom] ServerErrorAction: 500 Class 'OAuthRequest' not found
2019-08-28 17:47:41 LOG_ERR: [khp.ignorelist.com:65390.42ee9fd4 GET /api/statusnet/conversation/133023.as] Handled serverError (500) but cannot output into desired format ('as'): 'Class \'OAuthRequest\' not found'
2021-07-16 19:44:34 +01:00
Miguel Dantas
55f4ed036d [FRAMEWORK][AUTOLOAD] Fix autoloads 2021-07-16 19:44:34 +01:00
Miguel Dantas
ab3e8ce21d [LIB_REFACTOR] Fix requires 2021-07-16 19:44:34 +01:00
Miguel Dantas
2ab2e22a36 [LIB_REFACTOR] Moving files into separate semantic categories 2021-07-16 19:44:34 +01:00
Miguel Dantas
5e16606358 [RedisCache] Fix call to getPayload on int. The library is badly documented, but seems to return the TTL instead of the normal redis response
Issue description as reported by aab:

About one day after enabling redis plugin:

PHP Fatal error:  Uncaught Error: Call to a member function getPayload() on int in /var/www/html/plugins/RedisCache/RedisCachePlugin.php:96
Stack trace:
0 /var/www/html/lib/event.php(89): RedisCachePlugin->onStartCacheSet('gnusocial:gatea...', Object(Queue_item), NULL, 86400, false)
1 /var/www/html/lib/cache.php(202): Event::handle('StartCacheSet', Array)
2 /var/www/html/classes/Memcached_DataObject.php(496): Cache->set('gnusocial:gatea...', Object(Queue_item))
3 /var/www/html/classes/Memcached_DataObject.php(416): Memcached_DataObject->encache()
4 /var/www/html/classes/Managed_DataObject.php(620): Memcached_DataObject->update(Object(Queue_item))
5 /var/www/html/classes/Queue_item.php(74): Managed_DataObject->update(Object(Queue_item))
6 /var/www/html/lib/dbqueuemanager.php(75): Queue_item::top(Array, Array)
7 /var/www/html/lib/iomaster.php(287): DBQueueManager->poll()
8 /var/www/html/lib/iomaster.php(161): IoMaster->poll()
9 /var/www/html/scripts/queuedaemon.php(112): IoMaster->service()
10 /var/www/html/lib/spawni in /var/www/html/plugins/RedisCache/RedisCachePlugin.php on line 96
2021-07-16 19:44:34 +01:00
Miguel Dantas
ba593bfa39 [Memcached] Fix call to undefined method close
Issue description as reported by aab:

Memcached config in config.php:

    addPlugin('Memcached', [ 'servers' => ['127.0.0.1', 11211],
                             'defaultExpiry' => 86400 // 24h
                           ]);

Memcached and php-memchached installed.

The error appears when executing startdaemons.

Log:

    PHP Fatal error:  Uncaught Error: Call to undefined method Memcached::close() in /var/www/html/plugins/Memcached/MemcachedPlugin.php:202
    Stack trace:
    #0 /var/www/html/lib/event.php(89): MemcachedPlugin->onStartCacheReconnect(false)
    #1 /var/www/html/lib/cache.php(273): Event::handle('StartCacheRecon...', Array)
    #2 /var/www/html/lib/spawningdaemon.php(209): Cache->reconnect()
    #3 /var/www/html/lib/spawningdaemon.php(188): SpawningDaemon->resetDb()
    #4 /var/www/html/lib/spawningdaemon.php(118): SpawningDaemon->initAndRunChild(3)
    #5 /var/www/html/lib/daemon.php(168): SpawningDaemon->run()
    #6 /var/www/html/scripts/queuedaemon.php(186): Daemon->runOnce()
    #7 {main}
      thrown in /var/www/html/plugins/Memcached/MemcachedPlugin.php on line 202
2021-07-16 19:44:34 +01:00
Miguel Dantas
a99ae06573 [Embed] Fix use of undefined img_data
Got error 'PHP message: PHP Notice: Undefined variable: img_data in /var/www/html/plugins/Embed/EmbedPlugin.php on line 544'
2021-07-16 19:44:34 +01:00
tenma
8f070f53ec [CORE] Fix undefined offset warnings in different files
This problem was presentend in the following issue:
https://notabug.org/diogo/gnu-social/issues/60

AcceptHeader/util:
- Perform isset before using the required array values
2021-07-16 19:44:34 +01:00
tenma
fe2168c5ae [ActivityPub] Add support fox search-box profile/notice grabbing
NoticeSearchAction:
- Add new event before finding query matches

ActivityPubPlugin:
- Subscribe new searchNotice event
- Bump minor version number

Activitypub_explorer:
- Update lookup to make remote-grabbing optional
2021-07-16 19:44:34 +01:00
tenma
3392939004 [ActivityPub] Handle DELETE-Person activity
ActivityPubPlugin:
- update grab_notice_from_url to make online grab optional
- subscribe events of user and profile deletion
- bump minor version number

Activitypub_inbox_handler:
- separate handle_delete for delete-note and delete-person

Activitypub_postman:
- add delete-person logic

Activitypub_delete:
- update validation method to check for the "Person" type
- update to_array method to target the activity
2021-07-16 19:44:34 +01:00
Miguel Dantas
18d9875e59 [CORE] Fix small bug where Notice was sending a JSON representation to the queue, instead of sending itself 2021-07-16 19:44:34 +01:00
tenma
58a9c71391 [AP] Fix subscription events
Both StartSubscribe and StartUnsubscribe had a wrong initial if-condition.
Furthermore, this events were calling Activitypub_profile::from_profile()
which is wrong because it creates the Activitypub_profile object when
the goal is only to check if it exists already.
2021-07-16 19:44:34 +01:00
tenma
6af86536aa [AP] Subscribe RemoteFollow plugin events for allowing following with the remote-follow button 2021-07-16 19:44:34 +01:00
tenma
66c5d17469 [OStatus] Port remote-follow to the RemoteFollow plugin
OStatusPlugin:
- Stop adding the remote-follow button
- Subscribe to required RemoteFollow plugin events
- Drop main/ostatussub route and update urls to the main/RemoteFollowSub route
- Bump plugin minor version number

actions/ostatusgroup,
actions/ostatuspeopletag:
- Update urls to the main/RemoteFollowSub route

lib/util:
- Port required functions from OStatusSubAction and adapt to be used with the new events
2021-07-16 19:44:34 +01:00
tenma
32ae48358d [RemoteFollow] Initial work in the RemoteFollow plugin
lib/default.php
- Add RemoteFollow to the list of default plugins

RemoteFollowPlugin:
- Subscribe events to add the remote-follow button

RemoteFollowInitAction:
- Handles the remote-follow form and getting the redirection url for follow completion

RemoteFollowSubAction:
- Handles the remote profile pulling and actual following
2021-07-16 19:44:34 +01:00
Miguel Dantas
d9668a6d07 [URLMAPPER] Fix small bug in URLMapper: a dynamic route might not exist even if a static one does 2021-07-16 19:44:34 +01:00
Miguel Dantas
12172f08d7 [DirectMessage] Fixed use of incorrect type which prevented posting notices with only one word 2021-07-16 19:44:34 +01:00
tenma
84ba14426c [AP] Update version info 2021-07-16 19:44:34 +01:00
tenma
13d7c3debe [AP] Prevent postman to include the actor's followers for every sent activity 2021-07-16 19:44:34 +01:00
tenma
738f9cb89c [AP] Support Private Messaging
ActivityPubPlugin:
- Subscribe DirectMessage events

Activitypub_inbox_handler:
- Update handle_create_note to create private messages

Activitypub_postman:
- Add create_direct_note for sending private messages

Activitypub_create:
- Update create_to_array to support the 'directMessage' attribute
- Add isPrivateNote to verify private activities

Activitypub_notice:
- Update create_note to support the 'directMessage' attribute
- Remove isPrivateNote

lib/models:
- Add Activitypub_message, the model in charge of private notes
2021-07-16 19:44:34 +01:00
tenma
3852ad175f [AP] Fix Follow collections
Activitypub_profile:
- Fix subscription-counter getter functions, invalid profiles were being counted

apActorFollowingAction:
- Small rewrite of generate_following, didn't make sense to not use try-catch block

apActorFollowersAction:
- Small rewrite of generate_followers, didn't make sense to not use try-catch block
2021-07-16 19:44:34 +01:00
tenma
83f179989e [AP] Handle unlisted/followers-only notices
Note that this commit isn't intended to add support for sending such notes
in GS. Instead, we handle the reception, storage and direct reply to this
type of notices, in AP.

ActivityPubPlugin:
- Subscribe the event StartNoticeSave to hack answering non-public notes

Activitypub_create:
- Add 'directMessage' attribute to the Create activity, defaulting to false for now
- Update validation method: validate 'directMessage' and add debug

Activitypub_notice:
- Handle incoming unlisted/followers-only notes
- Add support for unlisted-replies
- Add method to verify private (direct) notices

inbox_handler:
- Add handler for CREATE Note
- Prepare logic for private-messaging
- Overall refactor: Class members were continuously being passed as function arguments without need

SharePlugin:
- Stop showing the announce button in non public posts
2021-07-16 19:44:34 +01:00
tenma
0d9606ffbf [AP] Properly target public notices
ActivityPubPlugin:
- Use TO as principal audience, CC as secondary
- Update note validation
2021-07-16 19:44:34 +01:00
Miguel Dantas
4a56a61094 [RedisCache] Added plugin description, fixes 'empty msgid' error 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
8d9b88a8bc [OverwriteThemeBackground] This new plugin will let the admin set a custom background theme independent 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
616858ea89 [ExtendedProfile] Fix Admin menu option 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
428878b6d8 [MODULES] Allow to delete third party plugins 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
0d7c0069f2 [MODULES] Allow to upload third party plugins
Fixed some bugs
2021-07-16 19:44:34 +01:00
Diogo Cordeiro
ca22279797 [MODULES] List all available plugins and allow enabling them via UI
Yet another revision of the Admin Plugin Management tool
2021-07-16 19:44:34 +01:00
Diogo Cordeiro
5524cf331c [DOCUMENTATION][DEVELOPERS][PLUGINS] Some updates to Plugins doc 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
a43c10582f [TagCloud] Add Readme 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
8d848683ad [SearchSub][README] No longer is a default plugin since 8614cd77 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
0c6d94fca8 [SamplePlugin] Review and update with the latest GNU social best practices 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
68db757269 [ConversationTree] Format the plugin, add strict typing and fix docblocks 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
76609d8f37 [OfflineBackup] Fix plugin 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
33ac4aed32 [PLUGINS] Removed OpenX as the service doesn't exist anymore 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
2d7ca37036 [GroupFavorited] Fix plugin 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
3bf010ddd8 [ExtendedProfile] Hide 'Extra fields' from profile when no field was created by the sysadmin 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
9a9fa89a0c [ExtendedProfile] Allow to delete custom profile field 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
fd1a7a5e68 [Plugins] Incorporated GNUsocialExtendedProfile as part of ExtendedProfile
Also improved a lot of the plugin and made things in a way it would make sense
2021-07-16 19:44:34 +01:00
Diogo Cordeiro
c71fa9099f [GNUsocialProfileExtensions] Fixed plugin 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
9bb6fc3f0d [PLUGINS] Removed GNUsocial{Photo, Photos, Video} as we don't need them anymore 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
3909d49982 [PLUGINS] Removed GeoURL as the service doesn't exist anymore 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
a4680524a7 [ForceGroup] Modernized plugin and improved documentation 2021-07-16 19:44:34 +01:00
Diogo Cordeiro
5a679ac561 [DEFAULT] Add 'DirectionDetector' as a default plugin 2021-07-16 19:44:33 +01:00
Diogo Cordeiro
66edc49bcf [ChooseTheme] Fixed plugin 2021-07-16 19:44:33 +01:00
Diogo Cordeiro
0ecf9eb649 [BlankAd] Fixed plugin 2021-07-16 19:44:33 +01:00
Diogo Cordeiro
79cce82e50 [Awesomeness] Fixed plugin 2021-07-16 19:44:33 +01:00
Diogo Cordeiro
5ca939fdd2 [DEFAULT] Add 'AccountManager' as a default plugin 2021-07-16 19:44:33 +01:00
Diogo Cordeiro
fa28646d43 [CORE] Core modules shouldn't show up in version action 2021-07-16 19:44:33 +01:00
Diogo Cordeiro
20a6f1d4f4 [CORE] Plugin API now extends a new Module API 2021-07-16 19:44:33 +01:00
Diogo Cordeiro
3821d2317e [PLUGIN API] Bug fixes and improvements 2021-07-16 19:44:33 +01:00
Diogo Cordeiro
99fe3e5a52 [CORE] Move plugin superclasses from /lib/ to /lib/modules/ 2021-07-16 19:44:33 +01:00
Diogo Cordeiro
c18f26145c [CORE] Move core plugins to a new modules directory
For reference (raised by rozzin in IRC):

* http://foldoc.org/module
* http://foldoc.org/library
* http://foldoc.org/plugin

As noted by XRevan86, modules are not necessarily non-essential.
As we will keep the modules directory in GS root [therefore, near to
plugins/], it is evidenced the difference between both.

This is a simple yet fundamental structural change. It doesn't change
functionality but makes clearer the way we understand GNU social's
internals.
2021-07-16 19:44:33 +01:00
Miguel Dantas
8e7ab891a5 [Embed] Added support for inline images 2021-07-16 19:44:33 +01:00
tenma
0b30d932fc [DirectMessage] Major plugin rework
This commit does the necessary rework to store private messages
as Notices and to support Federation. The plugin's README presents
some more detail about the changes and future work that is still
required to do.
2021-07-16 19:44:33 +01:00
tenma
23512bea14 [CORE][ROUTES] Update urlmapper to search dynamic routes before static ones when generating URLs.
This solves the problem of routes that differ only in having
or not $_GET params. The ones not having params (static) were
being matched first during URL generation.

The way this problem was solved was by separating the $reverse
array in both $reverse_statics and $reverse_dynamics and explicitly
traversing this last one first in the generation function. Note that
maintaining the $reverse array and unshifting dynamic routes to its
head ( and therefore to the front of the static ones ) doesn't work
since even among dynamic routes the order of arrival should be kept.
2021-07-16 19:44:33 +01:00
tenma
06fb856d24 [CORE] Add new Notice scope for private messaging
Notice:
- Add MESSAGE_SCOPE scope

lib/*.stream:
- Filter out notices with MESSAGE_SCOPE scope
2021-07-16 19:44:33 +01:00
Miguel Dantas
9ab13191af [Embed] Added support for inline images 2021-07-16 19:44:33 +01:00
Miguel Dantas
bf885fbef8 [Embed] Only resize thumbnail if it's bigger than the desired size 2021-07-16 19:44:33 +01:00
Diogo Cordeiro
233f731296 [DOCUMENTATION] Add release notes
Update INSTALL requirements
Update CHANGELOG
Update TODO
2021-07-16 19:44:33 +01:00
Diogo Cordeiro
3cac110148 [ActivityPub] Move models from 'classes' to 'lib/models' 2021-07-16 19:44:33 +01:00
tenma
ec749aa350 [ActivityPub] Fix WebFinger event subscription
ActivityPubPlugin:
- remove reference to the first argument of onEndWebFingerProfileLinks, no need
as it is an object
2021-07-16 19:44:33 +01:00
tenma
b4b5d3e009 [ActivityPub] Fix handling of Delete Activity
inbox_handler:
- Call stronger validation method for Delete Activity objects
- Take into account mixed object in handle_delete

Activitypub_delete:
- Add validation method for Delete Activity objects
2021-07-16 19:44:33 +01:00
Diogo Cordeiro
489cab0f87 [ActivityPub] This is the first release of the plugin 2021-07-16 19:44:33 +01:00
tenma
130c839adf [ActivityPub] Use queues for notice distribution
ActivityPubPlugin:
- Change event-based notice distribution to queues logic

ActivityPub/lib:
- Add queue handler class activitypubqueuehandler.php

Misc:
- Add documentation for the (Start/End)InitializeQueueManager events
2021-07-16 19:44:33 +01:00
tenma
081eec3608 [OStatus] Fix notice enqueue
OStatusPlugin:
- Enqueue in the last position, as it should be. No need to worry about
the OMB comment, this protocol no longer have queue handlers that could
cause a conflict.
2021-07-16 19:44:33 +01:00
tenma
20d101e1f2 [ActivityPub] Ensuring federation with other software
ActivityPubPlugin:
- Prevent sending a Delete for an Announce

Activitypub_announce:
- Update announce_to_array to add id, to and cc information to the retrieved object

Activitypub_follow:
- Add id to the arguments of follow_to_array, useful for Accept-Follow activities

Activitypub_notice:
- Fix notice validation, url isn't a MUST

Activitypub_inbox_handler:
- Make handle_follow use the received activity id for the later Accept-Follow

Activitypub_postman:
- Fix call to the updated announce_to_array
- Fix successive unnecessary calls to ActivityPubPlugin::actor_uri()
2021-07-16 19:44:33 +01:00
brunoccast
3472eca45b [ActivityPub] Fix notice creation
Activitypub_notice:
- Perform url test, use id when missing.
2021-07-16 19:44:33 +01:00
brunoccast
37936d101e [ActivityPub] Routes
ActivityPubPlugin:
- Update routes to properly use the updated URLMapper
2021-07-16 19:44:33 +01:00
brunoccast
9de1c34bc0 [ActivityPub] Ensuring notice deletion
ActivityPubPlugin:
- Minor onDeleteOwnNotice rewrite

Activitypub_inbox_handler:
- Add deletion check to incoming notice

Activitypub_postman:
- Call the correct getUrl function
2021-07-16 19:44:33 +01:00
brunoccast
87423a0191 [ActivityPub] Ensuring Notice Favor/Disfavor
ActivityPubPlugin:
- Minor re-write of favor/disfavor event handlers

Activitypub_postman:
like/undo-like:
- fix proper getUrl() call
misc:
- make all activities accumulate errors (may be needed later) and log some information about it
2021-07-16 19:44:33 +01:00
brunoccast
233bdf57ac [ActivityPub] Ensuring notice distribution
ActivityPubPlugin:
- Fix of accepted activity verbs to include SHARES
- Add attention profiles to delivery when announcing

Activitypub_notice:
- New local function to retrieve original URL
- Removal of unnecessary 'Atom*' attributes
- Small fix to the ensuring of actor profile

Activitypub_profile:
- New local function to fetch AP profiles from a collection

Activitypub_postman:
- Fix url passed in the announce activity
2021-07-16 19:44:33 +01:00
brunoccast
25390bf96f [ActivityPub] Caching of Following/Followers interactions and collections
Follow interaction:
- Fixed mini-bug where the subscriber profile was being used as the subscribed
- Updated cache subscription-related values in both instances
- Tested and working with local GS instances

Unfollow interaction:
- Updated cache subscription-related values in both instances
- Tested and working with local GS instances

Followers/Following collections:
- Now returning ActivityPub profiles only
- Stored collections in cache

Misc:
- Fix bug concerning the retrieval of public/private-key after in-function generation
2021-07-16 19:44:33 +01:00
brunoccast
90cb222af5 [ActivityPub] Routes
ActivityPubPlugin:
- Update routes to properly use URLMapper
- Minor updates
2021-07-16 19:44:33 +01:00
Diogo Cordeiro
2f1ddd8280 [CORE] Add ActivityPub plugin
This is not the same as the one in https://notabug.org/diogo/gnu-social-activitypub-plugin
Differences to the first "release"
-> Doesn't use guzzle nor has any composer dependencies
-> Supports HTTP Signatures
-> Has basic l10n/i18n
-> Some minor bug fixes
2021-07-16 19:44:33 +01:00
Miguel Dantas
6bf888b520 [PLUGINS] Dropped Memcache in favor of Memcached. The difference between these is that they use a similarly php library to interact with memcache, but memcached is more modern 2021-07-16 19:44:33 +01:00
Miguel Dantas
be1654237d [Memcached] Merged useful features from Memcache 2021-07-16 19:44:33 +01:00
Miguel Dantas
ac97efbf21 [PLUGINS] Updated and reviewed the Memcached plugin 2021-07-16 19:44:33 +01:00
Miguel Dantas
f689df3e68 [RedisCache] Added README with configuration instructions 2021-07-16 19:44:33 +01:00
Miguel Dantas
df468f9605 [RedisCache] Fix use of undefined variable 2021-07-16 19:44:33 +01:00
Miguel Dantas
d7c2c98a02 [PLUGINS] Removed direct call of EndCache events on all plugins, as it is now handled by the library 2021-07-16 19:44:33 +01:00
Miguel Dantas
d8d7abee9f [CACHING] Imported Chimo's RedisCache plugin and fixed some small parts 2021-07-16 19:44:33 +01:00
Miguel Dantas
4f8ede8239 [CORE] Fixed small anti-pattern on cache code. Plugins had to throw EndCache events, when this should be done by the library 2021-07-16 19:44:33 +01:00
Miguel Dantas
19d68c9f8e [COMPOSER] Added predis/predis and updated packages 2021-07-16 19:44:33 +01:00
50c98d53c9 Revert "[CORE] Another fix for the inboxnoticestream query"
This reverts commit bdd55f611f.
2021-07-16 19:44:14 +01:00
Alexei Sorokin
bdd55f611f [CORE] Another fix for the inboxnoticestream query 2020-06-11 21:52:44 +01:00
8731 changed files with 12895 additions and 1050826 deletions

View File

@@ -3,20 +3,22 @@ Credits for GNU social
The following is an incomplete list of developers
who've worked on GNU social, or its predecessors
StatusNet and Free Social. Apologies for any
oversight; please let mattl@gnu.org know if
oversight; please let mail@diogo.site know if
anyone's been overlooked in error.
Current team
------------
* Matt Lee
* Mikael Nordfeldth
V2 team
-------
* Diogo Cordeiro
* Bruno Casteleiro
* Miguel Dantas
* Alexei Sorokin
* Bruno Casteleiro
Credits for GNU social v1
------------------------
Leads
* Mikael Nordfeldth
* Matt Lee
Additional Contributors
-----------------------
* Ciaran Gultnieks
* Michael Landers
* Ori Avtalion
@@ -46,7 +48,7 @@ Additional Contributors
* Blaine Cook
* Henry Story
* Melvin Carvalho
* Stéphane Bérubé
* Stéphane Bérubé (chimo)
* Akio
* Maiyannah Bishop
* Bob Mottram
@@ -55,7 +57,9 @@ Additional Contributors
* Moonman
* Normandy
* Verius
* Diogo Peralta Cordeiro
* Daniel Supernault
* Miguel Dantas
Credits for StatusNet
--------------

View File

@@ -42,7 +42,7 @@ yourself, as these are for the development team to assign priority and area of
coverage to a subject. Please only submit something here if you are certain it
is a bug or represents a feature enhancement that we do not presently have. If
you are uncertain whether it's a bug, please feel free to ask
at #social IRC channel on freenode.net https://www.freenode.net/.
at #social IRC channel at irc.libera.chat https://libera.chat/.
When reporting a bug, please try to include as much information as possible,
including the environment being run on (if it's a common LAMP stack just give

View File

@@ -27,7 +27,7 @@ PHP modules
The following software packages are *required* for this software to
run correctly.
- PHP 7.3+
- PHP 7.4+
- MariaDB 10.3+
- Web server Apache, lighttpd and nginx will all work. CGI mode is
recommended and also some variant of 'suexec' (or a

View File

@@ -1,5 +1,5 @@
# GNU social 2.0.x
(c) 2010-2019 Free Software Foundation, Inc
(c) 2010-2021 Free Software Foundation, Inc
This is the README file for GNU social, the free
software social networking platform. It includes
@@ -36,7 +36,7 @@ XMPP), and specially-designed desktop clients that
support the Twitter API.
GNU social supports open standards (such as OStatus
<https://www.w3.org/community/ostatus/>) that lets users in
<https://www.w3.org/community/ostatus/> and ActivityPub <https://activitypub.rocks/>) that lets users in
different networks follow each other. It enables a
distributed social network spread all across the
Web.
@@ -102,46 +102,20 @@ unless you configured a separate logfile. This is
probably the first place to look if you're getting
weird behaviour from GNU social.
If you're tracking the unstable version of
GNU social in the git repository (see below), and you
get a compilation error ("unexpected T_STRING") in
the browser, check to see that you don't have any
conflicts in your code.
### Unstable version
If you're adventurous or impatient, you may want
to install the development version of GNU social.
To get it, use the git version control tool
<http://git-scm.com/> like so:
git clone https://notabug.org/diogo/gnu-social.git
In the current phase of development it is probably
recommended to use git as a means to stay up to date
with the source code. You can choose between these
branches:
* 1.20.x "oldstable", few updates, well tested coded ( **recommended** )
* master "stable", usually working well (should be safe)
* nightly "testing", most updates, not always working as expected (can be dangerous)
**IMPORTANT: We force push to the nightly branch, the nightly branch is intended for GNU social developers only.**
To keep it up-to-date, use `git pull`. Watch for conflicts!
As in any upgrade, do __not__ forget to run `/scripts/upgrade.php`.
Do __not__ forget to run `/scripts/upgrade.php` if you're upgrading to this release.
## Further information
There are several ways to get more information about GNU social.
* The #social IRC channel on freenode.net <https://www.freenode.net/>.
* The unofficial XMPP room linked to IRC on <xmpp:gnusocial@conference.bka.li>
* The GNU social website <https://gnu.io/social/>
* The #social IRC channel at irc.libera.chat <https://libera.chat/>.
* The #social:libera.chat Matrix room
* The bridged XMPP room at <xmpp:gnusocial@conference.bka.li?join>
* The GNU social website <https://gnusocial.rocks/>
* GNU social has a bug tracker for any defects you may find, or ideas for
making things better. <https://notabug.org/diogo/gnu-social/issues>
* Patches are welcome, preferrably to our repository on notabug.org. <https://notabug.org/diogo/gnu-social>
* Patches are welcome, preferably to our repository on notabug.org. <https://notabug.org/diogo/gnu-social>
## Credits
@@ -149,11 +123,9 @@ An incomplete list of developers who've worked on GNU social,
or its predecessors StatusNet and Free Social has been made available
in `CREDITS.md`.
### Current team
### Release development team
* Matt Lee
* Mikael Nordfeldth
* Diogo Cordeiro
* Bruno Casteleiro
* Miguel Dantas
* Alexei Sorokin
* Many important contributions from GNU social Summer of Code students such as Bruno Casteleiro and Hugo Sales.

View File

@@ -7,7 +7,7 @@ proceeded by the killing of the other Persian messengers.
## For users/sysadmins
### Web server changes
- GS is now structurely divided in includes and public
- GS is now structurally divided in includes and public
- New media handling system, new important settings, refer to CONFIGURE doc and web server conf
- `$config['site']['x-static-delivery']`
- You must also review the [attachments section of CONFIGURE](https://notabug.org/diogo/gnu-social/src/new_modules_system/DOCUMENTATION/SYSTEM_ADMINISTRATORS/CONFIGURE.md#attachments).
@@ -21,12 +21,9 @@ proceeded by the killing of the other Persian messengers.
### Federation
- Added ActivityPub support
- Enabled the search box to import remote notices and profiles
- Direct messages
- Direct messages are now via ActivityPub only
### Load and Storage
- Improved Cronish
- Run session garbage collection
- Cleanup Email Registration
- New queues system
- Support for Redis was added
- Support for PostgreSQL was added

28
TODO.md
View File

@@ -4,12 +4,30 @@ Hi! Thank you for your interest in contributing, please refer to
[DOCUMENTATION/DEVELOPERS](https://notabug.org/diogo/gnu-social/src/nightly/DOCUMENTATION/DEVELOPERS)
to learn how you can contribute.
Our roadmap is available in the following Kanban board:
[Kanban Board](https://kanban.diogo.site/?controller=BoardViewController&action=readonly&token=03795efb8138c4e7661a900c234c0df1bc3fc03cdfcda8619cd5d0e666de).
## Pending
### [Core]
- Improve Cronish
- Run session garbage collection
- Cleanup Email Registration
- [Security] Review confirmation codes
```
<includeals> my guess is that the author intent was that the admin wouldn't have to verify his account, but has misread the User::register docblock
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/plugins/EmailRegistration/EmailRegistrationPlugin.php#L114
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/classes/Confirm_address.php#L52-L68
<xmpp-gnu> [XRevan86] Here's why 13 symbols
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/classes/User.php#L343-L349 I wonder why parts of the code reinvent the wheel.
<xmpp-gnu> [XRevan86] $result = Confirm_address::saveNew($user->id, $email, 'email');
<xmpp-gnu> [XRevan86] I think it can be replaced with that.
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/actions/emailsettings.php#L357-L364
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/actions/imsettings.php#L316-L325
<xmpp-gnu> [XRevan86] The last one is a bit different, as it's not email. But I think it still applies.
<xmpp-gnu> [XRevan86] diogo: Maybe saveNew can be extended to accept variable bitsize (or better charsize).
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/actions/smssettings.php#L320-L328 then this also can be altered
<xmpp-gnu> [XRevan86] but with keeping the original 40 bitsize
```
- [Database] Move from Pear DB to [PDO_DataObject](https://github.com/roojs/PDO_DataObject)
There are more pending tasks/ideas to implement in this
[repo's issues](https://notabug.org/diogo/gnu-social/issues).
So consider the issue tracker to be the full backlog, in the kanban board it's just what the
[development team](https://notabug.org/diogo/gnu-social/src/nightly/CREDITS.md)
is working on.

View File

@@ -166,6 +166,7 @@ class ApiStatusesUpdateAction extends ApiAuthAction
parent::prepare($args);
$this->status = $this->trimmed('status');
$this->source = $this->trimmed('source');
$this->lat = $this->trimmed('lat');
$this->lon = $this->trimmed('long');
$matches = array();
@@ -294,6 +295,7 @@ class ApiStatusesUpdateAction extends ApiAuthAction
$content = html_entity_decode($status_shortened, ENT_NOQUOTES, 'UTF-8');
$source = html_entity_decode($this->source, ENT_NOQUOTES, 'UTF-8');
$options = array('reply_to' => $reply_to);

View File

@@ -4,7 +4,7 @@
"type": "project",
"license": "AGPL-3.0-only",
"require": {
"php": "^7.3.0",
"php": "^7.4.0",
"ext-bcmath": "*",
"ext-ctype": "*",
"ext-curl": "*",

1315
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -8,8 +8,8 @@ people for %%site.name%%.
Bugs
----
If you think you've found a bug in the underlying [GNU social](https://gnu.io/social/) software,
or if there's a new feature you'd like to see, add it into the [GNU social task list](https://git.gnu.io/gnu/gnu-social/issues).
If you think you've found a bug in the underlying [GNU social](https://gnusocial.rocks/) software,
or if there's a new feature you'd like to see, add it into the [GNU social task list](https://notabug.org/diogo/gnu-social/issues).
Don't forget to check the list of existing bugs to make sure it hasn't already been reported!
Email

View File

@@ -326,7 +326,10 @@ class MediaFile
$original_name = preg_replace('/\.+.+$/i', ".{$ext}", $original_name);
}
$enc_name = bin2hex($original_name);
// Avoid unnecessarily large file names
$pretty_name = substr(trim($original_name), 0, 30); // 30 seems like a sensible limit for a file name
$enc_name = bin2hex($pretty_name);
return "{$enc_name}-{$filehash}";
}

View File

@@ -31,11 +31,11 @@
defined('GNUSOCIAL') || die();
define('GNUSOCIAL_ENGINE', 'GNU social');
define('GNUSOCIAL_ENGINE_URL', 'https://gnusocial.network/'); // Change to https://gnu.io/social/
define('GNUSOCIAL_ENGINE_URL', 'https://gnusocial.rocks/');
define('GNUSOCIAL_ENGINE_REPO_URL', 'https://notabug.org/diogo/gnu-social/'); // Change to https://git.gnu.io/gnu/gnu-social
define('GNUSOCIAL_BASE_VERSION', '2.0.0');
define('GNUSOCIAL_LIFECYCLE', 'alpha0'); // 'dev', 'alpha[0-9]+', 'beta[0-9]+', 'rc[0-9]+', 'release'
define('GNUSOCIAL_BASE_VERSION', '2.0.1');
define('GNUSOCIAL_LIFECYCLE', 'beta0'); // 'dev', 'alpha[0-9]+', 'beta[0-9]+', 'rc[0-9]+', 'release'
define('GNUSOCIAL_VERSION', GNUSOCIAL_BASE_VERSION . '-' . GNUSOCIAL_LIFECYCLE);
@@ -89,15 +89,16 @@ set_include_path(get_include_path() . PATH_SEPARATOR . INSTALLDIR . '/extlib/');
// global configuration object
require_once 'PEAR.php';
require_once 'PEAR/Exception.php';
// This is awful but system's PEAR always gives us issues, we've patched it
require_once INSTALLDIR . '/extlib/' . 'PEAR.php';
require_once INSTALLDIR . '/extlib/' . 'PEAR/Exception.php';
global $_PEAR;
$_PEAR = new PEAR;
$_PEAR->setErrorHandling(PEAR_ERROR_CALLBACK, 'PEAR_ErrorToPEAR_Exception');
require_once 'MDB2.php';
require_once 'DB/DataObject.php';
require_once 'DB/DataObject/Cast.php'; // for dates
require_once INSTALLDIR . '/extlib/' . 'MDB2.php';
require_once INSTALLDIR . '/extlib/' . 'DB/DataObject.php';
require_once INSTALLDIR . '/extlib/' . 'DB/DataObject/Cast.php'; // for dates
require_once INSTALLDIR . '/lib/util/language.php';

View File

@@ -112,8 +112,8 @@ abstract class Installer
}
}
if (version_compare(PHP_VERSION, '7.3.0', '<')) {
$this->warning('Require PHP version 7.3.0 or greater.');
if (version_compare(PHP_VERSION, '7.4.0', '<')) {
$this->warning('Require PHP version 7.4.0 or greater.');
$pass = false;
}

View File

@@ -27,16 +27,6 @@
defined('GNUSOCIAL') || die;
if (version_compare(PHP_VERSION, '7.4.0', '<')) {
function password_algos(): array
{
$algos = [PASSWORD_BCRYPT];
defined('PASSWORD_ARGON2I') && $algos[] = PASSWORD_ARGON2I;
defined('PASSWORD_ARGON2ID') && $algos[] = PASSWORD_ARGON2ID;
return $algos;
}
}
class AuthCryptModule extends AuthenticationModule
{
const MODULE_VERSION = '2.0.0';

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -42,7 +42,7 @@ const ACTIVITYPUB_PUBLIC_TO = ['https://www.w3.org/ns/activitystreams#Public',
];
const ACTIVITYPUB_HTTP_CLIENT_HEADERS = [
'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"',
'User-Agent: GNUsocialBot ' . GNUSOCIAL_VERSION . ' - https://gnusocial.network'
'User-Agent: GNUsocialBot ' . GNUSOCIAL_VERSION . ' - https://gnusocial.rocks'
];
/**

View File

@@ -167,12 +167,19 @@ class Activitypub_notice
$act->time = time();
$act->actor = $actor_profile->asActivityObject();
$act->context = new ActivityContext();
$options = ['source' => 'ActivityPub',
[$note_type, $note_scope] = self::getNotePolicy($object, $actor_profile);
$options = [
'source' => 'ActivityPub',
'uri' => $id,
'url' => $url,
'is_local' => self::getNotePolicyType($object, $actor_profile)];
'is_local' => $note_type,
'scope' => $note_scope,
];
if ($directMessage) {
$options['is_local'] = Notice::GATEWAY;
$options['scope'] = Notice::MESSAGE_SCOPE;
}
@@ -265,7 +272,6 @@ class Activitypub_notice
}
}
$file->saveFile();
$act->enclosures[] = $file->getEnclosure();
$attachments[] = $file;
} catch (Exception $e) {
// Whatever.
@@ -277,7 +283,7 @@ class Activitypub_notice
$actobj = new ActivityObject();
$actobj->type = ActivityObject::NOTE;
$actobj->content = strip_tags($content, '<p><b><i><u><a><ul><ol><li>');
$actobj->content = strip_tags($content, '<p><b><i><u><a><ul><ol><li><br>');
// Finally add the activity object to our activity
$act->objects[] = $actobj;
@@ -365,20 +371,17 @@ class Activitypub_notice
*
* @param array $note received Note
* @param Profile $actor_profile Note author
* @return int Notice policy type
* @return [int NoteType, ?int NoteScope] Notice policy type
* @author Bruno Casteleiro <brunoccast@fc.up.pt>
*/
public static function getNotePolicyType(array $note, Profile $actor_profile): int
public static function getNotePolicy(array $note, Profile $actor_profile): array
{
$addressee = array_unique(array_merge($note['to'], $note['cc']));
if (in_array('https://www.w3.org/ns/activitystreams#Public', $addressee)) {
return $actor_profile->isLocal() ? Notice::LOCAL_PUBLIC : Notice::REMOTE;
} else {
// either an unlisted or followers-only note, we'll handle
// both as a GATEWAY notice since this type is not visible
// from the public timelines, hence partially enough while
// we don't have subscription_policy working.
return Notice::GATEWAY;
if (in_array('https://www.w3.org/ns/activitystreams#Public', $note['to'])) { // Public: Visible for all, shown in public feeds
return [$actor_profile->isLocal() ? Notice::LOCAL_PUBLIC : Notice::REMOTE, null];
} elseif (in_array('https://www.w3.org/ns/activitystreams#Public', $note['cc'])) { // Unlisted: Visible for all but not shown in public feeds
return [$actor_profile->isLocal() ? Notice::LOCAL_NONPUBLIC : Notice::GATEWAY, null];
} else { // Either Followers-only or Direct (but this function isn't used for direct)
return [$actor_profile->isLocal() ? Notice::LOCAL_NONPUBLIC : Notice::REMOTE, Notice::FOLLOWER_SCOPE];
}
}
}

View File

@@ -87,7 +87,7 @@ class Activitypub_postman
* @param string $method request method
* @return GNUsocial_HTTPResponse
* @throws HTTP_Request2_Exception
* @throws Exception
* @throws HTTP_Request2_LogicException
* @author Diogo Cordeiro <diogo@fc.up.pt>
*/
public function send($data, $inbox, $method = 'POST')
@@ -224,13 +224,16 @@ class Activitypub_postman
$data = json_encode($data, JSON_UNESCAPED_SLASHES);
foreach ($this->to_inbox() as $inbox) {
$res = $this->send($data, $inbox);
// accumulate errors for later use, if needed
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
try {
$res = $this->send($data, $inbox);
// accumulate errors for later use, if needed
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
$to_failed[$inbox] = $notice;
}
} catch (Exception $e){
$to_failed[$inbox] = $notice;
}
}
@@ -260,13 +263,17 @@ class Activitypub_postman
$data = json_encode($data, JSON_UNESCAPED_SLASHES);
foreach ($this->to_inbox() as $inbox) {
$res = $this->send($data, $inbox);
try {
$res = $this->send($data, $inbox);
// accummulate errors for later use, if needed
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
// accummulate errors for later use, if needed
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
$to_failed[$inbox] = $notice;
}
} catch (Exception $e) {
$to_failed[$inbox] = $notice;
}
}
@@ -296,13 +303,17 @@ class Activitypub_postman
$data = json_encode($data, JSON_UNESCAPED_SLASHES);
foreach ($this->to_inbox() as $inbox) {
$res = $this->send($data, $inbox);
try {
$res = $this->send($data, $inbox);
// accummulate errors for later use, if needed
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
// accummulate errors for later use, if needed
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
$to_failed[$inbox] = $notice;
}
} catch (Exception $e) {
$to_failed[$inbox] = $notice;
}
}
@@ -361,13 +372,17 @@ class Activitypub_postman
);
foreach ($this->to_inbox() as $inbox) {
$res = $this->send($data, $inbox);
try {
$res = $this->send($data, $inbox);
// accummulate errors for later use, if needed
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
// accummulate errors for later use, if needed
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
$to_failed[$inbox] = $notice;
}
} catch (Exception $e) {
$to_failed[$inbox] = $notice;
}
}
@@ -392,11 +407,15 @@ class Activitypub_postman
$errors = [];
$data = json_encode($data, JSON_UNESCAPED_SLASHES);
foreach ($this->to_inbox() as $inbox) {
$res = $this->send($data, $inbox);
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
try {
$res = $this->send($data, $inbox);
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
$to_failed[$inbox] = $notice;
}
} catch (Exception $e) {
$to_failed[$inbox] = $notice;
}
}
@@ -419,13 +438,17 @@ class Activitypub_postman
$errors = [];
foreach ($this->to_inbox() as $inbox) {
$res = $this->send($data, $inbox);
try {
$res = $this->send($data, $inbox);
// accumulate errors for later use, if needed
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
// accumulate errors for later use, if needed
if (!($res->getStatus() == 200 || $res->getStatus() == 202 || $res->getStatus() == 409)) {
$res_body = json_decode($res->getBody(), true);
$errors[] = isset($res_body['error']) ?
$res_body['error'] : "An unknown error occurred.";
}
} catch (Exception $e) {
$to_failed[$inbox] = $notice;
}
}

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,34 +18,63 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Exception.
#: classes/Activitypub_profile.php:393
#: classes/Activitypub_profile.php:391
msgid "Not a valid WebFinger address (via cache)."
msgstr ""
#. TRANS: Exception.
#: classes/Activitypub_profile.php:414
#: classes/Activitypub_profile.php:412
msgid "Not a valid WebFinger address."
msgstr ""
#. TRANS: Exception. %s is a WebFinger address.
#: classes/Activitypub_profile.php:454
#: classes/Activitypub_profile.php:452
#, php-format
msgid "Could not find a valid profile for \"%s\"."
msgstr ""
#. TRANS: Client error displayed when trying to mark a notice as favorite that already is a favorite.
#: lib/models/Activitypub_like.php:75
msgid "You have already favorited this!"
msgstr ""
#: lib/models/Activitypub_like.php:83
msgid "Favor"
msgstr ""
#: lib/models/Activitypub_like.php:87
#, php-format
msgid "%1$s favorited something by %2$s: %3$s"
msgstr ""
#. TRANS: Client exception thrown when trying a view a notice the user has no access to.
#: actions/apnotice.php:88
msgid "Access restricted."
msgstr ""
#. TRANS: Server error displayed trying to show a notice without a connected profile.
#: actions/apnotice.php:95
msgid "Notice has no profile."
msgstr ""
#. TRANS: Client error displayed trying to show a deleted notice.
#: actions/apnotice.php:176
msgid "Notice deleted."
msgstr ""
#. TRANS: Plugin description.
#: ActivityPubPlugin.php:241
#: ActivityPubPlugin.php:255
msgid ""
"Follow people across social networks that implement <a href=\"https://"
"activitypub.rocks/\">ActivityPub</a>."
msgstr ""
#: ActivityPubPlugin.php:415
#: ActivityPubPlugin.php:431
msgid "Remote Profile"
msgstr ""
#. TRANS: Title. %s is a domain name.
#: ActivityPubPlugin.php:920
#: ActivityPubPlugin.php:998
#, php-format
msgid "Sent from %s via ActivityPub"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -59,16 +59,16 @@ msgid "Add to favorites"
msgstr ""
#. TRANS: Label for tally for number of times a notice was favored.
#: AnonymousFavePlugin.php:165
#: AnonymousFavePlugin.php:157
msgid "Favored"
msgstr ""
#. TRANS: Server exception.
#: AnonymousFavePlugin.php:198 AnonymousFavePlugin.php:209
#: AnonymousFavePlugin.php:206 AnonymousFavePlugin.php:217
msgid "Could not create anonymous user session."
msgstr ""
#. TRANS: Plugin description.
#: AnonymousFavePlugin.php:284
#: AnonymousFavePlugin.php:291
msgid "Allow anonymous users to favorite notices."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,48 +17,6 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Field label in blacklist plugin administration panel.
#: forms/blacklistadminpanel.php:60
msgid "Nicknames"
msgstr ""
#. TRANS: Field title in blacklist plugin administration panel.
#: forms/blacklistadminpanel.php:63
msgid "Patterns of nicknames to block, one per line."
msgstr ""
#. TRANS: Field label in blacklist plugin administration panel.
#: forms/blacklistadminpanel.php:70
msgid "URLs"
msgstr ""
#. TRANS: Field title in blacklist plugin administration panel.
#: forms/blacklistadminpanel.php:73
msgid "Patterns of URLs to block, one per line."
msgstr ""
#. TRANS: Button text in blacklist plugin administration panel to save settings.
#: forms/blacklistadminpanel.php:88
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: Button title in blacklist plugin administration panel to save settings.
#: forms/blacklistadminpanel.php:92
msgid "Save site settings."
msgstr ""
#. TRANS: Title of blacklist plugin administration panel.
#: actions/blacklistadminpanel.php:51
msgctxt "TITLE"
msgid "Blacklist"
msgstr ""
#. TRANS: Instructions for blacklist plugin administration panel.
#: actions/blacklistadminpanel.php:62
msgid "Blacklisted URLs and nicknames"
msgstr ""
#. TRANS: Exception thrown if the Blacklist plugin configuration is incorrect.
#. TRANS: %1$s is a configuration section, %2$s is a configuration setting.
#: BlacklistPlugin.php:110
@@ -129,3 +87,45 @@ msgstr ""
#, php-format
msgid "Cannot subscribe to nickname \"%s\"."
msgstr ""
#. TRANS: Title of blacklist plugin administration panel.
#: actions/blacklistadminpanel.php:51
msgctxt "TITLE"
msgid "Blacklist"
msgstr ""
#. TRANS: Instructions for blacklist plugin administration panel.
#: actions/blacklistadminpanel.php:62
msgid "Blacklisted URLs and nicknames"
msgstr ""
#. TRANS: Field label in blacklist plugin administration panel.
#: forms/blacklistadminpanel.php:60
msgid "Nicknames"
msgstr ""
#. TRANS: Field title in blacklist plugin administration panel.
#: forms/blacklistadminpanel.php:63
msgid "Patterns of nicknames to block, one per line."
msgstr ""
#. TRANS: Field label in blacklist plugin administration panel.
#: forms/blacklistadminpanel.php:70
msgid "URLs"
msgstr ""
#. TRANS: Field title in blacklist plugin administration panel.
#: forms/blacklistadminpanel.php:73
msgid "Patterns of URLs to block, one per line."
msgstr ""
#. TRANS: Button text in blacklist plugin administration panel to save settings.
#: forms/blacklistadminpanel.php:88
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: Button title in blacklist plugin administration panel to save settings.
#: forms/blacklistadminpanel.php:92
msgid "Save site settings."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,36 +18,33 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Client exception thrown when a bookmark is formatted incorrectly.
#: classes/Bookmark.php:172
#: classes/Bookmark.php:170
msgid "Expected exactly 1 link rel=related in a Bookmark, got more than that."
msgstr ""
#. TRANS: Client exception thrown when a bookmark is formatted incorrectly.
#: classes/Bookmark.php:177
#: classes/Bookmark.php:175
msgid "Expected exactly 1 link rel=related in a Bookmark, got 0."
msgstr ""
#: classes/Bookmark.php:181
#: classes/Bookmark.php:179
msgid "You must provide a non-empty title."
msgstr ""
#: classes/Bookmark.php:184
#: classes/Bookmark.php:182
msgid "Only web bookmarks can be posted (HTTP or HTTPS)."
msgstr ""
#: classes/Bookmark.php:189
#: classes/Bookmark.php:187
msgid "You have already bookmarked this URL."
msgstr ""
#. TRANS: Server exception thrown when a bookmark has multiple attachments.
#: classes/Bookmark.php:230
#: classes/Bookmark.php:228
msgid "Bookmark notice with the wrong number of attachments."
msgstr ""
#. TRANS: Rendered bookmark content.
#. TRANS: %1$s is a URL, %2$s the bookmark title, %3$s is the bookmark description,
#. TRANS: %4$s is space separated list of hash tags.
#: classes/Bookmark.php:339
#: classes/Bookmark.php:344
#, php-format
msgid ""
"<span class=\"xfolkentry\"><a class=\"taggedlink\" href=\"%1$s\">%2$s</a> "
@@ -55,47 +52,6 @@ msgid ""
"span>"
msgstr ""
#. TRANS: Field label on form for adding a new bookmark.
#: forms/initialbookmark.php:78 forms/bookmark.php:121
msgctxt "LABEL"
msgid "URL"
msgstr ""
#. TRANS: Button text for action to save a new bookmark.
#: forms/initialbookmark.php:92
msgctxt "BUTTON"
msgid "Add"
msgstr ""
#. TRANS: Field label on form for adding a new bookmark.
#: forms/bookmark.php:143
msgctxt "LABEL"
msgid "Title"
msgstr ""
#. TRANS: Field label on form for adding a new bookmark.
#: forms/bookmark.php:153
msgctxt "LABEL"
msgid "Notes"
msgstr ""
#. TRANS: Field label on form for adding a new bookmark.
#: forms/bookmark.php:162
msgctxt "LABEL"
msgid "Tags"
msgstr ""
#. TRANS: Field title on form for adding a new bookmark.
#: forms/bookmark.php:165
msgid "Comma- or space-separated list of tags."
msgstr ""
#. TRANS: Button text for action to save a new bookmark.
#: forms/bookmark.php:188
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: Client exception thrown when a bookmark in an import file is incorrectly formatted.
#: lib/deliciousbackupimporter.php:181
msgid "No <A> tag in a <DT>."
@@ -106,39 +62,6 @@ msgstr ""
msgid "Skipping private bookmark."
msgstr ""
#. TRANS: Exception thrown when a file upload cannot be found.
#. TRANS: %s is the file that could not be found.
#. TRANS: Server exception thrown when a file upload cannot be found.
#. TRANS: %s is the file that could not be found.
#: scripts/importbookmarks.php:64 actions/importdelicious.php:170
#, php-format
msgid "No such file \"%s\"."
msgstr ""
#. TRANS: Exception thrown when a file upload is incorrect.
#. TRANS: %s is the irregular file.
#. TRANS: Server exception thrown when a file upload is incorrect.
#. TRANS: %s is the irregular file.
#: scripts/importbookmarks.php:70 actions/importdelicious.php:176
#, php-format
msgid "Not a regular file: \"%s\"."
msgstr ""
#. TRANS: Exception thrown when a file upload is not readable.
#. TRANS: %s is the file that could not be read.
#. TRANS: Server exception thrown when a file upload is not readable.
#. TRANS: %s is the file that could not be read.
#: scripts/importbookmarks.php:76 actions/importdelicious.php:182
#, php-format
msgid "File \"%s\" not readable."
msgstr ""
#. TRANS: %s is the filename that contains a backup for a user.
#: scripts/importbookmarks.php:80
#, php-format
msgid "Getting backup from file \"%s\"."
msgstr ""
#. TRANS: Client exception thrown when referring to a non-existing bookmark.
#: actions/showbookmark.php:59 actions/showbookmark.php:67
msgid "No such bookmark."
@@ -151,6 +74,24 @@ msgstr ""
msgid "%1$s's bookmark for \"%2$s\""
msgstr ""
#. TRANS: Title for mini-posting window loaded from bookmarklet.
#. TRANS: %s is the StatusNet site name.
#: actions/bookmarkpopup.php:57
#, php-format
msgid "Bookmark on %s"
msgstr ""
#. TRANS: Page title for sample plugin.
#: actions/bookmarks.php:128
msgid "Log in"
msgstr ""
#. TRANS: Page title for sample plugin. %s is a user nickname.
#: actions/bookmarks.php:131
#, php-format
msgid "%s's bookmarks"
msgstr ""
#. TRANS: Client exception thrown when an unknown URL is provided.
#: actions/noticebyurl.php:70
msgid "Unknown URL."
@@ -170,39 +111,6 @@ msgstr ""
msgid "Notices linking to %1$s, page %2$d"
msgstr ""
#. TRANS: Title for action to create a new bookmark.
#: actions/newbookmark.php:57
msgid "New bookmark"
msgstr ""
#. TRANS: Client exception thrown when trying to create a new bookmark without a title.
#: actions/newbookmark.php:79
msgid "Bookmark must have a title."
msgstr ""
#. TRANS: Client exception thrown when trying to create a new bookmark without a URL.
#: actions/newbookmark.php:84
msgid "Bookmark must have an URL."
msgstr ""
#. TRANS: Page title for sample plugin.
#: actions/bookmarks.php:128
msgid "Log in"
msgstr ""
#. TRANS: Page title for sample plugin. %s is a user nickname.
#: actions/bookmarks.php:131
#, php-format
msgid "%s's bookmarks"
msgstr ""
#. TRANS: Title for mini-posting window loaded from bookmarklet.
#. TRANS: %s is the StatusNet site name.
#: actions/bookmarkpopup.php:57
#, php-format
msgid "Bookmark on %s"
msgstr ""
#. TRANS: Title for page to import del.icio.us bookmark backups on.
#. TRANS: Link text in proile leading to import form.
#: actions/importdelicious.php:60 BookmarkPlugin.php:232
@@ -262,6 +170,33 @@ msgstr ""
msgid "System error uploading file."
msgstr ""
#. TRANS: Server exception thrown when a file upload cannot be found.
#. TRANS: %s is the file that could not be found.
#. TRANS: Exception thrown when a file upload cannot be found.
#. TRANS: %s is the file that could not be found.
#: actions/importdelicious.php:170 scripts/importbookmarks.php:64
#, php-format
msgid "No such file \"%s\"."
msgstr ""
#. TRANS: Server exception thrown when a file upload is incorrect.
#. TRANS: %s is the irregular file.
#. TRANS: Exception thrown when a file upload is incorrect.
#. TRANS: %s is the irregular file.
#: actions/importdelicious.php:176 scripts/importbookmarks.php:70
#, php-format
msgid "Not a regular file: \"%s\"."
msgstr ""
#. TRANS: Server exception thrown when a file upload is not readable.
#. TRANS: %s is the file that could not be read.
#. TRANS: Exception thrown when a file upload is not readable.
#. TRANS: %s is the file that could not be read.
#: actions/importdelicious.php:182 scripts/importbookmarks.php:76
#, php-format
msgid "File \"%s\" not readable."
msgstr ""
#. TRANS: Success message after importing bookmarks.
#: actions/importdelicious.php:221
msgid ""
@@ -290,6 +225,21 @@ msgstr ""
msgid "Upload the file."
msgstr ""
#. TRANS: Title for action to create a new bookmark.
#: actions/newbookmark.php:57
msgid "New bookmark"
msgstr ""
#. TRANS: Client exception thrown when trying to create a new bookmark without a title.
#: actions/newbookmark.php:79
msgid "Bookmark must have a title."
msgstr ""
#. TRANS: Client exception thrown when trying to create a new bookmark without a URL.
#: actions/newbookmark.php:84
msgid "Bookmark must have an URL."
msgstr ""
#. TRANS: Plugin description.
#: BookmarkPlugin.php:189
msgid "Plugin for posting bookmarks. "
@@ -310,3 +260,50 @@ msgstr ""
msgctxt "TITLE"
msgid "Bookmark"
msgstr ""
#. TRANS: %s is the filename that contains a backup for a user.
#: scripts/importbookmarks.php:80
#, php-format
msgid "Getting backup from file \"%s\"."
msgstr ""
#. TRANS: Field label on form for adding a new bookmark.
#: forms/initialbookmark.php:78 forms/bookmark.php:118
msgctxt "LABEL"
msgid "URL"
msgstr ""
#. TRANS: Button text for action to save a new bookmark.
#: forms/initialbookmark.php:92
msgctxt "BUTTON"
msgid "Add"
msgstr ""
#. TRANS: Field label on form for adding a new bookmark.
#: forms/bookmark.php:144
msgctxt "LABEL"
msgid "Title"
msgstr ""
#. TRANS: Field label on form for adding a new bookmark.
#: forms/bookmark.php:156
msgctxt "LABEL"
msgid "Notes"
msgstr ""
#. TRANS: Field label on form for adding a new bookmark.
#: forms/bookmark.php:167
msgctxt "LABEL"
msgid "Tags"
msgstr ""
#. TRANS: Field title on form for adding a new bookmark.
#: forms/bookmark.php:170
msgid "Comma- or space-separated list of tags."
msgstr ""
#. TRANS: Button text for action to save a new bookmark.
#: forms/bookmark.php:196
msgctxt "BUTTON"
msgid "Save"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,22 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Client error displayed when trying to log in while already logged on.
#: actions/caslogin.php:29
msgid "Already logged in."
msgstr ""
#. TRANS: Server error displayed when trying to log in with incorrect username or password.
#. TRANS: Server error displayed when trying to log in with non-whitelisted user name (when whitelists are enabled.)
#: actions/caslogin.php:41 actions/caslogin.php:46
msgid "Incorrect username or password."
msgstr ""
#. TRANS: Server error displayed when login fails in CAS authentication plugin.
#: actions/caslogin.php:52
msgid "Error setting user. You are probably not authorized."
msgstr ""
#. TRANS: Menu item. CAS is Central Authentication Service.
#: CasAuthenticationPlugin.php:65
msgid "CAS"
@@ -56,19 +72,3 @@ msgid ""
"The CAS Authentication plugin allows for StatusNet to handle authentication "
"through CAS (Central Authentication Service)."
msgstr ""
#. TRANS: Client error displayed when trying to log in while already logged on.
#: actions/caslogin.php:29
msgid "Already logged in."
msgstr ""
#. TRANS: Server error displayed when trying to log in with incorrect username or password.
#. TRANS: Server error displayed when trying to log in with non-whitelisted user name (when whitelists are enabled.)
#: actions/caslogin.php:41 actions/caslogin.php:46
msgid "Incorrect username or password."
msgstr ""
#. TRANS: Server error displayed when login fails in CAS authentication plugin.
#: actions/caslogin.php:52
msgid "Error setting user. You are probably not authorized."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,22 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Module description.
#: ChooseThemePlugin.php:44
msgid "Allowing user to select the preferred theme."
msgstr ""
#. TRANS: Poll plugin menu item on user settings page.
#: ChooseThemePlugin.php:63
msgctxt "MENU"
msgid "Theme"
msgstr ""
#. TRANS: Poll plugin tooltip for user settings menu item.
#: ChooseThemePlugin.php:65
msgid "Choose Theme"
msgstr ""
#. TRANS: Page title.
#: actions/choosethemesettings.php:37
msgid "Choose theme settings"
@@ -34,19 +50,3 @@ msgstr ""
#: actions/choosethemesettings.php:138
msgid "Select a theme"
msgstr ""
#. TRANS: Module description.
#: ChooseThemePlugin.php:44
msgid "Allowing user to select the preferred theme."
msgstr ""
#. TRANS: Poll plugin menu item on user settings page.
#: ChooseThemePlugin.php:63
msgctxt "MENU"
msgid "Theme"
msgstr ""
#. TRANS: Poll plugin tooltip for user settings menu item.
#: ChooseThemePlugin.php:65
msgid "Choose Theme"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -240,7 +240,7 @@ class DirectMessagePlugin extends Plugin
'name' => 'Direct Message',
'version' => self::PLUGIN_VERSION,
'author' => 'Mikael Nordfeldth, Bruno Casteleiro',
'homepage' => 'https://gnu.social/',
'homepage' => 'https://gnusocial.rocks/',
'rawdescription' =>
// TRANS: Plugin description.
_m('Direct Message to other local users.')

View File

@@ -36,14 +36,14 @@ class MessageCommand extends Command
$this->text = $this->user->shortenLinks($this->text);
if (Message::contentTooLong($this->text)) {
if (MessageModel::contentTooLong($this->text)) {
// XXX: i18n. Needs plural support.
// TRANS: Message given if content is too long. %1$sd is used for plural.
// TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
$channel->error($this->user, sprintf(_m('Message too long - maximum is %1$d character, you sent %2$d.',
'Message too long - maximum is %1$d characters, you sent %2$d.',
Message::maxContent()),
Message::maxContent(), mb_strlen($this->text)));
MessageModel::maxContent()),
MessageModel::maxContent(), mb_strlen($this->text)));
return;
}
@@ -61,7 +61,7 @@ class MessageCommand extends Command
return;
}
try {
$message = Message::saveNew($this->user->id, $other->id, $this->text, $channel->source());
$message = MessageModel::saveNew(Profile::getByID($this->user->id), $this->text, $channel->source());
$message->notify();
// TRANS: Message given have sent a direct message to another user.
// TRANS: %s is the name of the other user.

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -95,33 +95,6 @@ msgid_plural "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr[0] ""
msgstr[1] ""
#. TRANS: Form validation error displayed when message content is too long.
#. TRANS: %d is the maximum number of characters for a message.
#: actions/newmessage.php:99 actions/apidirectmessagenew.php:99
#, php-format
msgid "That's too long. Maximum message size is %d character."
msgid_plural "That's too long. Maximum message size is %d characters."
msgstr[0] ""
msgstr[1] ""
#. TRANS: Title for outbox for any but the fist page.
#. TRANS: %1$s is the user nickname, %2$d is the page number.
#: actions/outbox.php:50
#, php-format
msgid "Outbox for %1$s - page %2$d"
msgstr ""
#. TRANS: Title for first page of outbox.
#: actions/outbox.php:54
#, php-format
msgid "Outbox for %s"
msgstr ""
#. TRANS: Instructions for outbox.
#: actions/outbox.php:84
msgid "This is your outbox, which lists private messages you have sent."
msgstr ""
#. TRANS: Client error displayed requesting a single message that does not exist.
#: actions/showmessage.php:63
msgid "No such message."
@@ -170,6 +143,33 @@ msgstr ""
msgid "This is your inbox, which lists your incoming private messages."
msgstr ""
#. TRANS: Title for outbox for any but the fist page.
#. TRANS: %1$s is the user nickname, %2$d is the page number.
#: actions/outbox.php:50
#, php-format
msgid "Outbox for %1$s - page %2$d"
msgstr ""
#. TRANS: Title for first page of outbox.
#: actions/outbox.php:54
#, php-format
msgid "Outbox for %s"
msgstr ""
#. TRANS: Instructions for outbox.
#: actions/outbox.php:84
msgid "This is your outbox, which lists private messages you have sent."
msgstr ""
#. TRANS: Form validation error displayed when message content is too long.
#. TRANS: %d is the maximum number of characters for a message.
#: actions/apidirectmessagenew.php:99 actions/newmessage.php:99
#, php-format
msgid "That's too long. Maximum message size is %d character."
msgid_plural "That's too long. Maximum message size is %d characters."
msgstr[0] ""
msgstr[1] ""
#. TRANS: Menu item in personal group navigation menu.
#: DirectMessagePlugin.php:149
msgctxt "MENU"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,21 +17,32 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Menu item text for user directory.
#: DirectoryPlugin.php:223
msgctxt "MENU"
msgid "People"
msgstr ""
#. TRANS: Menu item title for user directory.
#: DirectoryPlugin.php:225
msgid "People."
msgstr ""
#. TRANS: Plugin description.
#: DirectoryPlugin.php:244
msgid "Add a user directory."
msgstr ""
#. TRANS: Column header in table for user nickname.
#: lib/sortablegrouplist.php:51 lib/sortablesubscriptionlist.php:51
#: lib/sortablesubscriptionlist.php:51 lib/sortablegrouplist.php:51
msgid "Nickname"
msgstr ""
#. TRANS: Column header in table for timestamp when user was created.
#: lib/sortablegrouplist.php:53 lib/sortablesubscriptionlist.php:53
#: lib/sortablesubscriptionlist.php:53 lib/sortablegrouplist.php:53
msgid "Created"
msgstr ""
#. TRANS: Column header in table for members of a group.
#: lib/sortablegrouplist.php:99
msgid "Members"
msgstr ""
#. TRANS: Column header for number of subscriptions.
#: lib/sortablesubscriptionlist.php:100
msgid "Subscriptions"
@@ -42,85 +53,9 @@ msgstr ""
msgid "Notices"
msgstr ""
#. TRANS: Title for group directory page. %d is a page number.
#: actions/groupdirectory.php:95
#, php-format
msgid "Group Directory, page %d"
msgstr ""
#. TRANS: Title for group directory page.
#: actions/groupdirectory.php:98
msgid "Group directory"
msgstr ""
#. TRANS: Title for group directory page when it is filtered.
#. TRANS: %s is the filter string.
#: actions/groupdirectory.php:103
#, php-format
msgid "Group directory - %s"
msgstr ""
#. TRANS: Title for group directory page when it is filtered.
#. TRANS: %1$s is the filter string, %2$d is a page number.
#: actions/groupdirectory.php:110
#, php-format
msgid "Group directory - %1$s, page %2$d"
msgstr ""
#. TRANS: Page instructions.
#: actions/groupdirectory.php:125
msgid ""
"After you join a group you can send messages to all other members\n"
"using the syntax \"!groupname\".\n"
"\n"
"Browse groups, or search for groups by their name, location or topic.\n"
"Separate the terms by spaces; they must be three characters or more."
msgstr ""
#. TRANS: Link to create a new group on the group list page.
#: actions/groupdirectory.php:184
msgid "Create a new group"
msgstr ""
#. TRANS: Fieldset legend.
#: actions/groupdirectory.php:244
msgid "Search groups"
msgstr ""
#. TRANS: Field label for input of one or more keywords.
#. TRANS: Field label for user directory filter.
#: actions/groupdirectory.php:249 actions/userdirectory.php:241
msgid "Keyword(s)"
msgstr ""
#. TRANS: Button text for searching group directory.
#. TRANS: Button text.
#: actions/groupdirectory.php:252 actions/userdirectory.php:244
msgctxt "BUTTON"
msgid "Search"
msgstr ""
#. TRANS: Empty list message for searching group directory.
#. TRANS: %s is the search string.
#: actions/groupdirectory.php:355
#, php-format
msgid "No groups starting with %s."
msgstr ""
#. TRANS: Empty list message for searching group directory.
#. TRANS: Empty list message for user directory.
#: actions/groupdirectory.php:359 actions/userdirectory.php:353
msgid "No results."
msgstr ""
#. TRANS: Help text for searching group directory.
#. TRANS: Standard search suggestions shown when a search does not give any results.
#: actions/groupdirectory.php:361 actions/userdirectory.php:355
msgid ""
"* Make sure all words are spelled correctly.\n"
"* Try different keywords.\n"
"* Try more general keywords.\n"
"* Try fewer keywords."
#. TRANS: Column header in table for members of a group.
#: lib/sortablegrouplist.php:99
msgid "Members"
msgstr ""
#. TRANS: Page title for user directory. %d is a page number.
@@ -160,24 +95,89 @@ msgstr ""
msgid "Search site"
msgstr ""
#. TRANS: Field label for user directory filter.
#. TRANS: Field label for input of one or more keywords.
#: actions/userdirectory.php:241 actions/groupdirectory.php:247
msgid "Keyword(s)"
msgstr ""
#. TRANS: Button text.
#. TRANS: Button text for searching group directory.
#: actions/userdirectory.php:244 actions/groupdirectory.php:250
msgctxt "BUTTON"
msgid "Search"
msgstr ""
#. TRANS: Empty list message for user directory.
#: actions/userdirectory.php:349
#, php-format
msgid "No users starting with %s"
msgstr ""
#. TRANS: Menu item text for user directory.
#: DirectoryPlugin.php:223
msgctxt "MENU"
msgid "People"
#. TRANS: Empty list message for user directory.
#. TRANS: Empty list message for searching group directory.
#: actions/userdirectory.php:353 actions/groupdirectory.php:365
msgid "No results."
msgstr ""
#. TRANS: Menu item title for user directory.
#: DirectoryPlugin.php:225
msgid "People."
#. TRANS: Standard search suggestions shown when a search does not give any results.
#. TRANS: Help text for searching group directory.
#: actions/userdirectory.php:355 actions/groupdirectory.php:367
msgid ""
"* Make sure all words are spelled correctly.\n"
"* Try different keywords.\n"
"* Try more general keywords.\n"
"* Try fewer keywords."
msgstr ""
#. TRANS: Plugin description.
#: DirectoryPlugin.php:244
msgid "Add a user directory."
#. TRANS: Title for group directory page. %d is a page number.
#: actions/groupdirectory.php:89
#, php-format
msgid "Group Directory, page %d"
msgstr ""
#. TRANS: Title for group directory page.
#: actions/groupdirectory.php:92
msgid "Group directory"
msgstr ""
#. TRANS: Title for group directory page when it is filtered.
#. TRANS: %s is the filter string.
#: actions/groupdirectory.php:97
#, php-format
msgid "Group directory - %s"
msgstr ""
#. TRANS: Title for group directory page when it is filtered.
#. TRANS: %1$s is the filter string, %2$d is a page number.
#: actions/groupdirectory.php:104
#, php-format
msgid "Group directory - %1$s, page %2$d"
msgstr ""
#. TRANS: Page instructions.
#: actions/groupdirectory.php:119
msgid ""
"After you join a group you can send messages to all other members\n"
"using the syntax \"!groupname\".\n"
"\n"
"Browse groups, or search for groups by their name, location or topic.\n"
"Separate the terms by spaces; they must be three characters or more."
msgstr ""
#. TRANS: Link to create a new group on the group list page.
#: actions/groupdirectory.php:180
msgid "Create a new group"
msgstr ""
#. TRANS: Fieldset legend.
#: actions/groupdirectory.php:242
msgid "Search groups"
msgstr ""
#. TRANS: Empty list message for searching group directory.
#. TRANS: %s is the search string.
#: actions/groupdirectory.php:360
#, php-format
msgid "No groups starting with %s."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,6 +18,6 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Plugin description.
#: DiskCachePlugin.php:169
#: DiskCachePlugin.php:170
msgid "Plugin to implement cache interface with disk files."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,42 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: DomainWhitelistPlugin.php:86
#, php-format
msgid "Email address must be in this domain: %s."
msgstr ""
#: DomainWhitelistPlugin.php:93
#, php-format
msgid "Email address must be in one of these domains: %s."
msgstr ""
#. TRANS: Separator for whitelisted domains.
#: DomainWhitelistPlugin.php:95
msgctxt "SEPARATOR"
msgid ", "
msgstr ""
#. TRANS: Exception thrown when an e-mail address does not match the site's domain whitelist.
#: DomainWhitelistPlugin.php:108
msgid "That email address is not allowed on this site."
msgstr ""
#. TRANS: Title for invitiation deletion dialog.
#: DomainWhitelistPlugin.php:237
msgid "Confirmation Required"
msgstr ""
#. TRANS: Confirmation text for invitation deletion dialog.
#: DomainWhitelistPlugin.php:240
msgid "Really delete this invitation?"
msgstr ""
#. TRANS: Plugin description.
#: DomainWhitelistPlugin.php:277
msgid "Restrict domains for email users."
msgstr ""
#. TRANS: Form legend.
#: forms/whitelistinvite.php:89
msgid "Invite collegues"
@@ -47,43 +83,3 @@ msgstr ""
#: forms/whitelistinvite.php:175
msgid "Send invitations."
msgstr ""
#. TRANS: Client exception thrown when a given e-mailaddress is not in the domain whitelist.
#. TRANS: %s is a whitelisted e-mail domain.
#: DomainWhitelistPlugin.php:92
#, php-format
msgid "Email address must be in this domain: %s."
msgstr ""
#. TRANS: Client exception thrown when a given e-mailaddress is not in the domain whitelist.
#. TRANS: %s are whitelisted e-mail domains separated by comma's (localisable).
#: DomainWhitelistPlugin.php:97
#, php-format
msgid "Email address must be in one of these domains: %s."
msgstr ""
#. TRANS: Separator for whitelisted domains.
#: DomainWhitelistPlugin.php:99
msgctxt "SEPARATOR"
msgid ", "
msgstr ""
#. TRANS: Exception thrown when an e-mail address does not match the site's domain whitelist.
#: DomainWhitelistPlugin.php:111
msgid "That email address is not allowed on this site."
msgstr ""
#. TRANS: Title for invitiation deletion dialog.
#: DomainWhitelistPlugin.php:240
msgid "Confirmation Required"
msgstr ""
#. TRANS: Confirmation text for invitation deletion dialog.
#: DomainWhitelistPlugin.php:243
msgid "Really delete this invitation?"
msgstr ""
#. TRANS: Plugin description.
#: DomainWhitelistPlugin.php:280
msgid "Restrict domains for email users."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Plugin description.
#: EmailAuthenticationPlugin.php:62
#: EmailAuthenticationPlugin.php:68
msgid ""
"The Email Authentication plugin allows users to login using their email "
"address."

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,94 +17,6 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Form instructions.
#: forms/emailregistration.php:61
msgid "Enter your email address to register for an account."
msgstr ""
#. TRANS: Field label on form for registering an account.
#: forms/emailregistration.php:69
msgctxt "LABEL"
msgid "E-mail address"
msgstr ""
#. TRANS: Button text for registering an account.
#. TRANS: Button text for action to register.
#: forms/emailregistration.php:93 forms/confirmregistration.php:164
msgctxt "BUTTON"
msgid "Register"
msgstr ""
#. TRANS: Form instructions.
#: forms/confirmregistration.php:67
msgid "Enter a password to confirm your new account."
msgstr ""
#. TRANS: Field label in e-mail registration form.
#: forms/confirmregistration.php:80
msgctxt "LABEL"
msgid "User name"
msgstr ""
#. TRANS: Field label.
#: forms/confirmregistration.php:92
msgid "Email address"
msgstr ""
#. TRANS: Field label on account registration page.
#: forms/confirmregistration.php:104
msgid "Password"
msgstr ""
#. TRANS: Field title on account registration page.
#: forms/confirmregistration.php:106
msgid "6 or more characters."
msgstr ""
#. TRANS: Field label on account registration page. In this field the password has to be entered a second time.
#: forms/confirmregistration.php:111
msgctxt "PASSWORD"
msgid "Confirm"
msgstr ""
#. TRANS: Field title on account registration page.
#: forms/confirmregistration.php:113
msgid "Same as password above."
msgstr ""
#: forms/confirmregistration.php:134
#, php-format
msgid ""
"I agree to the <a href=\"%1$s\">Terms of service</a> and <a href=\"%1$s"
"\">Privacy policy</a> of this site."
msgstr ""
#. TRANS: Error text when trying to register with an already registered e-mail address.
#. TRANS: %s is the URL to recover password at.
#: EmailRegistrationPlugin.php:94
#, php-format
msgid ""
"A user with that email address already exists. You can use the <a href=\"%s"
"\">password recovery</a> tool to recover a missing password."
msgstr ""
#. TRANS: Error text when trying to register with an invalid e-mail address.
#: EmailRegistrationPlugin.php:108
msgid "Not a valid email address."
msgstr ""
#. TRANS: Subject for confirmation e-mail.
#. TRANS: %s is the StatusNet sitename.
#: EmailRegistrationPlugin.php:152
#, php-format
msgid "Welcome to %s"
msgstr ""
#. TRANS: Plugin description.
#: EmailRegistrationPlugin.php:185
msgid "Use email only for registration."
msgstr ""
#. TRANS: Client exception trown when registration by e-mail is not allowed.
#: actions/emailregister.php:84
msgid "Registration not allowed."
@@ -200,3 +112,91 @@ msgid ""
"%2$s\n"
"If it was not you, you can safely ignore this message."
msgstr ""
#. TRANS: Form instructions.
#: forms/emailregistration.php:61
msgid "Enter your email address to register for an account."
msgstr ""
#. TRANS: Field label on form for registering an account.
#: forms/emailregistration.php:69
msgctxt "LABEL"
msgid "E-mail address"
msgstr ""
#. TRANS: Button text for registering an account.
#. TRANS: Button text for action to register.
#: forms/emailregistration.php:93 forms/confirmregistration.php:164
msgctxt "BUTTON"
msgid "Register"
msgstr ""
#. TRANS: Form instructions.
#: forms/confirmregistration.php:67
msgid "Enter a password to confirm your new account."
msgstr ""
#. TRANS: Field label in e-mail registration form.
#: forms/confirmregistration.php:80
msgctxt "LABEL"
msgid "User name"
msgstr ""
#. TRANS: Field label.
#: forms/confirmregistration.php:92
msgid "Email address"
msgstr ""
#. TRANS: Field label on account registration page.
#: forms/confirmregistration.php:104
msgid "Password"
msgstr ""
#. TRANS: Field title on account registration page.
#: forms/confirmregistration.php:106
msgid "6 or more characters."
msgstr ""
#. TRANS: Field label on account registration page. In this field the password has to be entered a second time.
#: forms/confirmregistration.php:111
msgctxt "PASSWORD"
msgid "Confirm"
msgstr ""
#. TRANS: Field title on account registration page.
#: forms/confirmregistration.php:113
msgid "Same as password above."
msgstr ""
#: forms/confirmregistration.php:134
#, php-format
msgid ""
"I agree to the <a href=\"%1$s\">Terms of service</a> and <a href=\"%1$s"
"\">Privacy policy</a> of this site."
msgstr ""
#. TRANS: Error text when trying to register with an already registered e-mail address.
#. TRANS: %s is the URL to recover password at.
#: EmailRegistrationPlugin.php:94
#, php-format
msgid ""
"A user with that email address already exists. You can use the <a href=\"%s"
"\">password recovery</a> tool to recover a missing password."
msgstr ""
#. TRANS: Error text when trying to register with an invalid e-mail address.
#: EmailRegistrationPlugin.php:108
msgid "Not a valid email address."
msgstr ""
#. TRANS: Subject for confirmation e-mail.
#. TRANS: %s is the StatusNet sitename.
#: EmailRegistrationPlugin.php:152
#, php-format
msgid "Welcome to %s"
msgstr ""
#. TRANS: Plugin description.
#: EmailRegistrationPlugin.php:185
msgid "Use email only for registration."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -50,11 +50,11 @@ msgstr ""
msgid "Final reminder - you have been invited to join %s!"
msgstr ""
#: scripts/sendemailreminder.php:68
msgid "Unknown reminder type: "
msgstr ""
#. TRANS: Plugin description.
#: EmailReminderPlugin.php:192
msgid "Send email reminders for various things."
msgstr ""
#: scripts/sendemailreminder.php:68
msgid "Unknown reminder type: "
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -23,7 +23,11 @@ msgstr ""
msgid "Could not GET URL %s."
msgstr ""
#: EmbedPlugin.php:557
msgid "Untitled attachment"
msgstr ""
#. TRANS: Plugin description.
#: EmbedPlugin.php:687
#: EmbedPlugin.php:722
msgid "Plugin for using and representing oEmbed, OpenGraph and other data."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -118,6 +118,214 @@ msgstr ""
msgid "No end date for event."
msgstr ""
#. TRANS: 0 minutes abbreviated. Used in a list.
#: lib/eventtimelist.php:85
msgid "(0 min)"
msgstr ""
#. TRANS: 30 minutes abbreviated. Used in a list.
#: lib/eventtimelist.php:89
msgid "(30 min)"
msgstr ""
#. TRANS: 1 hour. Used in a list.
#: lib/eventtimelist.php:93
msgid "(1 hour)"
msgstr ""
#: lib/eventtimelist.php:98
#, php-format
msgid "(%.1f hours)"
msgstr ""
#: lib/eventtimelist.php:99
#, php-format
msgid "(%d hours)"
msgstr ""
#. TRANS: Plugin description.
#: EventPlugin.php:110
msgid "Event invitations and RSVPs."
msgstr ""
#. TRANS: Title for event application.
#: EventPlugin.php:116
msgctxt "TITLE"
msgid "Event"
msgstr ""
#. TRANS: Exception thrown when event plugin comes across a unknown object type.
#: EventPlugin.php:213
msgid "Unknown object type."
msgstr ""
#. TRANS: Field label for event description.
#: EventPlugin.php:340
msgid "Time:"
msgstr ""
#. TRANS: Field label for event description.
#: EventPlugin.php:357
msgid "Location:"
msgstr ""
#. TRANS: Field label for event description.
#: EventPlugin.php:365
msgid "Description:"
msgstr ""
#. TRANS: Field label for event description.
#: EventPlugin.php:375
msgid "Attending:"
msgstr ""
#. TRANS: Content for a deleted RSVP list item (RSVP stands for "please respond").
#: EventPlugin.php:418
msgid "Deleted."
msgstr ""
#. TRANS: Menu item in sample plugin.
#: EventPlugin.php:431
msgid "Happenings"
msgstr ""
#. TRANS: Menu item title in sample plugin.
#: EventPlugin.php:433
msgid "A list of your events"
msgstr ""
#. TRANS: Title for new event form.
#: actions/newevent.php:55
msgctxt "TITLE"
msgid "New event"
msgstr ""
#. TRANS: Client exception thrown when trying to post an event without providing a title.
#: actions/newevent.php:64
msgid "Event must have a title."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event without providing a start date.
#: actions/newevent.php:75
msgid "Start date required."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event without providing a start time.
#: actions/newevent.php:80
msgid "Event must have a start time."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event with a date that cannot be processed.
#. TRANS: %s is the data that could not be processed.
#: actions/newevent.php:87 actions/newevent.php:105
#, php-format
msgid "Could not parse date %s."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event without providing an end date.
#: actions/newevent.php:93
msgid "End date required."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event without providing an end time.
#: actions/newevent.php:98
msgid "Event must have an end time."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event with an invalid (non-empty) URL.
#: actions/newevent.php:111
msgid "An event URL must be a valid HTTP/HTTPS link."
msgstr ""
#: actions/newevent.php:164
msgid "Saved the event."
msgstr ""
#. TRANS: Client exception thrown when referring to a non-existing RSVP.
#. TRANS: RSVP stands for "Please reply".
#: actions/showrsvp.php:61 actions/showrsvp.php:77
msgid "No such RSVP."
msgstr ""
#. TRANS: Client exception thrown when referring to a non-existing event.
#: actions/showrsvp.php:68
msgid "No such event."
msgstr ""
#. TRANS: Title for event.
#. TRANS: %1$s is a user nickname, %2$s is an event title.
#: actions/showrsvp.php:94
#, php-format
msgid "%1$s's RSVP for \"%2$s\""
msgstr ""
#. TRANS: Title for RSVP ("please respond") action.
#: actions/rsvp.php:52
msgctxt "TITLE"
msgid "New RSVP"
msgstr ""
#: actions/rsvp.php:81
msgid "Cancelled RSVP"
msgstr ""
#: actions/rsvp.php:91
msgid "RSVP"
msgstr ""
#: actions/rsvp.php:102
msgid "Saved RSVP"
msgstr ""
#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
#: actions/timelist.php:65
msgid "Not logged in."
msgstr ""
#. TRANS: Client error when submitting a form with unexpected information.
#: actions/timelist.php:72
msgid "Unexpected form submission."
msgstr ""
#. TRANS: Client error displayed when using an action in a non-AJAX way.
#: actions/timelist.php:80
msgid "This action is AJAX only."
msgstr ""
#. TRANS: Page title for sample plugin. %s is a user nickname.
#: actions/events.php:20
#, php-format
msgid "%s's happenings"
msgstr ""
#. TRANS: Field label on form to RSVP ("please respond") for an event.
#: forms/rsvp.php:98
msgid "RSVP:"
msgstr ""
#: forms/rsvp.php:116
msgctxt "BUTTON"
msgid "Cancel"
msgstr ""
#. TRANS: Button text for RSVP ("please respond") reply to confirm attendence.
#: forms/rsvp.php:119
msgctxt "BUTTON"
msgid "Yes"
msgstr ""
#. TRANS: Button text for RSVP ("please respond") reply to deny attendence.
#: forms/rsvp.php:121
msgctxt "BUTTON"
msgid "No"
msgstr ""
#. TRANS: Button text for RSVP ("please respond") reply to indicate one might attend.
#: forms/rsvp.php:123
msgctxt "BUTTON"
msgid "Maybe"
msgstr ""
#. TRANS: Field label on event form.
#: forms/event.php:103
msgctxt "LABEL"
@@ -212,211 +420,3 @@ msgstr ""
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: Field label on form to RSVP ("please respond") for an event.
#: forms/rsvp.php:98
msgid "RSVP:"
msgstr ""
#: forms/rsvp.php:116
msgctxt "BUTTON"
msgid "Cancel"
msgstr ""
#. TRANS: Button text for RSVP ("please respond") reply to confirm attendence.
#: forms/rsvp.php:119
msgctxt "BUTTON"
msgid "Yes"
msgstr ""
#. TRANS: Button text for RSVP ("please respond") reply to deny attendence.
#: forms/rsvp.php:121
msgctxt "BUTTON"
msgid "No"
msgstr ""
#. TRANS: Button text for RSVP ("please respond") reply to indicate one might attend.
#: forms/rsvp.php:123
msgctxt "BUTTON"
msgid "Maybe"
msgstr ""
#. TRANS: 0 minutes abbreviated. Used in a list.
#: lib/eventtimelist.php:85
msgid "(0 min)"
msgstr ""
#. TRANS: 30 minutes abbreviated. Used in a list.
#: lib/eventtimelist.php:89
msgid "(30 min)"
msgstr ""
#. TRANS: 1 hour. Used in a list.
#: lib/eventtimelist.php:93
msgid "(1 hour)"
msgstr ""
#: lib/eventtimelist.php:98
#, php-format
msgid "(%.1f hours)"
msgstr ""
#: lib/eventtimelist.php:99
#, php-format
msgid "(%d hours)"
msgstr ""
#. TRANS: Page title for sample plugin. %s is a user nickname.
#: actions/events.php:20
#, php-format
msgid "%s's happenings"
msgstr ""
#. TRANS: Title for new event form.
#: actions/newevent.php:55
msgctxt "TITLE"
msgid "New event"
msgstr ""
#. TRANS: Client exception thrown when trying to post an event without providing a title.
#: actions/newevent.php:64
msgid "Event must have a title."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event without providing a start date.
#: actions/newevent.php:75
msgid "Start date required."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event without providing a start time.
#: actions/newevent.php:80
msgid "Event must have a start time."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event with a date that cannot be processed.
#. TRANS: %s is the data that could not be processed.
#: actions/newevent.php:87 actions/newevent.php:105
#, php-format
msgid "Could not parse date %s."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event without providing an end date.
#: actions/newevent.php:93
msgid "End date required."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event without providing an end time.
#: actions/newevent.php:98
msgid "Event must have an end time."
msgstr ""
#. TRANS: Client exception thrown when trying to post an event with an invalid (non-empty) URL.
#: actions/newevent.php:111
msgid "An event URL must be a valid HTTP/HTTPS link."
msgstr ""
#: actions/newevent.php:164
msgid "Saved the event."
msgstr ""
#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
#: actions/timelist.php:65
msgid "Not logged in."
msgstr ""
#. TRANS: Client error when submitting a form with unexpected information.
#: actions/timelist.php:72
msgid "Unexpected form submission."
msgstr ""
#. TRANS: Client error displayed when using an action in a non-AJAX way.
#: actions/timelist.php:80
msgid "This action is AJAX only."
msgstr ""
#. TRANS: Title for RSVP ("please respond") action.
#: actions/rsvp.php:52
msgctxt "TITLE"
msgid "New RSVP"
msgstr ""
#: actions/rsvp.php:81
msgid "Cancelled RSVP"
msgstr ""
#: actions/rsvp.php:91
msgid "RSVP"
msgstr ""
#: actions/rsvp.php:102
msgid "Saved RSVP"
msgstr ""
#. TRANS: Client exception thrown when referring to a non-existing RSVP.
#. TRANS: RSVP stands for "Please reply".
#: actions/showrsvp.php:61 actions/showrsvp.php:77
msgid "No such RSVP."
msgstr ""
#. TRANS: Client exception thrown when referring to a non-existing event.
#: actions/showrsvp.php:68
msgid "No such event."
msgstr ""
#. TRANS: Title for event.
#. TRANS: %1$s is a user nickname, %2$s is an event title.
#: actions/showrsvp.php:94
#, php-format
msgid "%1$s's RSVP for \"%2$s\""
msgstr ""
#. TRANS: Plugin description.
#: EventPlugin.php:110
msgid "Event invitations and RSVPs."
msgstr ""
#. TRANS: Title for event application.
#: EventPlugin.php:116
msgctxt "TITLE"
msgid "Event"
msgstr ""
#. TRANS: Exception thrown when event plugin comes across a unknown object type.
#: EventPlugin.php:213
msgid "Unknown object type."
msgstr ""
#. TRANS: Field label for event description.
#: EventPlugin.php:340
msgid "Time:"
msgstr ""
#. TRANS: Field label for event description.
#: EventPlugin.php:357
msgid "Location:"
msgstr ""
#. TRANS: Field label for event description.
#: EventPlugin.php:365
msgid "Description:"
msgstr ""
#. TRANS: Field label for event description.
#: EventPlugin.php:375
msgid "Attending:"
msgstr ""
#. TRANS: Content for a deleted RSVP list item (RSVP stands for "please respond").
#: EventPlugin.php:418
msgid "Deleted."
msgstr ""
#. TRANS: Menu item in sample plugin.
#: EventPlugin.php:431
msgid "Happenings"
msgstr ""
#. TRANS: Menu item title in sample plugin.
#: EventPlugin.php:433
msgid "A list of your events"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,12 +17,100 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: classes/GNUsocialProfileExtensionField.php:75
msgid "Error creating new field."
msgstr ""
#: classes/GNUsocialProfileExtensionResponse.php:74
msgid "Error creating new response."
msgstr ""
#: classes/GNUsocialProfileExtensionField.php:75
msgid "Error creating new field."
#. TRANS: Title for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:84
msgid "Confirmation Required"
msgstr ""
#. TRANS: Confirmation text for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:87
msgid "Really delete this entry?"
msgstr ""
#. TRANS: Value between parentheses (phone number, website, or IM address).
#: lib/extendedprofilewidget.php:171 lib/extendedprofilewidget.php:185
#: lib/extendedprofilewidget.php:206
#, php-format
msgid "(%s)"
msgstr ""
#. TRANS: Field label in experience area of extended profile.
#. TRANS: Field label in experience edit area of extended profile (which company does one work for).
#: lib/extendedprofilewidget.php:329 lib/extendedprofilewidget.php:380
msgid "Company"
msgstr ""
#. TRANS: Field label in extended profile (when did one start a position or education).
#: lib/extendedprofilewidget.php:335 lib/extendedprofilewidget.php:388
#: lib/extendedprofilewidget.php:434 lib/extendedprofilewidget.php:494
msgid "Start"
msgstr ""
#. TRANS: Field label in extended profile (when did one end a position or education).
#: lib/extendedprofilewidget.php:345 lib/extendedprofilewidget.php:396
#: lib/extendedprofilewidget.php:444 lib/extendedprofilewidget.php:503
msgid "End"
msgstr ""
#. TRANS: Field value in experience area of extended profile (one still holds a position).
#: lib/extendedprofilewidget.php:360
msgid "(Current)"
msgstr ""
#. TRANS: Checkbox label in experience edit area of extended profile (one still works at a company).
#: lib/extendedprofilewidget.php:411
msgid "Current"
msgstr ""
#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#. TRANS: Field label for extended profile properties.
#: lib/extendedprofilewidget.php:424 lib/extendedprofilewidget.php:469
#: lib/extendedprofile.php:254 lib/extendedprofile.php:267
msgid "Institution"
msgstr ""
#. TRANS: Field label in extended profile for specifying an academic degree.
#: lib/extendedprofilewidget.php:428 lib/extendedprofilewidget.php:477
msgid "Degree"
msgstr ""
#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofilewidget.php:431 lib/extendedprofilewidget.php:485
#: actions/profilefieldsadminpanel.php:196
msgid "Description"
msgstr ""
#. TRANS: Link description in extended profile page to add another profile element.
#: lib/extendedprofilewidget.php:535
msgid "Add another item"
msgstr ""
#. TRANS: Field label for undefined field in extended profile.
#: lib/extendedprofilewidget.php:650
#, php-format
msgid "TYPE: %s"
msgstr ""
#. TRANS: Button text for saving extended profile properties.
#: lib/extendedprofilewidget.php:665 actions/profilefieldsadminpanel.php:224
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: .
#. TRANS: Button title for saving extended profile properties.
#: lib/extendedprofilewidget.php:670
msgid "Save details"
msgstr ""
#. TRANS: Field label for extended profile properties.
@@ -45,14 +133,6 @@ msgstr ""
msgid "Employer"
msgstr ""
#. TRANS: Field label for extended profile properties.
#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofile.php:254 lib/extendedprofile.php:267
#: lib/extendedprofilewidget.php:426 lib/extendedprofilewidget.php:471
msgid "Institution"
msgstr ""
#. TRANS: Field label for extended profile properties.
#: lib/extendedprofile.php:313 lib/extendedprofile.php:362
msgid "Personal"
@@ -122,84 +202,58 @@ msgstr ""
msgid "Additional information"
msgstr ""
#. TRANS: Title for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:85
msgid "Confirmation Required"
#. TRANS: Title for extended profile settings.
#. TRANS: %%site.name%% is the name of the site.
#: actions/profiledetailsettings.php:35
msgid "Extended profile settings"
msgstr ""
#. TRANS: Confirmation text for extended profile entry deletion dialog.
#: lib/extendedprofilewidget.php:88
msgid "Really delete this entry?"
#. TRANS: Message given submitting a form with an unknown action.
#: actions/profiledetailsettings.php:45
msgid "Unexpected form submission."
msgstr ""
#. TRANS: Value between parentheses (phone number, website, or IM address).
#: lib/extendedprofilewidget.php:172 lib/extendedprofilewidget.php:185
#: lib/extendedprofilewidget.php:209
#. TRANS: Success message after saving extended profile details.
#: actions/profiledetailsettings.php:86
msgid "Details saved."
msgstr ""
#. TRANS: Exception thrown when no date was entered in a required date field.
#. TRANS: %s is the field name.
#: actions/profiledetailsettings.php:96
#, php-format
msgid "(%s)"
msgid "You must supply a date for \"%s\"."
msgstr ""
#. TRANS: Field label in experience area of extended profile.
#. TRANS: Field label in experience edit area of extended profile (which company does one work for).
#: lib/extendedprofilewidget.php:331 lib/extendedprofilewidget.php:382
msgid "Company"
msgstr ""
#. TRANS: Field label in extended profile (when did one start a position or education).
#: lib/extendedprofilewidget.php:337 lib/extendedprofilewidget.php:390
#: lib/extendedprofilewidget.php:436 lib/extendedprofilewidget.php:496
msgid "Start"
msgstr ""
#. TRANS: Field label in extended profile (when did one end a position or education).
#: lib/extendedprofilewidget.php:347 lib/extendedprofilewidget.php:398
#: lib/extendedprofilewidget.php:446 lib/extendedprofilewidget.php:505
msgid "End"
msgstr ""
#. TRANS: Field value in experience area of extended profile (one still holds a position).
#: lib/extendedprofilewidget.php:362
msgid "(Current)"
msgstr ""
#. TRANS: Checkbox label in experience edit area of extended profile (one still works at a company).
#: lib/extendedprofilewidget.php:413
msgid "Current"
msgstr ""
#. TRANS: Field label in extended profile for specifying an academic degree.
#: lib/extendedprofilewidget.php:430 lib/extendedprofilewidget.php:479
msgid "Degree"
msgstr ""
#. TRANS: Field label in education area of extended profile.
#. TRANS: Field label in education edit area of extended profile.
#: lib/extendedprofilewidget.php:433 lib/extendedprofilewidget.php:487
#: actions/profilefieldsadminpanel.php:196
msgid "Description"
msgstr ""
#. TRANS: Link description in extended profile page to add another profile element.
#: lib/extendedprofilewidget.php:537
msgid "Add another item"
msgstr ""
#. TRANS: Field label for undefined field in extended profile.
#: lib/extendedprofilewidget.php:652
#. TRANS: Exception thrown on incorrect data input.
#. TRANS: %1$s is a field name, %2$s is the incorrect input.
#: actions/profiledetailsettings.php:108
#, php-format
msgid "TYPE: %s"
msgid "Invalid date entered for \"%1$s\": %2$s."
msgstr ""
#. TRANS: Button text for saving extended profile properties.
#: lib/extendedprofilewidget.php:667 actions/profilefieldsadminpanel.php:224
msgctxt "BUTTON"
msgid "Save"
#. TRANS: Exception thrown when entering an invalid URL.
#. TRANS: %s is the invalid URL.
#: actions/profiledetailsettings.php:228
#, php-format
msgid "Invalid URL: %s."
msgstr ""
#. TRANS: .
#. TRANS: Button title for saving extended profile properties.
#: lib/extendedprofilewidget.php:672
msgid "Save details"
#. TRANS: Server error displayed when a field could not be saved in the database.
#: actions/profiledetailsettings.php:471 actions/profiledetailsettings.php:483
msgid "Could not save profile details."
msgstr ""
#. TRANS: Validation error in form for profile settings.
#. TRANS: %s is an invalid tag.
#: actions/profiledetailsettings.php:525
#, php-format
msgid "Invalid tag: \"%s\"."
msgstr ""
#. TRANS: Server error thrown when user profile settings could not be saved.
#: actions/profiledetailsettings.php:564
msgid "Could not save profile."
msgstr ""
#: actions/profilefieldsadminpanel.php:39
@@ -293,60 +347,6 @@ msgstr ""
msgid "Edit"
msgstr ""
#. TRANS: Title for extended profile settings.
#. TRANS: %%site.name%% is the name of the site.
#: actions/profiledetailsettings.php:35
msgid "Extended profile settings"
msgstr ""
#. TRANS: Message given submitting a form with an unknown action.
#: actions/profiledetailsettings.php:45
msgid "Unexpected form submission."
msgstr ""
#. TRANS: Success message after saving extended profile details.
#: actions/profiledetailsettings.php:86
msgid "Details saved."
msgstr ""
#. TRANS: Exception thrown when no date was entered in a required date field.
#. TRANS: %s is the field name.
#: actions/profiledetailsettings.php:96
#, php-format
msgid "You must supply a date for \"%s\"."
msgstr ""
#. TRANS: Exception thrown on incorrect data input.
#. TRANS: %1$s is a field name, %2$s is the incorrect input.
#: actions/profiledetailsettings.php:108
#, php-format
msgid "Invalid date entered for \"%1$s\": %2$s."
msgstr ""
#. TRANS: Exception thrown when entering an invalid URL.
#. TRANS: %s is the invalid URL.
#: actions/profiledetailsettings.php:228
#, php-format
msgid "Invalid URL: %s."
msgstr ""
#. TRANS: Server error displayed when a field could not be saved in the database.
#: actions/profiledetailsettings.php:471 actions/profiledetailsettings.php:483
msgid "Could not save profile details."
msgstr ""
#. TRANS: Validation error in form for profile settings.
#. TRANS: %s is an invalid tag.
#: actions/profiledetailsettings.php:525
#, php-format
msgid "Invalid tag: \"%s\"."
msgstr ""
#. TRANS: Server error thrown when user profile settings could not be saved.
#: actions/profiledetailsettings.php:564
msgid "Could not save profile."
msgstr ""
#. TRANS: Module description.
#: ExtendedProfilePlugin.php:46
msgid "UI extensions for additional profile fields."

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-13 03:09+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,6 +18,6 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Plugin description.
#: FFmpegPlugin.php:104
#: FFmpegPlugin.php:155
msgid "Use PHP-FFMpeg for resizing animated GIFs"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -98,16 +98,16 @@ class Group_message extends Managed_DataObject
// We use the same limits as for 'regular' private messages.
if (Message::contentTooLong($text)) {
if (MessageModel::contentTooLong($text)) {
// TRANS: Exception thrown when trying to send group private message that is too long.
// TRANS: %d is the maximum meggage length.
throw new Exception(sprintf(
_m(
'That\'s too long. Maximum message size is %d character.',
'That\'s too long. Maximum message size is %d characters.',
Message::maxContent()
MessageModel::maxContent()
),
Message::maxContent()
MessageModel::maxContent()
));
}

View File

@@ -133,7 +133,7 @@ class GroupMessageForm extends Form
'name' => 'content'),
($this->content) ? $this->content : '');
$contentLimit = Message::maxContent();
$contentLimit = MessageModel::maxContent();
if ($contentLimit > 0) {
$this->out->elementStart('dl', 'form_note');

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,6 +18,32 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#. TRANS: Subject for direct-message notification email.
#. TRANS: %1$s is the sending user's nickname, %2$s is the group nickname.
#: classes/Group_message_profile.php:111
#, php-format
msgid "New private message from %1$s to group %2$s"
msgstr ""
#: classes/Group_message_profile.php:118
#, php-format
msgid ""
"%1$s (%2$s) sent a private message to group %3$s:\n"
"\n"
"------------------------------------------------------\n"
"%4$s\n"
"------------------------------------------------------\n"
"\n"
"You can reply to their message here:\n"
"\n"
"%5$s\n"
"\n"
"Do not reply to this email; it will not get to them.\n"
"\n"
"With kind regards,\n"
"%6$s"
msgstr ""
#. TRANS: Exception thrown when trying to set group privacy setting if group %s does not allow private messages.
#: classes/Group_privacy_settings.php:110
#, php-format
@@ -52,43 +78,13 @@ msgstr ""
msgid "Unknown privacy settings for group %s."
msgstr ""
#. TRANS: Subject for direct-message notification email.
#. TRANS: %1$s is the sending user's nickname, %2$s is the group nickname.
#: classes/Group_message_profile.php:111
#, php-format
msgid "New private message from %1$s to group %2$s"
msgstr ""
#: classes/Group_message_profile.php:118
#, php-format
msgid ""
"%1$s (%2$s) sent a private message to group %3$s:\n"
"\n"
"------------------------------------------------------\n"
"%4$s\n"
"------------------------------------------------------\n"
"\n"
"You can reply to their message here:\n"
"\n"
"%5$s\n"
"\n"
"Do not reply to this email; it will not get to them.\n"
"\n"
"With kind regards,\n"
"%6$s"
msgstr ""
#. TRANS: Exception thrown when trying to send group private message without having the right to do that.
#. TRANS: %s is a user nickname.
#. TRANS: Exception thrown when user %s is not allowed to send a private group message.
#: classes/Group_message.php:96 actions/newgroupmessage.php:75
#: classes/Group_message.php:90 actions/newgroupmessage.php:75
#, php-format
msgid "User %s is not allowed to send private messages."
msgstr ""
#. TRANS: Exception thrown when trying to send group private message that is too long.
#. TRANS: %d is the maximum meggage length.
#: classes/Group_message.php:109
#: classes/Group_message.php:106
#, php-format
msgid "That's too long. Maximum message size is %d character."
msgid_plural "That's too long. Maximum message size is %d characters."
@@ -96,131 +92,21 @@ msgstr[0] ""
msgstr[1] ""
#. TRANS: Exception thrown when trying to send group private message to a non-existing group.
#: classes/Group_message.php:153
#: classes/Group_message.php:152
msgid "No group for group message."
msgstr ""
#. TRANS: Exception thrown when trying to send group private message without having a sender.
#: classes/Group_message.php:163
#: classes/Group_message.php:162
msgid "No sender for group message."
msgstr ""
#. TRANS: Form legend for sending private message to group %s.
#: forms/groupmessage.php:89
#, php-format
msgid "Message to %s"
msgstr ""
#. TRANS: Field label for private group message to group %s.
#: forms/groupmessage.php:128
#, php-format
msgid "Direct message to %s"
msgstr ""
#. TRANS: Indicator for number of chatacters still available for notice.
#: forms/groupmessage.php:141
msgid "Available characters"
msgstr ""
#. TRANS: Send button text for sending private group notice.
#: forms/groupmessage.php:162
msgctxt "Send button for sending notice"
msgid "Send"
msgstr ""
#. TRANS: Succes message after sending private group message to group %s.
#: lib/groupmessagecommand.php:79
#, php-format
msgid "Direct message to group %s sent."
msgstr ""
#. TRANS: Menu item in group page.
#: GroupPrivateMessagePlugin.php:114
msgctxt "MENU"
msgid "Inbox"
msgstr ""
#. TRANS: Menu title in group page.
#: GroupPrivateMessagePlugin.php:116
msgid "Private messages for this group."
msgstr ""
#. TRANS: Dropdown label in group settings page for if group allows private messages.
#: GroupPrivateMessagePlugin.php:162
msgid "Private messages"
msgstr ""
#. TRANS: Dropdown option in group settings page for allowing private messages.
#: GroupPrivateMessagePlugin.php:164
msgid "Sometimes"
msgstr ""
#. TRANS: Dropdown option in group settings page for allowing private messages.
#: GroupPrivateMessagePlugin.php:166
msgid "Always"
msgstr ""
#. TRANS: Dropdown option in group settings page for allowing private messages.
#: GroupPrivateMessagePlugin.php:168
msgid "Never"
msgstr ""
#. TRANS: Dropdown title in group settings page for if group allows private messages.
#: GroupPrivateMessagePlugin.php:170
msgid "Whether to allow private messages to this group."
msgstr ""
#. TRANS: Dropdown label in group settings page for who can send private messages to the group.
#: GroupPrivateMessagePlugin.php:177
msgid "Private senders"
msgstr ""
#. TRANS: Dropdown option in group settings page for who can send private messages.
#: GroupPrivateMessagePlugin.php:179
msgid "Everyone"
msgstr ""
#. TRANS: Dropdown option in group settings page for who can send private messages.
#: GroupPrivateMessagePlugin.php:181
msgid "Member"
msgstr ""
#. TRANS: Dropdown option in group settings page for who can send private messages.
#: GroupPrivateMessagePlugin.php:183
msgid "Admin"
msgstr ""
#. TRANS: Dropdown title in group settings page for who can send private messages to the group.
#: GroupPrivateMessagePlugin.php:185
msgid "Who can send private messages to the group."
msgstr ""
#. TRANS: Title for action in group actions list.
#: GroupPrivateMessagePlugin.php:290
msgid "Send a direct message to this group."
msgstr ""
#. TRANS: Link text for action in group actions list to send a private message to a group.
#: GroupPrivateMessagePlugin.php:292
msgctxt "LINKTEXT"
msgid "Message"
msgstr ""
#. TRANS: Client exception thrown when a private group message has to be forced.
#: GroupPrivateMessagePlugin.php:370
msgid "Forced notice to private group message."
msgstr ""
#. TRANS: Indicator on the group page that the group is (essentially) private.
#: GroupPrivateMessagePlugin.php:392
msgid "Private"
msgstr ""
#. TRANS: Plugin description.
#: GroupPrivateMessagePlugin.php:418
msgid "Allow posting private messages to groups."
msgstr ""
#. TRANS: Client exception thrown when trying to send a private group message while not logged in.
#: actions/newgroupmessage.php:70
msgid "Must be logged in."
@@ -316,3 +202,113 @@ msgid ""
"This is the group inbox, which lists all incoming private messages for this "
"group."
msgstr ""
#. TRANS: Menu item in group page.
#: GroupPrivateMessagePlugin.php:114
msgctxt "MENU"
msgid "Inbox"
msgstr ""
#. TRANS: Menu title in group page.
#: GroupPrivateMessagePlugin.php:116
msgid "Private messages for this group."
msgstr ""
#. TRANS: Dropdown label in group settings page for if group allows private messages.
#: GroupPrivateMessagePlugin.php:162
msgid "Private messages"
msgstr ""
#. TRANS: Dropdown option in group settings page for allowing private messages.
#: GroupPrivateMessagePlugin.php:164
msgid "Sometimes"
msgstr ""
#. TRANS: Dropdown option in group settings page for allowing private messages.
#: GroupPrivateMessagePlugin.php:166
msgid "Always"
msgstr ""
#. TRANS: Dropdown option in group settings page for allowing private messages.
#: GroupPrivateMessagePlugin.php:168
msgid "Never"
msgstr ""
#. TRANS: Dropdown title in group settings page for if group allows private messages.
#: GroupPrivateMessagePlugin.php:170
msgid "Whether to allow private messages to this group."
msgstr ""
#. TRANS: Dropdown label in group settings page for who can send private messages to the group.
#: GroupPrivateMessagePlugin.php:177
msgid "Private senders"
msgstr ""
#. TRANS: Dropdown option in group settings page for who can send private messages.
#: GroupPrivateMessagePlugin.php:179
msgid "Everyone"
msgstr ""
#. TRANS: Dropdown option in group settings page for who can send private messages.
#: GroupPrivateMessagePlugin.php:181
msgid "Member"
msgstr ""
#. TRANS: Dropdown option in group settings page for who can send private messages.
#: GroupPrivateMessagePlugin.php:183
msgid "Admin"
msgstr ""
#. TRANS: Dropdown title in group settings page for who can send private messages to the group.
#: GroupPrivateMessagePlugin.php:185
msgid "Who can send private messages to the group."
msgstr ""
#. TRANS: Title for action in group actions list.
#: GroupPrivateMessagePlugin.php:290
msgid "Send a direct message to this group."
msgstr ""
#. TRANS: Link text for action in group actions list to send a private message to a group.
#: GroupPrivateMessagePlugin.php:292
msgctxt "LINKTEXT"
msgid "Message"
msgstr ""
#. TRANS: Client exception thrown when a private group message has to be forced.
#: GroupPrivateMessagePlugin.php:370
msgid "Forced notice to private group message."
msgstr ""
#. TRANS: Indicator on the group page that the group is (essentially) private.
#: GroupPrivateMessagePlugin.php:392
msgid "Private"
msgstr ""
#. TRANS: Plugin description.
#: GroupPrivateMessagePlugin.php:418
msgid "Allow posting private messages to groups."
msgstr ""
#. TRANS: Form legend for sending private message to group %s.
#: forms/groupmessage.php:89
#, php-format
msgid "Message to %s"
msgstr ""
#. TRANS: Field label for private group message to group %s.
#: forms/groupmessage.php:128
#, php-format
msgid "Direct message to %s"
msgstr ""
#. TRANS: Indicator for number of chatacters still available for notice.
#: forms/groupmessage.php:141
msgid "Available characters"
msgstr ""
#. TRANS: Send button text for sending private group notice.
#: forms/groupmessage.php:162
msgctxt "Send button for sending notice"
msgid "Send"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,6 +18,6 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Plugin description.
#: ImageMagickPlugin.php:145
#: ImageMagickPlugin.php:78
msgid "Use ImageMagick for some more image support."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,11 +17,6 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: E-mail subject in case of an error.
#: lib/imapmailhandler.php:31
msgid "Error"
msgstr ""
#. TRANS: Exception thrown when the ImapManager is used incorrectly in the code.
#: lib/imapmanager.php:52
msgid ""
@@ -29,6 +24,11 @@ msgid ""
"\"get()\" method."
msgstr ""
#. TRANS: E-mail subject in case of an error.
#: lib/imapmailhandler.php:31
msgid "Error"
msgstr ""
#. TRANS: Exception thrown when configuration of the IMAP plugin is incorrect.
#: ImapPlugin.php:57
msgid "A mailbox must be specified."

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,11 +17,6 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Plugin description.
#: LinkPreviewPlugin.php:42
msgid "UI extension for previewing thumbnails from links."
msgstr ""
#. TRANS: Client error displayed when the session token does not match or is not given.
#: actions/oembedproxy.php:58
msgid "There was a problem with your session token. Try again, please."
@@ -36,3 +31,8 @@ msgstr ""
#: actions/oembedproxy.php:71
msgid "Invalid URL."
msgstr ""
#. TRANS: Plugin description.
#: LinkPreviewPlugin.php:42
msgid "UI extension for previewing thumbnails from links."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,62 +17,6 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: lib/util.php:211
msgid "linked to this from <a href=\""
msgstr ""
#: lib/util.php:426
msgid "Favor"
msgstr ""
#. TRANS: Title of Linkback settings page for a user.
#: actions/linkbacksettings.php:47
msgctxt "TITLE"
msgid "Linkback settings"
msgstr ""
#. TRANS: Form instructions for Linkback settings.
#: actions/linkbacksettings.php:58
msgid ""
"Linkbacks inform post authors when you link to them. You can disable this "
"feature here."
msgstr ""
#: actions/linkbacksettings.php:71
msgctxt "LEGEND"
msgid "Preferences"
msgstr ""
#. TRANS: Button text to save OpenID prefs
#: actions/linkbacksettings.php:74
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#: actions/linkbacksettings.php:89
msgid "Linkback preferences saved."
msgstr ""
#: actions/webmention.php:42 actions/webmention.php:43
msgid "\"source\" is missing"
msgstr ""
#: actions/webmention.php:47 actions/webmention.php:48
msgid "\"target\" is missing"
msgstr ""
#: actions/webmention.php:53 actions/webmention.php:54
msgid "Source does not link to target."
msgstr ""
#: actions/webmention.php:59 actions/webmention.php:60
msgid "Target not found"
msgstr ""
#: actions/webmention.php:65 actions/webmention.php:66
msgid "An error occured while saving."
msgstr ""
#. TRANS: Trackback title.
#. TRANS: %1$s is a profile nickname, %2$s is a timestamp.
#: LinkbackPlugin.php:318
@@ -105,3 +49,59 @@ msgstr ""
#, php-format
msgid "Sent from %s via Linkback"
msgstr ""
#: lib/util.php:276
msgid "linked to this from <a href=\""
msgstr ""
#: lib/util.php:522
msgid "Favor"
msgstr ""
#: actions/webmention.php:42 actions/webmention.php:43
msgid "\"source\" is missing"
msgstr ""
#: actions/webmention.php:47 actions/webmention.php:48
msgid "\"target\" is missing"
msgstr ""
#: actions/webmention.php:53 actions/webmention.php:54
msgid "Source does not link to target."
msgstr ""
#: actions/webmention.php:59 actions/webmention.php:60
msgid "Target not found"
msgstr ""
#: actions/webmention.php:65 actions/webmention.php:66
msgid "An error occured while saving."
msgstr ""
#. TRANS: Title of Linkback settings page for a user.
#: actions/linkbacksettings.php:47
msgctxt "TITLE"
msgid "Linkback settings"
msgstr ""
#. TRANS: Form instructions for Linkback settings.
#: actions/linkbacksettings.php:58
msgid ""
"Linkbacks inform post authors when you link to them. You can disable this "
"feature here."
msgstr ""
#: actions/linkbacksettings.php:71
msgctxt "LEGEND"
msgid "Preferences"
msgstr ""
#. TRANS: Button text to save OpenID prefs
#: actions/linkbacksettings.php:74
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#: actions/linkbacksettings.php:89
msgid "Linkback preferences saved."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,23 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Title for map widget.
#. TRANS: %s is a user name.
#: actions/usermap.php:66
#, php-format
msgid "%s map"
msgstr ""
#. TRANS: Client error displayed when referring to a non-existing user.
#: actions/map.php:72
msgid "No such user."
msgstr ""
#. TRANS: Error message displayed when referring to a user without a profile.
#: actions/map.php:79
msgid "User has no profile."
msgstr ""
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
#: actions/allmap.php:66
@@ -31,23 +48,6 @@ msgstr ""
msgid "%1$s friends map, page %2$d"
msgstr ""
#. TRANS: Client error displayed when referring to a non-existing user.
#: actions/map.php:72
msgid "No such user."
msgstr ""
#. TRANS: Error message displayed when referring to a user without a profile.
#: actions/map.php:79
msgid "User has no profile."
msgstr ""
#. TRANS: Title for map widget.
#. TRANS: %s is a user name.
#: actions/usermap.php:66
#, php-format
msgid "%s map"
msgstr ""
#. TRANS: Header for Map widget that displays a map with geodata for notices.
#: MapstractionPlugin.php:151
msgid "Map"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Plugin description.
#: MemcachedPlugin.php:270
#: MemcachedPlugin.php:278
msgid ""
"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,6 +18,6 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Client exception thrown when notice content triggers the spam filter.
#: MollomPlugin.php:87
#: MollomPlugin.php:85
msgid "Spam Detected."
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,239 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Client exception thrown when an action is not available.
#: OpenIDPlugin.php:143
msgid "Unavailable action."
msgstr ""
#. TRANS: Tooltip for main menu option "Login"
#: OpenIDPlugin.php:192
msgctxt "TOOLTIP"
msgid "Login to the site."
msgstr ""
#. TRANS: Main menu option when not logged in to log in
#: OpenIDPlugin.php:195
msgctxt "MENU"
msgid "Login"
msgstr ""
#. TRANS: Tooltip for main menu option "Help"
#: OpenIDPlugin.php:200
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr ""
#. TRANS: Main menu option for help on the StatusNet site
#: OpenIDPlugin.php:203
msgctxt "MENU"
msgid "Help"
msgstr ""
#. TRANS: Tooltip for main menu option "Search"
#: OpenIDPlugin.php:209
msgctxt "TOOLTIP"
msgid "Search for people or text."
msgstr ""
#. TRANS: Main menu option when logged in or when the StatusNet instance is not private
#: OpenIDPlugin.php:212
msgctxt "MENU"
msgid "Search"
msgstr ""
#. TRANS: OpenID plugin menu item on site logon page.
#. TRANS: OpenID plugin menu item on user settings page.
#. TRANS: OpenID configuration menu item.
#: OpenIDPlugin.php:269 OpenIDPlugin.php:305 OpenIDPlugin.php:479
#: OpenIDPlugin.php:559
msgctxt "MENU"
msgid "OpenID"
msgstr ""
#. TRANS: OpenID plugin tooltip for logon menu item.
#: OpenIDPlugin.php:271
msgid "Login or register with OpenID."
msgstr ""
#. TRANS: OpenID plugin tooltip for user settings menu item.
#: OpenIDPlugin.php:307
msgid "Add or remove OpenIDs."
msgstr ""
#. TRANS: Page notice for logged in users to try and get them to add an OpenID account to their StatusNet account.
#. TRANS: This message contains Markdown links in the form (description)[link].
#: OpenIDPlugin.php:421
#, php-format
msgid ""
"(Have an [OpenID](http://openid.net/)? [Add an OpenID to your account]"
"(%%action.openidsettings%%)!"
msgstr ""
#. TRANS: Page notice for anonymous users to try and get them to register with an OpenID account.
#. TRANS: This message contains Markdown links in the form (description)[link].
#: OpenIDPlugin.php:426
#, php-format
msgid ""
"(Have an [OpenID](http://openid.net/)? Try our [OpenID registration]"
"(%%action.openidlogin%%)!)"
msgstr ""
#. TRANS: Page notice on the login page to try and get them to log on with an OpenID account.
#. TRANS: This message contains Markdown links in the form (description)[link].
#: OpenIDPlugin.php:434
#, php-format
msgid ""
"(Have an [OpenID](http://openid.net/)? Try our [OpenID login](%%action."
"openidlogin%%)!)"
msgstr ""
#. TRANS: Tooltip for OpenID configuration menu item.
#: OpenIDPlugin.php:561
msgid "OpenID configuration."
msgstr ""
#. TRANS: Plugin description.
#: OpenIDPlugin.php:607
msgid "Use <a href=\"http://openid.net/\">OpenID</a> to login to the site."
msgstr ""
#. TRANS: button label for OAuth authorization page when needing OpenID authentication first.
#. TRANS: Button text to continue OpenID identity verification.
#: OpenIDPlugin.php:617 actions/openidtrust.php:136
msgctxt "BUTTON"
msgid "Continue"
msgstr ""
#. TRANS: OpenID plugin logon form legend.
#: OpenIDPlugin.php:634 actions/openidlogin.php:132
msgctxt "LEGEND"
msgid "OpenID login"
msgstr ""
#. TRANS: Field label.
#: OpenIDPlugin.php:642
msgid "OpenID provider"
msgstr ""
#. TRANS: Form guide.
#: OpenIDPlugin.php:651 actions/openidlogin.php:149
msgid "Enter your username."
msgstr ""
#. TRANS: Form guide.
#: OpenIDPlugin.php:653 actions/openidlogin.php:151
msgid "You will be sent to the provider's site for authentication."
msgstr ""
#. TRANS: OpenID plugin logon form field label.
#: OpenIDPlugin.php:657 actions/openidlogin.php:155
#: actions/openidsettings.php:97
msgid "OpenID URL"
msgstr ""
#. TRANS: OpenID plugin logon form field instructions.
#. TRANS: OpenID plugin logon form field title.
#: OpenIDPlugin.php:660 actions/openidlogin.php:158
msgid "Your OpenID URL."
msgstr ""
#. TRANS: Title for OpenID bridge administration page.
#: actions/openidadminpanel.php:47
msgctxt "TITLE"
msgid "OpenID Settings"
msgstr ""
#. TRANS: Page instructions.
#: actions/openidadminpanel.php:58
msgid "OpenID settings"
msgstr ""
#. TRANS: Client error displayed when OpenID provider URL is too long.
#: actions/openidadminpanel.php:139
msgid "Invalid provider URL. Maximum length is 255 characters."
msgstr ""
#. TRANS: Client error displayed when Launchpad team name is too long.
#: actions/openidadminpanel.php:146
msgid "Invalid team name. Maximum length is 255 characters."
msgstr ""
#. TRANS: Fieldset legend.
#: actions/openidadminpanel.php:200
msgctxt "LEGEND"
msgid "Trusted provider"
msgstr ""
#. TRANS: Form guide.
#: actions/openidadminpanel.php:205
msgid ""
"By default, users are allowed to authenticate with any OpenID provider. If "
"you are using your own OpenID service for shared sign-in, you can restrict "
"access to only your own users here."
msgstr ""
#. TRANS: Field label.
#: actions/openidadminpanel.php:215
msgid "Provider URL"
msgstr ""
#. TRANS: Field title.
#: actions/openidadminpanel.php:217
msgid ""
"All OpenID logins will be sent to this URL; other providers may not be used."
msgstr ""
#: actions/openidadminpanel.php:226
msgid "Append a username to base URL"
msgstr ""
#. TRANS: Checkbox title.
#: actions/openidadminpanel.php:229
msgid ""
"Login form will show the base URL and prompt for a username to add at the "
"end. Use when OpenID provider URL should be the profile page for individual "
"users."
msgstr ""
#. TRANS: Field label.
#: actions/openidadminpanel.php:238
msgid "Required team"
msgstr ""
#. TRANS: Field title.
#: actions/openidadminpanel.php:240
msgid "Only allow logins from users in the given team (Launchpad extension)."
msgstr ""
#. TRANS: Fieldset legend.
#: actions/openidadminpanel.php:253
msgctxt "LEGEND"
msgid "Options"
msgstr ""
#: actions/openidadminpanel.php:262
msgid "Enable OpenID-only mode"
msgstr ""
#. TRANS: Checkbox title.
#: actions/openidadminpanel.php:265
msgid ""
"Require all users to login via OpenID. Warning: disables password "
"authentication for all users!"
msgstr ""
#. TRANS: Button text to save OpenID prefs
#: actions/openidadminpanel.php:285 actions/openidsettings.php:248
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: Button title to save OpenID settings.
#: actions/openidadminpanel.php:289
msgid "Save OpenID settings."
msgstr ""
#. TRANS: Client error message trying to log on with OpenID while already logged on.
#: actions/openidlogin.php:33 actions/finishopenidlogin.php:37
msgid "Already logged in."
@@ -44,40 +277,12 @@ msgctxt "TITLE"
msgid "OpenID Login"
msgstr ""
#. TRANS: OpenID plugin logon form legend.
#: actions/openidlogin.php:132 OpenIDPlugin.php:634
msgctxt "LEGEND"
msgid "OpenID login"
msgstr ""
#. TRANS: Field label.
#: actions/openidlogin.php:140
msgctxt "LABEL"
msgid "OpenID provider"
msgstr ""
#. TRANS: Form guide.
#: actions/openidlogin.php:149 OpenIDPlugin.php:651
msgid "Enter your username."
msgstr ""
#. TRANS: Form guide.
#: actions/openidlogin.php:151 OpenIDPlugin.php:653
msgid "You will be sent to the provider's site for authentication."
msgstr ""
#. TRANS: OpenID plugin logon form field label.
#: actions/openidlogin.php:155 actions/openidsettings.php:97
#: OpenIDPlugin.php:657
msgid "OpenID URL"
msgstr ""
#. TRANS: OpenID plugin logon form field title.
#. TRANS: OpenID plugin logon form field instructions.
#: actions/openidlogin.php:158 OpenIDPlugin.php:660
msgid "Your OpenID URL."
msgstr ""
#. TRANS: OpenID plugin logon form checkbox label for setting to put the OpenID information in a cookie.
#: actions/openidlogin.php:163
msgid "Remember me"
@@ -94,6 +299,70 @@ msgctxt "BUTTON"
msgid "Login"
msgstr ""
#. TRANS: OpenID plugin client error given trying to add an unauthorised OpenID to a user (403).
#. TRANS: %s is a request identity.
#: actions/openidserver.php:113
#, php-format
msgid "You are not authorized to use the identity %s."
msgstr ""
#. TRANS: OpenID plugin client error given when not getting a response for a given OpenID provider (500).
#: actions/openidserver.php:136
msgid "Just an OpenID provider. Nothing to see here, move along..."
msgstr ""
#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
#: actions/finishaddopenid.php:60 actions/finishsynchopenid.php:55
msgid "Not logged in."
msgstr ""
#. TRANS: Status message in case the response from the OpenID provider is that the logon attempt was cancelled.
#: actions/finishaddopenid.php:81 actions/finishopenidlogin.php:254
#: actions/finishsynchopenid.php:76
msgid "OpenID authentication cancelled."
msgstr ""
#. TRANS: OpenID authentication failed; display the error message. %s is the error message.
#: actions/finishaddopenid.php:87 actions/finishopenidlogin.php:258
#: actions/finishsynchopenid.php:82
#, php-format
msgid "OpenID authentication failed: %s."
msgstr ""
#. TRANS: OpenID authentication error.
#. TRANS: Message displayed when OpenID authentication is aborted.
#. TRANS: OpenID authentication error.
#: actions/finishaddopenid.php:104 actions/finishopenidlogin.php:279
#: actions/finishsynchopenid.php:99
msgid ""
"OpenID authentication aborted: You are not allowed to login to this site."
msgstr ""
#. TRANS: Message in case a user tries to add an OpenID that is already connected to them.
#: actions/finishaddopenid.php:115
msgid "You already have this OpenID!"
msgstr ""
#. TRANS: Message in case a user tries to add an OpenID that is already used by another user.
#: actions/finishaddopenid.php:118
msgid "Someone else already has this OpenID."
msgstr ""
#. TRANS: Message in case the OpenID object cannot be connected to the user.
#: actions/finishaddopenid.php:131
msgid "Error connecting user."
msgstr ""
#. TRANS: Message in case the user or the user profile cannot be saved in StatusNet.
#: actions/finishaddopenid.php:139 actions/finishsynchopenid.php:112
msgid "Error updating profile."
msgstr ""
#. TRANS: Title after getting the status of the OpenID authorisation request.
#: actions/finishaddopenid.php:181
msgid "OpenID Login"
msgstr ""
#. TRANS: Message given when there is a problem with the user's session token.
#: actions/finishopenidlogin.php:42
msgid "There was a problem with your session token. Try again, please."
@@ -205,27 +474,6 @@ msgctxt "BUTTON"
msgid "Connect"
msgstr ""
#. TRANS: Status message in case the response from the OpenID provider is that the logon attempt was cancelled.
#: actions/finishopenidlogin.php:254 actions/finishaddopenid.php:81
#: actions/finishsynchopenid.php:76
msgid "OpenID authentication cancelled."
msgstr ""
#. TRANS: OpenID authentication failed; display the error message. %s is the error message.
#: actions/finishopenidlogin.php:258 actions/finishaddopenid.php:87
#: actions/finishsynchopenid.php:82
#, php-format
msgid "OpenID authentication failed: %s."
msgstr ""
#. TRANS: Message displayed when OpenID authentication is aborted.
#. TRANS: OpenID authentication error.
#: actions/finishopenidlogin.php:279 actions/finishaddopenid.php:104
#: actions/finishsynchopenid.php:99
msgid ""
"OpenID authentication aborted: You are not allowed to login to this site."
msgstr ""
#. TRANS: OpenID plugin message. No new user registration is allowed on the site.
#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and none was provided.
#: actions/finishopenidlogin.php:335 actions/finishopenidlogin.php:344
@@ -258,182 +506,6 @@ msgstr ""
msgid "Error connecting user to OpenID."
msgstr ""
#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
#: actions/finishaddopenid.php:60 actions/finishsynchopenid.php:55
msgid "Not logged in."
msgstr ""
#. TRANS: Message in case a user tries to add an OpenID that is already connected to them.
#: actions/finishaddopenid.php:115
msgid "You already have this OpenID!"
msgstr ""
#. TRANS: Message in case a user tries to add an OpenID that is already used by another user.
#: actions/finishaddopenid.php:118
msgid "Someone else already has this OpenID."
msgstr ""
#. TRANS: Message in case the OpenID object cannot be connected to the user.
#: actions/finishaddopenid.php:131
msgid "Error connecting user."
msgstr ""
#. TRANS: Message in case the user or the user profile cannot be saved in StatusNet.
#: actions/finishaddopenid.php:139 actions/finishsynchopenid.php:112
msgid "Error updating profile."
msgstr ""
#. TRANS: Title after getting the status of the OpenID authorisation request.
#: actions/finishaddopenid.php:181
msgid "OpenID Login"
msgstr ""
#. TRANS: Title after getting the status of the OpenID authorisation request.
#. TODO update after understanding the function ^
#: actions/finishsynchopenid.php:152
msgid "OpenID Synchronization"
msgstr ""
#. TRANS: OpenID plugin client error given trying to add an unauthorised OpenID to a user (403).
#. TRANS: %s is a request identity.
#: actions/openidserver.php:113
#, php-format
msgid "You are not authorized to use the identity %s."
msgstr ""
#. TRANS: OpenID plugin client error given when not getting a response for a given OpenID provider (500).
#: actions/openidserver.php:134
msgid "Just an OpenID provider. Nothing to see here, move along..."
msgstr ""
#. TRANS: Title for OpenID bridge administration page.
#: actions/openidadminpanel.php:47
msgctxt "TITLE"
msgid "OpenID Settings"
msgstr ""
#. TRANS: Page instructions.
#: actions/openidadminpanel.php:58
msgid "OpenID settings"
msgstr ""
#. TRANS: Client error displayed when OpenID provider URL is too long.
#: actions/openidadminpanel.php:139
msgid "Invalid provider URL. Maximum length is 255 characters."
msgstr ""
#. TRANS: Client error displayed when Launchpad team name is too long.
#: actions/openidadminpanel.php:146
msgid "Invalid team name. Maximum length is 255 characters."
msgstr ""
#. TRANS: Fieldset legend.
#: actions/openidadminpanel.php:200
msgctxt "LEGEND"
msgid "Trusted provider"
msgstr ""
#. TRANS: Form guide.
#: actions/openidadminpanel.php:205
msgid ""
"By default, users are allowed to authenticate with any OpenID provider. If "
"you are using your own OpenID service for shared sign-in, you can restrict "
"access to only your own users here."
msgstr ""
#. TRANS: Field label.
#: actions/openidadminpanel.php:215
msgid "Provider URL"
msgstr ""
#. TRANS: Field title.
#: actions/openidadminpanel.php:217
msgid ""
"All OpenID logins will be sent to this URL; other providers may not be used."
msgstr ""
#: actions/openidadminpanel.php:226
msgid "Append a username to base URL"
msgstr ""
#. TRANS: Checkbox title.
#: actions/openidadminpanel.php:229
msgid ""
"Login form will show the base URL and prompt for a username to add at the "
"end. Use when OpenID provider URL should be the profile page for individual "
"users."
msgstr ""
#. TRANS: Field label.
#: actions/openidadminpanel.php:238
msgid "Required team"
msgstr ""
#. TRANS: Field title.
#: actions/openidadminpanel.php:240
msgid "Only allow logins from users in the given team (Launchpad extension)."
msgstr ""
#. TRANS: Fieldset legend.
#: actions/openidadminpanel.php:253
msgctxt "LEGEND"
msgid "Options"
msgstr ""
#: actions/openidadminpanel.php:262
msgid "Enable OpenID-only mode"
msgstr ""
#. TRANS: Checkbox title.
#: actions/openidadminpanel.php:265
msgid ""
"Require all users to login via OpenID. Warning: disables password "
"authentication for all users!"
msgstr ""
#. TRANS: Button text to save OpenID prefs
#: actions/openidadminpanel.php:285 actions/openidsettings.php:248
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: Button title to save OpenID settings.
#: actions/openidadminpanel.php:289
msgid "Save OpenID settings."
msgstr ""
#. TRANS: Title for identity verification page.
#: actions/openidtrust.php:51
msgid "OpenID Identity Verification"
msgstr ""
#. TRANS: Client error when visiting page directly.
#: actions/openidtrust.php:69
msgid ""
"This page should only be reached during OpenID processing, not directly."
msgstr ""
#. TRANS: Page notice. %s is a trustroot name.
#: actions/openidtrust.php:118
#, php-format
msgid ""
"%s has asked to verify your identity. Click Continue to verify your identity "
"and login without creating a new password."
msgstr ""
#. TRANS: Button text to continue OpenID identity verification.
#. TRANS: button label for OAuth authorization page when needing OpenID authentication first.
#: actions/openidtrust.php:136 OpenIDPlugin.php:617
msgctxt "BUTTON"
msgid "Continue"
msgstr ""
#. TRANS: Button text to cancel OpenID identity verification.
#: actions/openidtrust.php:138
msgctxt "BUTTON"
msgid "Cancel"
msgstr ""
#. TRANS: Title of OpenID settings page for a user.
#: actions/openidsettings.php:49
msgctxt "TITLE"
@@ -562,171 +634,100 @@ msgstr ""
msgid "OpenID preferences saved."
msgstr ""
#: openid.php:165
#. TRANS: Title for identity verification page.
#: actions/openidtrust.php:51
msgid "OpenID Identity Verification"
msgstr ""
#. TRANS: Client error when visiting page directly.
#: actions/openidtrust.php:69
msgid ""
"This page should only be reached during OpenID processing, not directly."
msgstr ""
#. TRANS: Page notice. %s is a trustroot name.
#: actions/openidtrust.php:118
#, php-format
msgid ""
"%s has asked to verify your identity. Click Continue to verify your identity "
"and login without creating a new password."
msgstr ""
#. TRANS: Button text to cancel OpenID identity verification.
#: actions/openidtrust.php:138
msgctxt "BUTTON"
msgid "Cancel"
msgstr ""
#. TRANS: Title after getting the status of the OpenID authorisation request.
#. TODO update after understanding the function ^
#: actions/finishsynchopenid.php:152
msgid "OpenID Synchronization"
msgstr ""
#: openid.php:162
msgid "No valid URL provided for OpenID."
msgstr ""
#. TRANS: OpenID plugin server error.
#: openid.php:172
#: openid.php:169
msgid "Cannot instantiate OpenID consumer object."
msgstr ""
#. TRANS: OpenID plugin message. Given when an OpenID is not valid.
#: openid.php:183
#: openid.php:180
msgid "Not a valid OpenID."
msgstr ""
#. TRANS: OpenID plugin server error. Given when the OpenID authentication request fails.
#. TRANS: %s is the failure message.
#: openid.php:188
#: openid.php:185
#, php-format
msgid "OpenID failure: %s."
msgstr ""
#. TRANS: OpenID plugin server error. Given when the OpenID authentication request cannot be redirected.
#. TRANS: %s is the failure message.
#: openid.php:243
#: openid.php:240
#, php-format
msgid "Could not redirect to server: %s."
msgstr ""
#. TRANS: OpenID plugin user instructions.
#: openid.php:283
#: openid.php:284
msgid ""
"This form should automatically submit itself. If not, click the submit "
"button to go to your OpenID provider."
msgstr ""
#. TRANS: OpenID plugin server error.
#: openid.php:320
#: openid.php:321
msgid "Error saving the profile."
msgstr ""
#. TRANS: OpenID plugin server error.
#: openid.php:332
#: openid.php:333
msgid "Error saving the user."
msgstr ""
#. TRANS: OpenID plugin client exception (403).
#: openid.php:362
#: openid.php:363
msgid "Unauthorized URL used for OpenID login."
msgstr ""
#. TRANS: Title
#: openid.php:410
#: openid.php:411
msgid "OpenID Login Submission"
msgstr ""
#. TRANS: OpenID plugin message used while requesting authorization user's OpenID login provider.
#: openid.php:421
#: openid.php:422
msgid "Requesting authorization from your login provider..."
msgstr ""
#. TRANS: OpenID plugin message. User instruction while requesting authorization user's OpenID login provider.
#: openid.php:425
#: openid.php:426
msgid ""
"If you are not redirected to your login provider in a few seconds, try "
"pushing the button below."
msgstr ""
#. TRANS: Client exception thrown when an action is not available.
#: OpenIDPlugin.php:143
msgid "Unavailable action."
msgstr ""
#. TRANS: Tooltip for main menu option "Login"
#: OpenIDPlugin.php:192
msgctxt "TOOLTIP"
msgid "Login to the site."
msgstr ""
#. TRANS: Main menu option when not logged in to log in
#: OpenIDPlugin.php:195
msgctxt "MENU"
msgid "Login"
msgstr ""
#. TRANS: Tooltip for main menu option "Help"
#: OpenIDPlugin.php:200
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr ""
#. TRANS: Main menu option for help on the StatusNet site
#: OpenIDPlugin.php:203
msgctxt "MENU"
msgid "Help"
msgstr ""
#. TRANS: Tooltip for main menu option "Search"
#: OpenIDPlugin.php:209
msgctxt "TOOLTIP"
msgid "Search for people or text."
msgstr ""
#. TRANS: Main menu option when logged in or when the StatusNet instance is not private
#: OpenIDPlugin.php:212
msgctxt "MENU"
msgid "Search"
msgstr ""
#. TRANS: OpenID plugin menu item on site logon page.
#. TRANS: OpenID plugin menu item on user settings page.
#. TRANS: OpenID configuration menu item.
#: OpenIDPlugin.php:269 OpenIDPlugin.php:305 OpenIDPlugin.php:479
#: OpenIDPlugin.php:559
msgctxt "MENU"
msgid "OpenID"
msgstr ""
#. TRANS: OpenID plugin tooltip for logon menu item.
#: OpenIDPlugin.php:271
msgid "Login or register with OpenID."
msgstr ""
#. TRANS: OpenID plugin tooltip for user settings menu item.
#: OpenIDPlugin.php:307
msgid "Add or remove OpenIDs."
msgstr ""
#. TRANS: Page notice for logged in users to try and get them to add an OpenID account to their StatusNet account.
#. TRANS: This message contains Markdown links in the form (description)[link].
#: OpenIDPlugin.php:421
#, php-format
msgid ""
"(Have an [OpenID](http://openid.net/)? [Add an OpenID to your account]"
"(%%action.openidsettings%%)!"
msgstr ""
#. TRANS: Page notice for anonymous users to try and get them to register with an OpenID account.
#. TRANS: This message contains Markdown links in the form (description)[link].
#: OpenIDPlugin.php:426
#, php-format
msgid ""
"(Have an [OpenID](http://openid.net/)? Try our [OpenID registration]"
"(%%action.openidlogin%%)!)"
msgstr ""
#. TRANS: Page notice on the login page to try and get them to log on with an OpenID account.
#. TRANS: This message contains Markdown links in the form (description)[link].
#: OpenIDPlugin.php:434
#, php-format
msgid ""
"(Have an [OpenID](http://openid.net/)? Try our [OpenID login](%%action."
"openidlogin%%)!)"
msgstr ""
#. TRANS: Tooltip for OpenID configuration menu item.
#: OpenIDPlugin.php:561
msgid "OpenID configuration."
msgstr ""
#. TRANS: Plugin description.
#: OpenIDPlugin.php:607
msgid "Use <a href=\"http://openid.net/\">OpenID</a> to login to the site."
msgstr ""
#. TRANS: Field label.
#: OpenIDPlugin.php:642
msgid "OpenID provider"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -42,35 +42,6 @@ msgstr ""
msgid "Poll: %s"
msgstr ""
#. TRANS: Field label on the page to create a poll.
#: forms/newpoll.php:109
msgid "Question"
msgstr ""
#. TRANS: Field title on the page to create a poll.
#: forms/newpoll.php:112
msgid "What question are people answering?"
msgstr ""
#. TRANS: Field label for an answer option on the page to create a poll.
#. TRANS: %d is the option number.
#: forms/newpoll.php:134
#, php-format
msgid "Option %d"
msgstr ""
#. TRANS: Button text for saving a new poll.
#: forms/newpoll.php:163
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: Button text for submitting a poll response.
#: forms/pollresponse.php:126
msgctxt "BUTTON"
msgid "Submit"
msgstr ""
#. TRANS: Title for poll page.
#: actions/newpoll.php:64
msgid "New poll"
@@ -95,25 +66,6 @@ msgstr ""
msgid "Notice posted"
msgstr ""
#. TRANS: Page title for poll response.
#: actions/respondpoll.php:64
msgid "Poll response"
msgstr ""
#: actions/respondpoll.php:89
msgid "You must be logged in to respond to a poll."
msgstr ""
#. TRANS: Client exception thrown trying to respond to a non-existing poll.
#: actions/respondpoll.php:102
msgid "Invalid or missing poll."
msgstr ""
#. TRANS: Page title after sending a poll response.
#: actions/respondpoll.php:162
msgid "Poll results"
msgstr ""
#. TRANS: Client exception thrown trying to view a non-existing poll.
#: actions/showpoll.php:59
msgid "No such poll."
@@ -139,6 +91,25 @@ msgstr ""
msgid "Set your poll preferences"
msgstr ""
#. TRANS: Page title for poll response.
#: actions/respondpoll.php:64
msgid "Poll response"
msgstr ""
#: actions/respondpoll.php:89
msgid "You must be logged in to respond to a poll."
msgstr ""
#. TRANS: Client exception thrown trying to respond to a non-existing poll.
#: actions/respondpoll.php:102
msgid "Invalid or missing poll."
msgstr ""
#. TRANS: Page title after sending a poll response.
#: actions/respondpoll.php:162
msgid "Poll results"
msgstr ""
#. TRANS: Plugin description.
#: PollPlugin.php:132
msgid "Simple extension for supporting basic polls."
@@ -186,3 +157,32 @@ msgstr ""
#: PollPlugin.php:471
msgid "Poll data is missing"
msgstr ""
#. TRANS: Field label on the page to create a poll.
#: forms/newpoll.php:109
msgid "Question"
msgstr ""
#. TRANS: Field title on the page to create a poll.
#: forms/newpoll.php:112
msgid "What question are people answering?"
msgstr ""
#. TRANS: Field label for an answer option on the page to create a poll.
#. TRANS: %d is the option number.
#: forms/newpoll.php:134
#, php-format
msgid "Option %d"
msgstr ""
#. TRANS: Button text for saving a new poll.
#: forms/newpoll.php:163
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: Button text for submitting a poll response.
#: forms/pollresponse.php:126
msgctxt "BUTTON"
msgid "Submit"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,6 +18,36 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#. TRANS: Exception trown when getting a profile for a non-existing ID.
#. TRANS: %s is the provided profile ID.
#. TRANS: Exception thown when getting a profile with a non-existing ID.
#. TRANS: %s is the non-existing profile ID.
#: classes/QnA_Question.php:113 classes/QnA_Answer.php:151
#, php-format
msgid "No profile with ID %s"
msgstr ""
#. TRANS: Number of given answers to a question.
#. TRANS: %s is the number of given answers.
#: classes/QnA_Question.php:200
#, php-format
msgid "%s answer"
msgid_plural "%s answers"
msgstr[0] ""
msgstr[1] ""
#. TRANS: Notification that a question cannot be answered anymore because it is closed.
#: classes/QnA_Question.php:207
msgid "This question is closed."
msgstr ""
#. TRANS: Rendered version of the notice content creating a question.
#. TRANS: %s a link to the question as link description.
#: classes/QnA_Question.php:271
#, php-format
msgid "Question: %s"
msgstr ""
#. TRANS: Exception thown when getting a question with a non-existing ID.
#. TRANS: %s is the non-existing question ID.
#: classes/QnA_Answer.php:140
@@ -25,15 +55,6 @@ msgstr ""
msgid "No question with ID %s"
msgstr ""
#. TRANS: Exception thown when getting a profile with a non-existing ID.
#. TRANS: %s is the non-existing profile ID.
#. TRANS: Exception trown when getting a profile for a non-existing ID.
#. TRANS: %s is the provided profile ID.
#: classes/QnA_Answer.php:151 classes/QnA_Question.php:113
#, php-format
msgid "No profile with ID %s"
msgstr ""
#. TRANS: %s is the number of answer revisions.
#: classes/QnA_Answer.php:196
#, php-format
@@ -59,110 +80,6 @@ msgstr ""
msgid "answered \"%s\""
msgstr ""
#. TRANS: Number of given answers to a question.
#. TRANS: %s is the number of given answers.
#: classes/QnA_Question.php:200
#, php-format
msgid "%s answer"
msgid_plural "%s answers"
msgstr[0] ""
msgstr[1] ""
#. TRANS: Notification that a question cannot be answered anymore because it is closed.
#: classes/QnA_Question.php:207
msgid "This question is closed."
msgstr ""
#. TRANS: Rendered version of the notice content creating a question.
#. TRANS: %s a link to the question as link description.
#: classes/QnA_Question.php:271
#, php-format
msgid "Question: %s"
msgstr ""
#. TRANS: Form legend for revising the answer.
#: forms/qnashowquestion.php:106
msgctxt "LEGEND"
msgid "Question"
msgstr ""
#. TRANS: Button text for closing a question.
#: forms/qnashowquestion.php:151
msgctxt "BUTTON"
msgid "Close"
msgstr ""
#. TRANS: Title for button text for closing a question.
#: forms/qnashowquestion.php:155
msgid "Close the question to no one can answer it anymore."
msgstr ""
#. TRANS: Form legend for showing the answer.
#. TRANS: Page title for and answer to a question.
#. TRANS: Page title after sending an answer.
#: forms/qnashowanswer.php:113 actions/qnanewanswer.php:62
#: actions/qnavote.php:63 actions/qnareviseanswer.php:190
#: actions/qnareviseanswer.php:226
msgid "Answer"
msgstr ""
#. TRANS: Button text for marking an answer as "best".
#: forms/qnashowanswer.php:150
msgctxt "BUTTON"
msgid "Best"
msgstr ""
#. TRANS: Title for button text marking an answer as "best".
#: forms/qnashowanswer.php:154
msgid "Mark this answer as the best answer."
msgstr ""
#. TRANS: Field label.
#: forms/qnanewanswer.php:114
msgid "Enter your answer"
msgstr ""
#. TRANS: Button text for submitting a poll response.
#: forms/qnanewanswer.php:125
msgctxt "BUTTON"
msgid "Answer"
msgstr ""
#. TRANS: Button text for submitting a poll response.
#. TRANS: Button text for submitting a revised answer.
#: forms/qnavote.php:118 forms/qnareviseanswer.php:119
msgctxt "BUTTON"
msgid "Submit"
msgstr ""
#. TRANS: Field label for a new question.
#: forms/qnanewquestion.php:110
msgctxt "LABEL"
msgid "Title"
msgstr ""
#. TRANS: Field title for a new question.
#: forms/qnanewquestion.php:113
msgid "The title of your question."
msgstr ""
#. TRANS: Field label for question details.
#: forms/qnanewquestion.php:122
msgctxt "LABEL"
msgid "Description"
msgstr ""
#. TRANS: Field title for question details.
#: forms/qnanewquestion.php:125
msgid "Your question in detail."
msgstr ""
#. TRANS: Button text for saving a new question.
#: forms/qnanewquestion.php:149
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: Exception thrown when performing an unexpected action on a question.
#. TRANS: %s is the unpexpected object type.
#: lib/qnalistitem.php:67
@@ -181,6 +98,70 @@ msgstr ""
msgid "Answer data is missing."
msgstr ""
#. TRANS: Title for Question page.
#: actions/qnanewquestion.php:62
msgid "New question"
msgstr ""
#. TRANS: Client exception thrown trying to create a Question while not logged in.
#: actions/qnanewquestion.php:82
msgid "You must be logged in to post a question."
msgstr ""
#. TRANS: Client exception thrown trying to create a question without a title.
#: actions/qnanewquestion.php:128
msgid "Question must have a title."
msgstr ""
#. TRANS: Page title after sending a notice.
#: actions/qnanewquestion.php:153
msgid "Question posted"
msgstr ""
#. TRANS: Page title for revising a question
#: actions/qnareviseanswer.php:51
msgid "Revise answer"
msgstr ""
#. TRANS: Client exception thrown trying to answer a question while not logged in.
#: actions/qnareviseanswer.php:74 actions/qnavote.php:85
#: actions/qnanewanswer.php:85
msgid "You must be logged in to answer to a question."
msgstr ""
#. TRANS: Client exception thrown trying to respond to a non-existing question.
#: actions/qnareviseanswer.php:87
msgid "Invalid or missing answer."
msgstr ""
#. TRANS: Form title for sending an answer.
#: actions/qnareviseanswer.php:151
msgctxt "TITLE"
msgid "Answer"
msgstr ""
#. TRANS: Page title after sending an answer.
#. TRANS: Page title for and answer to a question.
#. TRANS: Form legend for showing the answer.
#: actions/qnareviseanswer.php:190 actions/qnareviseanswer.php:226
#: actions/qnavote.php:63 actions/qnanewanswer.php:62
#: forms/qnashowanswer.php:113
msgid "Answer"
msgstr ""
#. TRANS: Client exception thrown trying to respond to a non-existing question.
#: actions/qnavote.php:97 actions/qnaclosequestion.php:88
#: actions/qnanewanswer.php:101
msgid "Invalid or missing question."
msgstr ""
#. TRANS: Page title after sending in a vote for a question or answer.
#. TRANS: Page title after sending an answer.
#: actions/qnavote.php:147 actions/qnaclosequestion.php:140
#: actions/qnanewanswer.php:156
msgid "Answers"
msgstr ""
#. TRANS: Client exception thrown trying to view a non-existing question.
#: actions/qnashowquestion.php:70
msgid "No such question."
@@ -228,73 +209,6 @@ msgstr ""
msgid "%1$s's answer to \"%2$s\""
msgstr ""
#. TRANS: Client exception thrown trying to answer a question while not logged in.
#: actions/qnanewanswer.php:85 actions/qnavote.php:85
#: actions/qnareviseanswer.php:74
msgid "You must be logged in to answer to a question."
msgstr ""
#. TRANS: Client exception thrown trying to respond to a non-existing question.
#: actions/qnanewanswer.php:101 actions/qnavote.php:97
#: actions/qnaclosequestion.php:88
msgid "Invalid or missing question."
msgstr ""
#. TRANS: Page title after sending an answer.
#. TRANS: Page title after sending in a vote for a question or answer.
#. TRANS: Page title after sending an answer.
#: actions/qnanewanswer.php:156 actions/qnavote.php:147
#: actions/qnaclosequestion.php:140
msgid "Answers"
msgstr ""
#. TRANS: Page title after an AJAX error occurs on the post answer page.
#: actions/qnanewanswer.php:207
msgid "Ajax Error"
msgstr ""
#. TRANS: Title for form to send answer to a question.
#: actions/qnanewanswer.php:230
msgctxt "TITLE"
msgid "Your answer"
msgstr ""
#. TRANS: Page title for revising a question
#: actions/qnareviseanswer.php:51
msgid "Revise answer"
msgstr ""
#. TRANS: Client exception thrown trying to respond to a non-existing question.
#: actions/qnareviseanswer.php:87
msgid "Invalid or missing answer."
msgstr ""
#. TRANS: Form title for sending an answer.
#: actions/qnareviseanswer.php:151
msgctxt "TITLE"
msgid "Answer"
msgstr ""
#. TRANS: Title for Question page.
#: actions/qnanewquestion.php:62
msgid "New question"
msgstr ""
#. TRANS: Client exception thrown trying to create a Question while not logged in.
#: actions/qnanewquestion.php:82
msgid "You must be logged in to post a question."
msgstr ""
#. TRANS: Client exception thrown trying to create a question without a title.
#: actions/qnanewquestion.php:128
msgid "Question must have a title."
msgstr ""
#. TRANS: Page title after sending a notice.
#: actions/qnanewquestion.php:153
msgid "Question posted"
msgstr ""
#. TRANS: Page title for close a question
#: actions/qnaclosequestion.php:52
msgid "Close question"
@@ -310,6 +224,91 @@ msgstr ""
msgid "You did not ask this question."
msgstr ""
#. TRANS: Page title after an AJAX error occurs on the post answer page.
#: actions/qnanewanswer.php:207
msgid "Ajax Error"
msgstr ""
#. TRANS: Title for form to send answer to a question.
#: actions/qnanewanswer.php:230
msgctxt "TITLE"
msgid "Your answer"
msgstr ""
#. TRANS: Field label for a new question.
#: forms/qnanewquestion.php:110
msgctxt "LABEL"
msgid "Title"
msgstr ""
#. TRANS: Field title for a new question.
#: forms/qnanewquestion.php:113
msgid "The title of your question."
msgstr ""
#. TRANS: Field label for question details.
#: forms/qnanewquestion.php:122
msgctxt "LABEL"
msgid "Description"
msgstr ""
#. TRANS: Field title for question details.
#: forms/qnanewquestion.php:125
msgid "Your question in detail."
msgstr ""
#. TRANS: Button text for saving a new question.
#: forms/qnanewquestion.php:149
msgctxt "BUTTON"
msgid "Save"
msgstr ""
#. TRANS: Button text for submitting a revised answer.
#. TRANS: Button text for submitting a poll response.
#: forms/qnareviseanswer.php:119 forms/qnavote.php:118
msgctxt "BUTTON"
msgid "Submit"
msgstr ""
#. TRANS: Form legend for revising the answer.
#: forms/qnashowquestion.php:106
msgctxt "LEGEND"
msgid "Question"
msgstr ""
#. TRANS: Button text for closing a question.
#: forms/qnashowquestion.php:151
msgctxt "BUTTON"
msgid "Close"
msgstr ""
#. TRANS: Title for button text for closing a question.
#: forms/qnashowquestion.php:155
msgid "Close the question to no one can answer it anymore."
msgstr ""
#. TRANS: Button text for marking an answer as "best".
#: forms/qnashowanswer.php:150
msgctxt "BUTTON"
msgid "Best"
msgstr ""
#. TRANS: Title for button text marking an answer as "best".
#: forms/qnashowanswer.php:154
msgid "Mark this answer as the best answer."
msgstr ""
#. TRANS: Field label.
#: forms/qnanewanswer.php:114
msgid "Enter your answer"
msgstr ""
#. TRANS: Button text for submitting a poll response.
#: forms/qnanewanswer.php:125
msgctxt "BUTTON"
msgid "Answer"
msgstr ""
#. TRANS: Plugin description.
#: QnAPlugin.php:130
msgid "Question and Answers micro-app."

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-04 01:05+0100\n"
"POT-Creation-Date: 2021-07-18 12:38+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,73 +17,71 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: Form validation error displayed when a URL parameter is missing.
#: actions/loggingaggregator.php:86
msgid "A URL parameter is required."
msgstr ""
#. TRANS: Form validation error displayed when HTTP GET is not used.
#: actions/loggingaggregator.php:94
msgid "This resource requires an HTTP GET."
msgstr ""
#. TRANS: Form validation error displayed when HTTP POST is not used.
#: actions/loggingaggregator.php:104
msgid "This resource requires an HTTP POST."
msgstr ""
#. TRANS: Form validation error displayed when POST is not used.
#: actions/rsscloudrequestnotify.php:91
#: actions/rsscloudrequestnotify.php:84
msgid "Request must be POST."
msgstr ""
#. TRANS: Form validation error displayed when HTTP POST is not used.
#: actions/rsscloudrequestnotify.php:109
#: actions/rsscloudrequestnotify.php:102
msgid "Only HTTP POST notifications are supported at this time."
msgstr ""
#. TRANS: List separator.
#: actions/rsscloudrequestnotify.php:120
#: actions/rsscloudrequestnotify.php:113
msgctxt "SEPARATOR"
msgid ", "
msgstr ""
#. TRANS: Form validation error displayed when a request body is missing expected parameters.
#. TRANS: %s is a list of parameters separated by a list separator (default: ", ").
#: actions/rsscloudrequestnotify.php:123
#: actions/rsscloudrequestnotify.php:117
#, php-format
msgid "The following parameters were missing from the request body: %s."
msgstr ""
#. TRANS: Form validation error displayed when not providing any valid profile feed URLs.
#: actions/rsscloudrequestnotify.php:130
#: actions/rsscloudrequestnotify.php:126
msgid ""
"You must provide at least one valid profile feed URL (url1, url2, url3 ... "
"urlN)."
msgstr ""
#. TRANS: Form validation error displayed when not providing a valid feed URL.
#: actions/rsscloudrequestnotify.php:146
#: actions/rsscloudrequestnotify.php:144
msgid "Feed subscription failed: Not a valid feed."
msgstr ""
#. TRANS: Form validation error displayed when feed subscription failed.
#: actions/rsscloudrequestnotify.php:153
#: actions/rsscloudrequestnotify.php:151
msgid ""
"Feed subscription failed: Notification handler does not respond correctly."
msgstr ""
#. TRANS: Success message after subscribing to one or more feeds.
#: actions/rsscloudrequestnotify.php:168
#: actions/rsscloudrequestnotify.php:166
msgid ""
"Thanks for the subscription. When the feed(s) update(s), you will be "
"notified."
msgstr ""
#. TRANS: Plugin description.
#: RSSCloudPlugin.php:209
msgid ""
"The RSSCloud plugin enables your StatusNet instance to publish real-time "
"updates for profile RSS feeds using the <a href=\"http://rsscloud.org/"
"\">RSSCloud protocol</a>."
#. TRANS: Form validation error displayed when a URL parameter is missing.
#: actions/loggingaggregator.php:80
msgid "A URL parameter is required."
msgstr ""
#. TRANS: Form validation error displayed when HTTP GET is not used.
#: actions/loggingaggregator.php:88
msgid "This resource requires an HTTP GET."
msgstr ""
#. TRANS: Form validation error displayed when HTTP POST is not used.
#: actions/loggingaggregator.php:98
msgid "This resource requires an HTTP POST."
msgstr ""
#. TRANS: Plugin description.
#: RSSCloudPlugin.php:223
msgid ""
"The RSSCloud plugin enables your GNU social instance to publish real-time "
"updates for profile RSS feeds using the <a href=\"http://rsscloud.co/"
"\">rssCloud protocol</a>."
msgstr ""

Some files were not shown because too many files have changed in this diff Show More