forked from GNUsocial/gnu-social
46f98b3142
The core plugins whose version was attached to GS's were reseted to 2.0.0. 2.0.0 was chosen as reset version for plugins because it is higher than the one that was set by inheriting GS version. Furthermore, it's a major change from prior plugin versioning system thus it also makes semantic sense. Justification for version bump: == GS == 9a4ab31f26 1.19.0c13b935201
1.18.3c13b935201
1.18.218fc39d2cf
1.18.1c083a8bcc2
1.18.0e8783d46d0
1.17.1d9a42550ff
1.17.01536d3ef29
1.16.0c03ed457a6
1.15.0d2e6519bad
1.14.2fe411e8138
1.14.1b17e0b4169
1.14.0daa5f87fd4
1.13.0d75b5d2f4a
1.11.7f6dbf66983
1.11.66cf674f8f8
1.11.57845a09b34
1.11.4e4d432295d
1.11.3339204f1ee
1.11.2a4e679a118
1.11.17967db6ff5
1.11.0bc030da320
1.10.19cc7df51d6
1.10.0bf7f17474d
1.9.28a07edec5f
1.9.10042971d74
1.9.06b5450b7e6
1.8.05dcc98d1c6
1.7.0e6667db0cd
1.6.03290227b50
1.5.0a59c439b46
1.4.0496ab8c920
1.3.10986030060b
1.3.91d529c021a
1.3.8f89c052cf8
1.3.738f2ecefac
1.3.6e473937cb9
1.3.59a39ebe66f
1.3.4ddc3cecfc0
1.3.32b43d484eb
1.3.2e8e487187e
1.3.1 == Plugins == XMPP plugine0887220b0
bump patche186ad57d0
bump patch OStatuse186ad57d0
bump patch Nodeinfoceae66a30f
bump minor586fb5a517
bump major195296846e
bump minor
180 lines
4.2 KiB
PHP
180 lines
4.2 KiB
PHP
<?php
|
|
|
|
if (!defined('GNUSOCIAL')) {
|
|
exit(1);
|
|
}
|
|
|
|
class NodeinfoPlugin extends Plugin
|
|
{
|
|
const VERSION = '1.0.1';
|
|
|
|
public function onRouterInitialized($m)
|
|
{
|
|
$m->connect(
|
|
'.well-known/nodeinfo',
|
|
array(
|
|
'action' => 'nodeinfojrd'
|
|
)
|
|
);
|
|
|
|
$m->connect(
|
|
'main/nodeinfo/2.0',
|
|
array(
|
|
'action' => 'nodeinfo_2_0'
|
|
)
|
|
);
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Make sure necessary tables are filled out.
|
|
*
|
|
* @return boolean hook true
|
|
*/
|
|
public function onCheckSchema()
|
|
{
|
|
// Ensure schema
|
|
$schema = Schema::get();
|
|
$schema->ensureTable('usage_stats', Usage_stats::schemaDef());
|
|
|
|
// Ensure default rows
|
|
if (Usage_stats::getKV('type', 'users') == null) {
|
|
$us = new Usage_stats();
|
|
$us->type = 'users';
|
|
$us->insert();
|
|
}
|
|
|
|
if (Usage_stats::getKV('type', 'posts') == null) {
|
|
$us = new Usage_stats();
|
|
$us->type = 'posts';
|
|
$us->insert();
|
|
}
|
|
|
|
if (Usage_stats::getKV('type', 'comments') == null) {
|
|
$us = new Usage_stats();
|
|
$us->type = 'comments';
|
|
$us->insert();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Increment notices/replies counter
|
|
*
|
|
* @return boolean hook flag
|
|
* @author Diogo Cordeiro <diogo@fc.up.pt>
|
|
*/
|
|
public function onStartNoticeDistribute($notice)
|
|
{
|
|
assert($notice->id > 0); // Ignore if not a valid notice
|
|
|
|
$profile = $notice->getProfile();
|
|
|
|
if (!$profile->isLocal()) {
|
|
return true;
|
|
}
|
|
|
|
// Ignore for activity/non-post-verb notices
|
|
if (method_exists('ActivityUtils', 'compareVerbs')) {
|
|
$is_post_verb = ActivityUtils::compareVerbs(
|
|
$notice->verb,
|
|
[ActivityVerb::POST]
|
|
);
|
|
} else {
|
|
$is_post_verb = ($notice->verb == ActivityVerb::POST ? true : false);
|
|
}
|
|
if ($notice->source == 'activity' || !$is_post_verb) {
|
|
return true;
|
|
}
|
|
|
|
// Is a reply?
|
|
if ($notice->reply_to) {
|
|
$us = Usage_stats::getKV('type', 'comments');
|
|
$us->count += 1;
|
|
$us->update();
|
|
return true;
|
|
}
|
|
|
|
// Is an Announce?
|
|
if ($notice->isRepeat()) {
|
|
return true;
|
|
}
|
|
|
|
$us = Usage_stats::getKV('type', 'posts');
|
|
$us->count += 1;
|
|
$us->update();
|
|
|
|
// That was it
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Decrement notices/replies counter
|
|
*
|
|
* @return boolean hook flag
|
|
* @author Diogo Cordeiro <diogo@fc.up.pt>
|
|
*/
|
|
public function onStartDeleteOwnNotice($user, $notice)
|
|
{
|
|
$profile = $user->getProfile();
|
|
|
|
// Only count local notices
|
|
if (!$profile->isLocal()) {
|
|
return true;
|
|
}
|
|
|
|
if ($notice->reply_to) {
|
|
$us = Usage_stats::getKV('type', 'comments');
|
|
$us->count -= 1;
|
|
$us->update();
|
|
return true;
|
|
}
|
|
|
|
$us = Usage_stats::getKV('type', 'posts');
|
|
$us->count -= 1;
|
|
$us->update();
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Increment users counter
|
|
*
|
|
* @return boolean hook flag
|
|
* @author Diogo Cordeiro <diogo@fc.up.pt>
|
|
*/
|
|
public function onEndRegistrationTry()
|
|
{
|
|
$us = Usage_stats::getKV('type', 'users');
|
|
$us->count += 1;
|
|
$us->update();
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Decrement users counter
|
|
*
|
|
* @return boolean hook flag
|
|
* @author Diogo Cordeiro <diogo@fc.up.pt>
|
|
*/
|
|
public function onEndDeleteUser()
|
|
{
|
|
$us = Usage_stats::getKV('type', 'users');
|
|
$us->count -= 1;
|
|
$us->update();
|
|
return true;
|
|
}
|
|
|
|
|
|
public function onPluginVersion(array &$versions)
|
|
{
|
|
$versions[] = ['name' => 'Nodeinfo',
|
|
'version' => self::VERSION,
|
|
'author' => 'chimo',
|
|
'homepage' => 'https://github.com/chimo/gs-nodeinfo',
|
|
'description' => _m('Plugin that presents basic instance information using the NodeInfo standard.')];
|
|
return true;
|
|
}
|
|
}
|