Fixed various bugs
Some important concepts to bear in mind:
* Notification: Associated with activities, won't be reconstructed
together with objects, can be thought of as transient
* Attention: Associated with objects, will be reconstructed with them, can
be thought as persistent
* Notifications and Attentions have no direct implications.
* Mentions are a specific form of attentions in notes, leads to the creation of Attentions.
Finally,
Potential PHP issue detected and reported: https://github.com/php/php-src/issues/8199
`static::method()` from a non static context (such as a class method) calls `__call`, rather than
the expected `__callStatic`. Can be fixed by using `(static fn() => static::method())()`, but the
usage of the magic method is strictly unnecessary in this case.
- Replies ordering now correct
- Replies count added
- Posting adds new replies to cache (when concerning replies cache is not empty) and increments replies count
- Configuration to specify number of in-tree replies shown added
- TreeNotes templates was moved from core to plugin
- Button to read more replies was added
This little abstraction layer made it a bit easier to add a different title to a Note or Actor Feed Collection template, from whichever controller that uses it. Please, bear in mind, that abstract templates such as those found in Components\Collection, may act in a very 'declarative' way upon using them. This makes it difficult to dynamically choose what type of header is used without undergoing a mining operation in the likes of a pyramid of doom. Hence, this _little_ change.
Instructions below
To extend an Activity properties do:
public function onActivityPubValidateActivityStreamsTwoData(string $type_name, array &$validators): bool {
if ($type_name === '{Type}') {
$validators['attribute'] = myValidator::class;
}
return Event::next;
}
The Validator should be of the form:
use ActivityPhp\Type;
use ActivityPhp\Type\Util;
use Plugin\ActivityPub\Util\ModelValidator;
class myValidator extends ModelValidator
{
/**
* Validate Attribute's value
*
* @param mixed $value from JSON's attribute
* @param mixed $container A {Type}
* @return bool
* @throws Exception
*/
public function validate($value, $container): bool
{
// Validate that container is a {Type}
Util::subclassOf($container, Type\Extended\Object\{Type}::class, true);
return {Validation Result};
To act on received activities do:
public function onActivityPubNew{Type}(&$obj): bool {
To add information to Activities being federated by ActivityPub do:
public function ActivityPubAddActivityStreamsTwoData(string $type_name, &$type): bool {
To implement an ActivityStreams 2.0 representation do:
public function onActivityPubActivityStreamsTwoResponse(string $route, arrray $vars, ?TypeResponse &$response = null): bool {
if ($route === '{Object route}') {
$response = ModelResponse::handle($vars[{Object}]);
return Event::stop;
}
return Event::next;
}