Merge pull request #7164 from nupplaphil/task/mod_randprof

Move mod/randprof to src/Module/RandomProfile
This commit is contained in:
Hypolite Petovan 2019-05-18 22:16:06 -04:00 committed by GitHub
commit 596e95917e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 52 additions and 34 deletions

View File

@ -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');
}

View File

@ -202,6 +202,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);

View 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 . "`, ";

View 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 '';

View File

@ -0,0 +1,27 @@
<?php
namespace Friendica\Module;
use Friendica\BaseModule;
use Friendica\Model\Contact;
use Friendica\Model\GContact;
/**
* Redirects to a random Friendica profile this node knows about
*/
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');
}
}