]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Nodeinfo/NodeinfoPlugin.php
Fix undefined variables on Favorite plugin by XRevan86
[quix0rs-gnu-social.git] / plugins / Nodeinfo / NodeinfoPlugin.php
index 5c23ac5e577a75fb1bdaef3fd28047c72d9db96c..07a86e93f7fb17673d0251af04695ca1bcce21a3 100644 (file)
@@ -27,13 +27,153 @@ class NodeinfoPlugin extends Plugin
         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[] = array('name' => 'Nodeinfo',
+        $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.'));
+            'description' => _m('Plugin that presents basic instance information using the NodeInfo standard.')];
         return true;
     }
 }