Move mod/randprof to src/Module/RandomProfile
authorPhilipp Holzer <admin+github@philipp.info>
Sat, 18 May 2019 20:17:57 +0000 (22:17 +0200)
committerPhilipp Holzer <admin+github@philipp.info>
Sat, 18 May 2019 20:17:57 +0000 (22:17 +0200)
mod/randprof.php [deleted file]
src/App/Router.php
src/Database/DBA.php
src/Model/GContact.php
src/Module/RandomProfile.php [new file with mode: 0644]

diff --git a/mod/randprof.php b/mod/randprof.php
deleted file mode 100644 (file)
index 10bff58..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * @file mod/randprof.php
- */
-use Friendica\App;
-use Friendica\Model\Contact;
-use Friendica\Model\GContact;
-
-function randprof_init(App $a)
-{
-       $x = GContact::getRandomUrl();
-
-       if ($x) {
-               $link = Contact::magicLink($x);
-               $a->redirect($link);
-       }
-
-       $a->internalRedirect('profile');
-}
index cd59c3d..ef1c47b 100644 (file)
@@ -196,6 +196,7 @@ class Router
                                $collector->addRoute(['GET', 'POST'], '/verify'                , Module\Settings\TwoFactor\Verify::class);
                        });
                });
+               $this->routeCollector->addRoute(['GET'],         '/randprof',            Module\RandomProfile::class);
                $this->routeCollector->addRoute(['GET', 'POST'], '/register',            Module\Register::class);
                $this->routeCollector->addRoute(['GET'],         '/robots.txt',          Module\RobotsTxt::class);
                $this->routeCollector->addRoute(['GET'],         '/rsd.xml',             Module\ReallySimpleDiscovery::class);
index 228565f..85bdbbb 100644 (file)
@@ -1511,7 +1511,9 @@ class DBA
                if (isset($params['order'])) {
                        $order_string = " ORDER BY ";
                        foreach ($params['order'] AS $fields => $order) {
-                               if (!is_int($fields)) {
+                               if ($order === 'RAND()') {
+                                       $order_string .= "RAND(), ";
+                               } elseif (!is_int($fields)) {
                                        $order_string .= "`" . $fields . "` " . ($order ? "DESC" : "ASC") . ", ";
                                } else {
                                        $order_string .= "`" . $order . "`, ";
index 43375b9..c259467 100644 (file)
@@ -1039,11 +1039,16 @@ class GContact
 
                $last_update = date("c", time() - (60 * 60 * 24 * $requery_days));
 
-               $r = q(
-                       "SELECT `nurl`, `url` FROM `gserver` WHERE `last_contact` >= `last_failure` AND `network` = '%s' AND `last_poco_query` < '%s' ORDER BY RAND() LIMIT 5",
-                       DBA::escape(Protocol::OSTATUS),
-                       DBA::escape($last_update)
-               );
+               $r = DBA::select('gserver', ['nurl', 'url'], [
+                       '`network` = ?
+                       AND `last_contact` >= `last_failure`
+                       AND `last_poco_query` < ?',
+                       Protocol::OSTATUS,
+                       $last_update
+               ], [
+                       'limit' => 5,
+                       'order' => ['RAND()']
+               ]);
 
                if (!DBA::isResult($r)) {
                        return;
@@ -1056,21 +1061,23 @@ class GContact
        }
 
        /**
-        * @return string
+        * Returns a random, global contact of the current node
+        *
+        * @return string The profile URL
         * @throws Exception
         */
        public static function getRandomUrl()
        {
-               $r = q(
-                       "SELECT `url` FROM `gcontact` WHERE `network` = '%s'
-                                       AND `last_contact` >= `last_failure`
-                                       AND `updated` > UTC_TIMESTAMP - INTERVAL 1 MONTH
-                               ORDER BY rand() LIMIT 1",
-                       DBA::escape(Protocol::DFRN)
-               );
+               $r = DBA::selectFirst('gcontact', ['url'], [
+                       '`network` = ? 
+                       AND `last_contact` >= `last_failure`  
+                       AND     `updated` > ?',
+                       Protocol::DFRN,
+                       DateTimeFormat::utc('now - 1 month'),
+               ], ['order' => ['RAND()']]);
 
                if (DBA::isResult($r)) {
-                       return dirname($r[0]['url']);
+                       return $r['url'];
                }
 
                return '';
diff --git a/src/Module/RandomProfile.php b/src/Module/RandomProfile.php
new file mode 100644 (file)
index 0000000..325cc1e
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+
+namespace Friendica\Module;
+
+use Friendica\BaseModule;
+use Friendica\Model\Contact;
+use Friendica\Model\GContact;
+
+/**
+ * Redirects to a random profile of this node
+ */
+class RandomProfile extends BaseModule
+{
+       public static function content()
+       {
+               $a = self::getApp();
+
+               $contactUrl = GContact::getRandomUrl();
+
+               if ($contactUrl) {
+                       $link = Contact::magicLink($contactUrl);
+                       $a->redirect($link);
+               }
+
+               $a->internalRedirect('profile');
+       }
+}