Commit graph

151 commits

Author SHA1 Message Date
Konstantin Obenland
00a57c39a4
PHPCS: Enable Commenting sniff (#925)
* PHPCS: Enable Commenting sniff

* Apply suggestions from code review

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>

* Fix param alignment.

---------

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>
2024-10-07 13:25:51 +02:00
Konstantin Obenland
a2e7729d4d
PHPCS: Enable NoReservedKeywordParameterNames sniff (#909)
* PHPCS: Enable NoReservedKeywordParameterNames sniff

* Fix parameter doc

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>

* Rename to $data since the type is ambiguous

Props @pfefferle.

* Name it $uri for consistency

Props @pfefferle.

---------

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>
2024-10-03 10:19:06 -05:00
Konstantin Obenland
f40905dd85
PHPCS: Enable GetMetaSingle sniff (#907) 2024-09-30 12:06:59 +02:00
Konstantin Obenland
91a3799a4d
PHPCS: Enable NotPrepared check (#906) 2024-09-29 16:12:31 -05:00
Konstantin Obenland
2b5f635ba3
Suggestion: Adopt WordPress PHP Coding Standards (#905)
* Update phpcs rules

* Automated style updates

* Silence all other Warnings and Errors

We'll fix them in follow ups.
2024-09-28 12:53:21 -05:00
Matt Wiebe
de85cca894
Content warnings! (#900)
* Allow content warning

* build files

* added missing namespace

* fix tests

* actors does not support sensitive (yet).

* Update includes/functions.php

* added `sanitize_callback`

---------

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>
2024-09-25 17:22:51 +02:00
Matthias Pfefferle
b913400895 fix issue that federated comments will not be threaded properly 2024-09-17 11:22:22 +02:00
Matthias Pfefferle
2729f2f0e1
It seems that Mastodon has issues with HTML in summaries (#893)
Fixes: https://github.com/mastodon/mastodon/issues/28455

Until this is merged: https://github.com/mastodon/mastodon/pull/28629
2024-09-15 09:58:27 +02:00
Matthias Pfefferle
7da5bc66ae fix nodeinfo endpoint 2024-09-09 13:34:33 +02:00
Jan Boddez
dabff80cc2
Add like handler (#804)
* Update class-comment.php

* Initial attempt

* Register like handler

* Add support for undoing likes

* add support for announce

and copied basic comment_type support handling from the Webmention plugin

* fix merge issues

* remove C&P issues

* add missing phpdoc

* Disable Announces and Likes by default.

* set ACTIVITYPUB_DISABLE_REACTIONS to false

* refactorings

* fix escaping

* add default object type

* deduplicate code

---------

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>
2024-08-16 12:55:16 +02:00
Matthias Pfefferle
7806285d88
Support "read more" for Activity-Summary (#856)
* Support "read more" for Activity-Summary

* add support for excerpt

* use the same function also for the shortcode

* add mentions, hashtags and links support to `the_excerpt`

* do not make unnecessary extra db calls

* fall back to default if options is empty

* remove unused hook

* some fixes

and improvements based on the feedback of @MatzeKitt

* add phpdoc

* also extract hashtags from excerpt

* use filter, so that it is possible to also support mentions

and maybe tags in the future

* Add PHPDoc

* simplify code

* fix test
2024-08-16 12:53:14 +02:00
Daniel Hüsken
2ac7676359
Replace hashtags, urls and mentions in summary with links (#849)
* replace hashtags, mentions and ulrs in summary

* move faq stuff and auto generate markdown version with grunt

* I would rename it the class to `Link` because it's about linking not about URLs

* fix auto generated readme

* let use not converted links in extra fields our link generation

* consistency

* find new function name, because it is not purely about links

* make `rel` directly filterable to be more flexible in the future

* remove some whitespaces

* it is not needed to check for a link inside a link

* not convert extra field links with additional text

* not convert extra field links with additional text

* simplified code

---------

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>
2024-08-14 15:41:42 +02:00
Matt Wiebe
08106890a3
Add Blog extra fields (#838)
Imitate User Extra Fields, and consolidate into an `ExtraFields` class

---------

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>
2024-08-09 09:40:35 -05:00
Daniel Hüsken
d6095d0943
Add menu_order to ap_extrafield so that user can decide in with order they will be displayed (#827)
Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>
2024-08-01 11:44:22 +02:00
Matthias Pfefferle
7f2e3754c9 phpcs improvements 2024-07-26 10:26:47 +02:00
Matthias Pfefferle
b240589e78
Add "reply context" support (#819)
* add basic reply context support

* UX improvements

* remove unused style file

* built

* Add bookmarklet!

* add build

* small UX tweaks

* add toolbox box

* improved text

* optimized block filter

* add in-reply-to to activity

* refactor to add inboxes using filters

and retrieve/add inboxes of `in-reply-to` links

* renamings

* plugins do not like slashed IDs

* rename to match new get param

---------

Co-authored-by: Matt Wiebe <wiebe@automattic.com>
2024-07-24 23:44:01 +02:00
Matthias Pfefferle
d2260639b3
Add extra fields (#762)
* add extra fields settings

* add settings

* add settings link

* allow users to only edit their extra fields

* use nopaging instead of posts_per_page

thanks @mattwiebe

* load filters only on admin page and remove the view actions

* author should not be editable

* some improvements and extra informations

* description

* use nopaging instead

* add blog url

* formatting

* formatting

* some cosmetics

* return attachments

* formatting

* formatting

* add default extra fields

* remove unused migration

* better defaults handling

* use a filter to be able to unhook/replace default extra fields

* should fix #810

---------

Co-authored-by: Matt Wiebe <wiebe@automattic.com>
2024-07-15 18:03:40 +02:00
Matthias Pfefferle
5f595c6354
Support Drafts! (#780)
* init

* remove images, text and summary if post is converted to draft

* remove debug infos
2024-07-02 11:00:42 +02:00
Matthias Pfefferle
06b6cd467c
Add follower count to "At a Glance" dashboard widget (#774)
* add follower count to "At a glance" dashboard widget

* add `number_format_i18n` function

* add decimal_point support

and load only on dashboard

* Update includes/class-admin.php

Co-authored-by: Jeremy Herve <jeremy@jeremy.hu>

* Update includes/class-admin.php

Co-authored-by: Jeremy Herve <jeremy@jeremy.hu>

* Update includes/class-admin.php

Co-authored-by: Alex Kirk <akirk@users.noreply.github.com>

* added changes suggested by @jeherve

* add `get_plugin_version()` to all enqueues

---------

Co-authored-by: Jeremy Herve <jeremy@jeremy.hu>
Co-authored-by: Alex Kirk <akirk@users.noreply.github.com>
2024-06-04 15:22:20 +02:00
Matthias Pfefferle
8e7935f992
Add podcast support (#754)
* generic enclosure support

* prioritise media!

* prioritise media

* get_enclosures function

* remove unneeded check!

* some improvements

* formatting

---------

Co-authored-by: Matt Wiebe <wiebe@automattic.com>
2024-06-01 11:12:42 +02:00
Matt Wiebe
8bf37f78ef
Prevent infinite loops in get_comment_ancestors (#758) 2024-05-10 10:18:22 -05:00
Matt Wiebe
9e57681701
Only send Mentions to comments in the direct hierarchy (#740)
* add generic get_comment_ancestors function

---------

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>
2024-05-03 12:42:07 -05:00
Matt Wiebe
d173690d7b
Generate comment IDs for federation from home_url (#739)
* Generate comment IDs for federation from `home_url`

`site_url` is used for the WP install, not for the frontend URLs

* fix other `site_url` uses
2024-04-25 14:32:51 +02:00
Matthias Pfefferle
d94d064acb fix #734 2024-04-23 08:47:35 +02:00
Matthias Pfefferle
be3f754a25
mask version number (#719) 2024-04-05 15:49:38 -05:00
Matthias Pfefferle
79f400d88a
Improve User management (#703)
* Use an ActivityPub capability to better enable/disable ActivityPub support

* split PRs

* remove test hook

* do not run migrations for new installs

* fix unit tests

* fix unit tests

* remove abandoned schedule!

* fix migration class

* fix order

* restructuring

* remove follower migration

* do not yet remove legacy followers

* remove blog-user changes

* use a const for the version number

* add user tests and fix old ones

* use a more generic async migrator

* optimized test
2024-03-11 15:19:07 +01:00
Matthias Pfefferle
3b21061c49
re-add vary header (#683)
* re-add vary header

fixes #580

* add Const to enable/disable `Vary` header

* lets start with default "off"
2024-02-12 11:09:16 +01:00
Matthias Pfefferle
98824d3a08 tweak federation state a bit 2024-02-07 17:54:48 +01:00
Matthias Pfefferle
1fc6869576
improve federated comments (#645)
* fix some times broken reply context

* revert changes

* add a filter to finally verify if an activity should be send or not

* better local comment handling

do not federate local only comments (fix #652) and hide "reply" link for federated comments

* show JSON only for comments that should be federated!

* fix parent_comment handling

* show external id if exists

* disable "edit comments" for federated comments

* some more doc

* added tests

* fix #658

* allow custom reply link!

* some restructurings

* this will be only a minor release

* version bump

* mark WordPress object as federated

* fix content filter issue!

fixes https://wordpress.org/support/topic/yasr-ratings-appear-on-comments-on-mastodon/

* add custom filter

thanks @janboddez for the idea https://github.com/Automattic/wordpress-activitypub/pull/645#issuecomment-1898820529

* optimize code a bit

* consts to enable/disable incoming/outgoing interactions

see https://wordpress.org/support/topic/how-to-suppress-user-comments-from-feed/

* rename state

* cleanup federation check

* fix markdown

* better handling of Create/Update/Delete

* update check
2024-02-01 11:17:03 +01:00
Matthias Pfefferle
c3c987a765
improve the settings screen (#681) 2024-01-30 21:29:09 +01:00
André Menrath
174262d22c
Add/event objects (#629)
* remove redundant property definitions

* Add redused context for actors.

* Add classes to construct Moblizon compatible events

* Bind the context to the activitypub object
- change the propertyname  which stores the json-ld context from context to _context, because context is already reserved in the ActivityStreams vocabulary.
- cleanup currently unused code

* fix phpcs

* Remove PostalAddress object: it's enough (at least atm) to directly write the array in transformers.

* Remove _context property from ActivityPub objects in favour of getter function get_json_ld_context()

* fix unit tests: ActivityPub Activity objects have a custom getter for the JsonLD context

* fix phpcs

* fix unit-tests to also support php5.6

* fix phpcs

* add param include_json_ld_context to to_array function
This allows to not set the @context in the resulting array.

* propagate the param include_json_ld_context to nested calls of to_array.

* fix phpcs

* Nested AcitivityPub objects: never build context in inner items in to_array function

* fix: param of set_address may also be an array

* fix typo in comment

* always prefix json-ld context with json-ld and move event class to sub-namespace

* fix usage of reserved object keyword
seems it should not be used as a namespace either

* Merge commit 'b2271cda6b857f879e0abd4f3c6683642d725267' into add/event-objects

* Fix calling non-static function as static

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>

* Partly fix Json-LD contexts in collections

* Update includes/activity/class-base-object.php

* this is implicit

We already set the correct user with `$transformer->change_wp_user_id( $user_id );` so the Actor will be generated properly. We can change the behaviour, but we should not use both.

* this change prevents the Activity to re-use Object vars

this should stay as is, because it pre-fills the Activity with data (for example cc and to) and it will no longer be done with your change.

It is on purpose that it first sets the object and then replaces it with the URI.

See: https://github.com/Automattic/wordpress-activitypub/blob/master/includes/activity/class-activity.php#L195

* add `$include_json_ld_context` support to `to_json`

* disable some more contexts

* remove whitespace

* Add php-comment for 7ed17c042a

* Fix JSON-LD context for ActivityPub objects: child classes may override it.

* coding standards

* call folder/namespace `Extended_Object`

 to be consistent with folder names in singular

* fix: unnessesary nesting of extended-objects

* remove license

I hope this is fine, to have the complete plugin under the MIT @Menrath ?!?

---------

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>
2024-01-18 16:35:52 +01:00
Matthias Pfefferle
b744dc551d
Comment Federation (#550)
* Comments 1

* Delete FUNDING.yml

* Add basic BuddyPress support

fix #122

thanks and props @skysarwer

* change URL to `bp_core_get_user_domain`

* fix "Follow" issue

fix #133

* fix #135

* version bump

* Create phpunit.yml

* Update composer.json

* Update composer.json

* Update phpunit.yml

* Update composer.json

* Create phpcs.yml

* Update phpcs.xml

* Update composer.json

* phpcs fixes

* fix typo

* Comments update

* webfinger_extract remove extra param

* coding standards

* Replies Collection, settings, other fixes

* Create stale.yml

* move stale file

* code standards cleanup

* Migrate / Update script

* bugfix

* add settings link to plugin page

* fix code standards

* fix cs

* fix PHPCS

* PHPCS fixes

* change background image for wp.org

* fix docker

* fix webfinger for email identifiers

fix #152

* version bump

* update composer file to fix unit testing

* allow plugins

* fix dependencies

* Migrate tools

* code cleanup

* regression fix

* Fix announce, clarified language

* update included filename

* code cleanup

* Improve migration UX

* Add comments view, warnings to migrate page

* style fix

* more style fixes

* Fix send_delete_activity

* replace ap_comment_id to reuse  replytocom var

* Comments class missing attributes

* Post class fix attributes

* move js file to assets/js

* Separate file for Comment processing hooks

* fix file path

* associate comments to back compat post

* Fix js assets enqueue

* change regex matching potential hashtags

Matches any string starting with '#' and consisting of any number and combination of [A-Za-z0-9_] that is directly followed by whitespace or punctuation. Groups everything after '#' for access in functions using this regex.

This fixes #183 (incomplete links on hashtags containing special characters) by not matching these at all.

* also detect hashtags at the start of a paragraph

* restrict html tags after which to detect a hashtag

Hashtags should not be detected after just any html tag - for example not after an opening a or div. To still allow detection at the start of a line, allow specifically p and br to directly precede a hashtag.

* fix pagination

* Add Custom Post Type support to outbox API

* remove comment_type

* fix comparison

* remove trailing spaces

* fix phpcs issues

* fix phpcs issues

* run phpcs also on pull_requests

* fix phpcs issues

* support threaded comments from ActivityPub

* refactor support for threaded comments from ActivityPub

* remove debugging log line

* add first unit tests for class inbox

* fix code smells

* make filter function static

* attempt to resolve backwards compatibility issues

* update js to new file

* delete old js

* Remove migrate code

* update post meta canonical

* remove type and mention meta from comment filters

* extract mentions from comment_content

* phpcbf

* remove extra curly bracket

* Remove migrate code

* remove version_check()

* Update enqueue scripts

* Remove remote comments from preprocessing

* Reply to comments from Dashboard

* rename function, inserts users into reply text

* Update dispatch comments

* update comment model

* fix comment model replies property

* fix preprocess_comment cap check

* Add webfinger filter to comments

* Add comment edit datetime

* cleanup

* fix var name

* cleanup

* phpcbf

* better actual translation support

* Separate comment reply script

* migrate dispatch, migrate comment model to transform

* ignore WP_Comment type for now

* Adds new helpers for resolving inReplyTo url

* Update activitypub_send_comment_activity to include type

* remove redundant id check

* reinclude user_id in saved ap_object meta

* update post field meta

* Fix comment updated datetime

* front-end reply inserts @mentions

* enqueue reply script on front end

* use const instead of dirname

* some simplifications

* move some functions

* fixes

* some more fixes

* fix namespace

* fix unittests

* fix testcase

* fixed typo

* fix tests

* fix tests

* fix PHPCS

* move functions to transformer class

* fix warnings

* Link remote comments on frontend

* Link to comment source as row action

* Init Comments class

* remove dead dispatch action

* re-add extract mentions filter

* Restore and tweak Comment transform

* Schedule comments activities for non-admin users

* lint

* remove context property

* rename get_id method to generate_id

* fix locale

* move functions

* PHPDoc

* this is never used

* remove some edit methods

* remove replies for now

* remove JS calls

* remove reply_recipients

* never used

* remove other query-vars

* otherwise to_json would not work properly

* small changes

* use `c` for comment IDs

* remove comments.php for now

maybe re-add it later

* wp_insert_post is an action

* also parse comment_text

* remove duplicate functions

* add Base transformer

* remove invalid test

* update to new query var

* update dispatcher to support comments and posts

* fix transition

* remove unused functions for now

* schedule_comment_activity seems to ignore create and update

* fix wrong use of functions!

* not every platforms sends an URL

* check source-id first

* remove hashtags for now

* fallback to ID

* fix typo

* move to_activity to Base class

* remove unused function

* add support for announce and like

* also ping inboxes of other commenters in the thread

* restructure WebFinger class

* some small improvements

* simplified to_object class

props @Menrath for the feedback and the idea!

* fix unit tests

* make transformer filterable

/cc @Menrath

* use transformer factory, so that transformer can be overwritten

* phpcs fixes

* fix attachments

* fix comment transformer

* remove comments for now

* update readme/changelog

* simplify and unify json_encodes

---------

Co-authored-by: Django Doucet <mediaformat.ux@gmail.com>
Co-authored-by: Andreas <andreas@bocops.de>
Co-authored-by: Eana Hufwe <eana@1a23.com>
Co-authored-by: Matthew Exon <git.mexon@spamgourmet.com>
Co-authored-by: Django Doucet <django.doucet@webdevstudios.com>
2023-12-22 10:12:26 +01:00
Matthias Pfefferle
93b2f1ee7d
Normalize attributes that can have mixed value types (#586)
* fix #571

* support empty values

* fix phpcs issues

* test for `null`

* use `object_to_uri`  on followers list
2023-12-05 18:59:00 +01:00
Matthias Pfefferle
6e7f82bf42
Activity-Type based handlers (#551)
* init

* save source id

* fix delete and add improve undo

* test new functions

* add support for threaded comments

* some formatting

* check if URL is no longer available

...and returns either status 410 or 404.

* improve delete handler

* improve update handler

* `object` and `actor` are already required by the inbox endpoint

* fix typo

* simplify queries

* cosmetics

* fix unit tests

* schedule delete comments of deleted actor (#575)

* schedule delete comments of deleted actor

* phpcs

---------

Co-authored-by: Django Doucet <django.doucet@webdevstudios.com>

* move `get_comments_by_actor` to interactions collection

* consistent wording

* implement Tombstone

* fix follow issue

* fix inbox-create

* added missing namespace

* check if field is set

* Fix namespacing issue

* update profile and update interaction

* fields are already validated by inbox

* optimize avatar handling

---------

Co-authored-by: Django <mediaformat.ux@gmail.com>
Co-authored-by: Django Doucet <django.doucet@webdevstudios.com>
2023-11-30 11:43:48 +01:00
Matthias Pfefferle
8849e7b446
Check if the current post type supports ActivityPub. (#570)
* Check if the current post type supports ActivityPub.

* Update includes/functions.php

Co-authored-by: Jeremy Herve <jeremy@jeremy.hu>

* Update functions.php

---------

Co-authored-by: Jeremy Herve <jeremy@jeremy.hu>
2023-11-23 18:00:40 +01:00
Matthias Pfefferle
26d0d357c2
Add monthly active users (#530)
* Add monthly active users for better stats on FediDB

* use more optimized query

thanks @mattwiebe

* use transients, improve logic

---------

Co-authored-by: Matt Wiebe <wiebe@automattic.com>
2023-11-07 10:27:20 +01:00
Matthias Pfefferle
8078512b8c small improvements 2023-10-24 14:54:03 +02:00
Matthias Pfefferle
a40bd8408a
Various improvements (#527)
* remove unused code

* check if `$data['object']` is a sting

* do not index application user

* this fixes GoToSocial errors

* do not cache errors

* re-added the fragment

See https://github.com/superseriousbusiness/gotosocial/issues/2280

* Fix coding standards

* do not verify signature on head request
2023-10-21 11:23:05 +02:00
Matthias Pfefferle
7d96f67cb2
increase timeout (#518)
because of several issues

fix #514
2023-10-16 19:04:21 +02:00
Matthias Pfefferle
1ff8bac25a
add filter to check if blog is public (#504) 2023-10-12 15:52:11 +02:00
Matthias Pfefferle
cbb5570a1b
add backward compatibility support (#489) 2023-10-10 08:12:15 +02:00
Matthias Pfefferle
9466048bfb
do not show block for WP versions below 5.9 (#484)
* do not show block for WP versions below 5.9

* oops, wrong operator
2023-10-04 08:32:21 +02:00
Matthias Pfefferle
20d15bc95d
fix is_single_user (#474) 2023-09-26 21:04:51 +02:00
Matthias Pfefferle
addd7dd8a1
better handling when data is missing (#444)
* better handling when data is missing

* WP_Error: add translation key and status

* do not use cache for cleanup and update

* better queries
2023-09-21 16:26:17 +02:00
Matthias Pfefferle
0763316009
add status message if it might be returned by API (#448) 2023-09-21 09:03:24 +02:00
Jeremy Herve
fe07d5eb32
Blocks: short-circuit early on sites that do not support blocks (#431)
* Blocks: short-circuit early on sites that do not support blocks

Fixes #430

This is typically only the case for sites using a custom version of WordPress, like ClassicPress.

* let grunt build the markdown

* Check for block support earlier and add filter

One can now deactivate the blocks registered by ActivityPub like so:

```
add_filter( 'activitypub_site_supports_blocks', '__return_false' );
```

* Fix readme (gotta remember to use grunt)

* alias function

---------

Co-authored-by: Matthias Pfefferle <pfefferle@users.noreply.github.com>
2023-09-15 10:38:47 +02:00
Matthias Pfefferle
8dcbe0c6fd
fix Secops issues (#411) 2023-09-05 21:03:25 +02:00
Matthias Pfefferle
bc7e173fe0 also allow JSON 2023-08-11 09:22:46 +02:00
Matthias Pfefferle
049046be70
update endpoints (#390)
* add collection endpoint

* show featured posts

* more consistant wording

* backwards compatibility with php7.x

* compatibility with php5.6

* use ACTIVITYPUB_AUTHORIZED_FETCH instead

because the ACTIVITYPUB_SECURE_MODE could be misinterpreted with disabling the security mechanisms completely.

* the blog user follows all authors of a blog

if not in single_user mode

* phpdoc

* adding changes based on feedback from @jeherve

* global namespace

* better hashtag handling

should also fix #373 #239

thanks @jeherve for help and feedback!

* fix workflow
2023-08-09 13:07:30 +02:00
Matthias Pfefferle
dd1c0a3bb5
Merge pull request #365 from Automattic/fix/cleanup 2023-07-20 23:30:39 +02:00