Several speed improvements (magiclink, caching, indexes)
This commit is contained in:
parent
251465f67a
commit
312c01a517
|
@ -1,6 +1,6 @@
|
||||||
-- ------------------------------------------
|
-- ------------------------------------------
|
||||||
-- Friendica 2021.03-dev (Red Hot Poker)
|
-- Friendica 2021.03-dev (Red Hot Poker)
|
||||||
-- DB_UPDATE_VERSION 1401
|
-- DB_UPDATE_VERSION 1402
|
||||||
-- ------------------------------------------
|
-- ------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -1231,11 +1231,11 @@ CREATE TABLE IF NOT EXISTS `post-user` (
|
||||||
INDEX `uid_hidden` (`uid`,`hidden`),
|
INDEX `uid_hidden` (`uid`,`hidden`),
|
||||||
INDEX `event-id` (`event-id`),
|
INDEX `event-id` (`event-id`),
|
||||||
INDEX `uid_wall` (`uid`,`wall`),
|
INDEX `uid_wall` (`uid`,`wall`),
|
||||||
INDEX `parent-uri-id` (`parent-uri-id`),
|
INDEX `parent-uri-id_uid` (`parent-uri-id`,`uid`),
|
||||||
INDEX `thr-parent-id` (`thr-parent-id`),
|
INDEX `thr-parent-id` (`thr-parent-id`),
|
||||||
INDEX `external-id` (`external-id`),
|
INDEX `external-id` (`external-id`),
|
||||||
INDEX `owner-id` (`owner-id`),
|
INDEX `owner-id` (`owner-id`),
|
||||||
INDEX `author-id` (`author-id`),
|
INDEX `author-id_uid` (`author-id`,`uid`),
|
||||||
INDEX `causer-id` (`causer-id`),
|
INDEX `causer-id` (`causer-id`),
|
||||||
INDEX `vid` (`vid`),
|
INDEX `vid` (`vid`),
|
||||||
INDEX `uid_received` (`uid`,`received`),
|
INDEX `uid_received` (`uid`,`received`),
|
||||||
|
@ -1615,6 +1615,7 @@ CREATE VIEW `post-view` AS SELECT
|
||||||
`post-user`.`unseen` AS `unseen`,
|
`post-user`.`unseen` AS `unseen`,
|
||||||
`post-user`.`deleted` AS `deleted`,
|
`post-user`.`deleted` AS `deleted`,
|
||||||
`post-user`.`origin` AS `origin`,
|
`post-user`.`origin` AS `origin`,
|
||||||
|
`post-thread-user`.`origin` AS `parent-origin`,
|
||||||
`post-thread-user`.`forum_mode` AS `forum_mode`,
|
`post-thread-user`.`forum_mode` AS `forum_mode`,
|
||||||
`post-thread-user`.`mention` AS `mention`,
|
`post-thread-user`.`mention` AS `mention`,
|
||||||
`post-user`.`global` AS `global`,
|
`post-user`.`global` AS `global`,
|
||||||
|
|
|
@ -160,9 +160,6 @@ function localize_item(&$item)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$Aname = $item['author-name'];
|
|
||||||
$Alink = $item['author-link'];
|
|
||||||
|
|
||||||
$obj = XML::parseString($xmlhead . $item['object']);
|
$obj = XML::parseString($xmlhead . $item['object']);
|
||||||
|
|
||||||
$Bname = $obj->title;
|
$Bname = $obj->title;
|
||||||
|
@ -177,9 +174,17 @@ function localize_item(&$item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$A = '[url=' . Contact::magicLink($Alink) . ']' . $Aname . '[/url]';
|
$author = ['uid' => 0, 'id' => $item['author-id'],
|
||||||
$B = '[url=' . Contact::magicLink($Blink) . ']' . $Bname . '[/url]';
|
'network' => $item['author-network'], 'url' => $item['author-link']];
|
||||||
if ($Bphoto != "") {
|
$A = '[url=' . Contact::magicLinkByContact($author) . ']' . $item['author-name'] . '[/url]';
|
||||||
|
|
||||||
|
if (!empty($Blink)) {
|
||||||
|
$B = '[url=' . Contact::magicLink($Blink) . ']' . $Bname . '[/url]';
|
||||||
|
} else {
|
||||||
|
$B = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Bphoto != "" && !empty($Blink)) {
|
||||||
$Bphoto = '[url=' . Contact::magicLink($Blink) . '][img=80x80]' . $Bphoto . '[/img][/url]';
|
$Bphoto = '[url=' . Contact::magicLink($Blink) . '][img=80x80]' . $Bphoto . '[/img][/url]';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,11 +267,10 @@ function localize_item(&$item)
|
||||||
}
|
}
|
||||||
|
|
||||||
// add sparkle links to appropriate permalinks
|
// add sparkle links to appropriate permalinks
|
||||||
$author = ['uid' => 0, 'id' => $item['author-id'],
|
|
||||||
'network' => $item['author-network'], 'url' => $item['author-link']];
|
|
||||||
|
|
||||||
// Only create a redirection to a magic link when logged in
|
// Only create a redirection to a magic link when logged in
|
||||||
if (!empty($item['plink']) && Session::isAuthenticated()) {
|
if (!empty($item['plink']) && Session::isAuthenticated()) {
|
||||||
|
$author = ['uid' => 0, 'id' => $item['author-id'],
|
||||||
|
'network' => $item['author-network'], 'url' => $item['author-link']];
|
||||||
$item['plink'] = Contact::magicLinkByContact($author, $item['plink']);
|
$item['plink'] = Contact::magicLinkByContact($author, $item['plink']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -763,7 +767,9 @@ function conversation_fetch_comments($thread_items, bool $pinned, array $activit
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($row['gravity'] == GRAVITY_PARENT) && !empty($row['causer-id'])) {
|
if (($row['gravity'] == GRAVITY_PARENT) && !empty($row['causer-id'])) {
|
||||||
$row['reshared'] = DI::l10n()->t('%s reshared this.', '<a href="'. htmlentities(Contact::magicLinkById($row['causer-id'])) .'">' . htmlentities($name) . '</a>');
|
$causer = ['uid' => 0, 'id' => $row['causer-id'],
|
||||||
|
'network' => $row['causer-network'], 'url' => $row['causer-link']];
|
||||||
|
$row['reshared'] = DI::l10n()->t('%s reshared this.', '<a href="'. htmlentities(Contact::magicLinkByContact($causer)) .'">' . htmlentities($name) . '</a>');
|
||||||
}
|
}
|
||||||
$row['direction'] = ['direction' => 3, 'title' => (empty($row['causer-id']) ? DI::l10n()->t('Reshared') : DI::l10n()->t('Reshared by %s', $name))];
|
$row['direction'] = ['direction' => 3, 'title' => (empty($row['causer-id']) ? DI::l10n()->t('Reshared') : DI::l10n()->t('Reshared by %s', $name))];
|
||||||
break;
|
break;
|
||||||
|
@ -903,7 +909,7 @@ function item_photo_menu($item) {
|
||||||
$sparkle = (strpos($profile_link, 'redir/') === 0);
|
$sparkle = (strpos($profile_link, 'redir/') === 0);
|
||||||
|
|
||||||
$cid = 0;
|
$cid = 0;
|
||||||
$pcid = Contact::getIdForURL($item['author-link'], 0, false);
|
$pcid = $item['author-id'];
|
||||||
$network = '';
|
$network = '';
|
||||||
$rel = 0;
|
$rel = 0;
|
||||||
$condition = ['uid' => local_user(), 'nurl' => Strings::normaliseLink($item['author-link'])];
|
$condition = ['uid' => local_user(), 'nurl' => Strings::normaliseLink($item['author-link'])];
|
||||||
|
|
|
@ -1454,7 +1454,9 @@ function photos_content(App $a)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$profile_url = Contact::magicLinkById($item['author-id']);
|
$author = ['uid' => 0, 'id' => $item['author-id'],
|
||||||
|
'network' => $item['author-network'], 'url' => $item['author-link']];
|
||||||
|
$profile_url = Contact::magicLinkByContact($author);
|
||||||
if (strpos($profile_url, 'redir/') === 0) {
|
if (strpos($profile_url, 'redir/') === 0) {
|
||||||
$sparkle = ' sparkle';
|
$sparkle = ' sparkle';
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -59,7 +59,7 @@ function unfollow_content(App $a)
|
||||||
local_user(), Contact::SHARING, Contact::FRIEND, Strings::normaliseLink($url),
|
local_user(), Contact::SHARING, Contact::FRIEND, Strings::normaliseLink($url),
|
||||||
Strings::normaliseLink($url), $url];
|
Strings::normaliseLink($url), $url];
|
||||||
|
|
||||||
$contact = DBA::selectFirst('contact', ['url', 'network', 'addr', 'name'], $condition);
|
$contact = DBA::selectFirst('contact', ['url', 'id', 'uid', 'network', 'addr', 'name'], $condition);
|
||||||
|
|
||||||
if (!DBA::isResult($contact)) {
|
if (!DBA::isResult($contact)) {
|
||||||
notice(DI::l10n()->t("You aren't following this contact."));
|
notice(DI::l10n()->t("You aren't following this contact."));
|
||||||
|
@ -99,7 +99,7 @@ function unfollow_content(App $a)
|
||||||
'$submit' => DI::l10n()->t('Submit Request'),
|
'$submit' => DI::l10n()->t('Submit Request'),
|
||||||
'$cancel' => DI::l10n()->t('Cancel'),
|
'$cancel' => DI::l10n()->t('Cancel'),
|
||||||
'$url' => $contact['url'],
|
'$url' => $contact['url'],
|
||||||
'$zrl' => Contact::magicLink($contact['url']),
|
'$zrl' => Contact::magicLinkByContact($contact),
|
||||||
'$url_label' => DI::l10n()->t('Profile URL'),
|
'$url_label' => DI::l10n()->t('Profile URL'),
|
||||||
'$myaddr' => $self['url'],
|
'$myaddr' => $self['url'],
|
||||||
'$request' => $request,
|
'$request' => $request,
|
||||||
|
|
|
@ -33,6 +33,9 @@ use Friendica\Util\Strings;
|
||||||
*/
|
*/
|
||||||
class ContactSelector
|
class ContactSelector
|
||||||
{
|
{
|
||||||
|
static $serverdata = [];
|
||||||
|
static $server_url = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $current current
|
* @param string $current current
|
||||||
* @param boolean $disabled optional, default false
|
* @param boolean $disabled optional, default false
|
||||||
|
@ -61,6 +64,21 @@ class ContactSelector
|
||||||
return $o;
|
return $o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function getServerForProfile(string $profile)
|
||||||
|
{
|
||||||
|
$server_url = self::getServerURLForProfile($profile);
|
||||||
|
|
||||||
|
if (!empty(self::$serverdata[$server_url])) {
|
||||||
|
return self::$serverdata[$server_url];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now query the GServer for the platform name
|
||||||
|
$gserver = DBA::selectFirst('gserver', ['platform', 'network'], ['nurl' => $server_url]);
|
||||||
|
|
||||||
|
self::$serverdata[$server_url] = $gserver;
|
||||||
|
return $gserver;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $profile Profile URL
|
* @param string $profile Profile URL
|
||||||
* @return string Server URL
|
* @return string Server URL
|
||||||
|
@ -68,6 +86,10 @@ class ContactSelector
|
||||||
*/
|
*/
|
||||||
private static function getServerURLForProfile($profile)
|
private static function getServerURLForProfile($profile)
|
||||||
{
|
{
|
||||||
|
if (!empty(self::$server_url[$profile])) {
|
||||||
|
return self::$server_url[$profile];
|
||||||
|
}
|
||||||
|
|
||||||
$server_url = '';
|
$server_url = '';
|
||||||
|
|
||||||
// Fetch the server url from the contact table
|
// Fetch the server url from the contact table
|
||||||
|
@ -83,6 +105,8 @@ class ContactSelector
|
||||||
$server_url = Strings::normaliseLink(Network::unparseURL($parts));
|
$server_url = Strings::normaliseLink(Network::unparseURL($parts));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self::$server_url[$profile] = $server_url;
|
||||||
|
|
||||||
return $server_url;
|
return $server_url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,24 +147,19 @@ class ContactSelector
|
||||||
$networkname = str_replace($search, $replace, $network);
|
$networkname = str_replace($search, $replace, $network);
|
||||||
|
|
||||||
if ((in_array($network, Protocol::FEDERATED)) && ($profile != "")) {
|
if ((in_array($network, Protocol::FEDERATED)) && ($profile != "")) {
|
||||||
$server_url = self::getServerURLForProfile($profile);
|
$gserver = self::getServerForProfile($profile);
|
||||||
|
|
||||||
// Now query the GServer for the platform name
|
if (!empty($gserver['platform'])) {
|
||||||
$gserver = DBA::selectFirst('gserver', ['platform', 'network'], ['nurl' => $server_url]);
|
$platform = $gserver['platform'];
|
||||||
|
} elseif (!empty($gserver['network']) && ($gserver['network'] != Protocol::ACTIVITYPUB)) {
|
||||||
|
$platform = self::networkToName($gserver['network']);
|
||||||
|
}
|
||||||
|
|
||||||
if (DBA::isResult($gserver)) {
|
if (!empty($platform)) {
|
||||||
if (!empty($gserver['platform'])) {
|
$networkname = $platform;
|
||||||
$platform = $gserver['platform'];
|
|
||||||
} elseif (!empty($gserver['network']) && ($gserver['network'] != Protocol::ACTIVITYPUB)) {
|
|
||||||
$platform = self::networkToName($gserver['network']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($platform)) {
|
if ($network == Protocol::ACTIVITYPUB) {
|
||||||
$networkname = $platform;
|
$networkname .= ' (AP)';
|
||||||
|
|
||||||
if ($network == Protocol::ACTIVITYPUB) {
|
|
||||||
$networkname .= ' (AP)';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -192,12 +211,8 @@ class ContactSelector
|
||||||
$network_icon = str_replace($search, $replace, $network);
|
$network_icon = str_replace($search, $replace, $network);
|
||||||
|
|
||||||
if ((in_array($network, Protocol::FEDERATED)) && ($profile != "")) {
|
if ((in_array($network, Protocol::FEDERATED)) && ($profile != "")) {
|
||||||
$server_url = self::getServerURLForProfile($profile);
|
$gserver = self::getServerForProfile($profile);
|
||||||
|
if (!empty($gserver['platform'])) {
|
||||||
// Now query the GServer for the platform name
|
|
||||||
$gserver = DBA::selectFirst('gserver', ['platform'], ['nurl' => $server_url]);
|
|
||||||
|
|
||||||
if (DBA::isResult($gserver) && !empty($gserver['platform'])) {
|
|
||||||
$network_icon = $platform_icons[strtolower($gserver['platform'])] ?? $network_icon;
|
$network_icon = $platform_icons[strtolower($gserver['platform'])] ?? $network_icon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ class ForumManager
|
||||||
|
|
||||||
$forumlist = [];
|
$forumlist = [];
|
||||||
|
|
||||||
$fields = ['id', 'url', 'name', 'micro', 'thumb', 'avatar'];
|
$fields = ['id', 'url', 'name', 'micro', 'thumb', 'avatar', 'network', 'uid'];
|
||||||
$condition = [$condition_str, Protocol::DFRN, Protocol::ACTIVITYPUB, $uid];
|
$condition = [$condition_str, Protocol::DFRN, Protocol::ACTIVITYPUB, $uid];
|
||||||
$contacts = DBA::select('contact', $fields, $condition, $params);
|
$contacts = DBA::select('contact', $fields, $condition, $params);
|
||||||
if (!$contacts) {
|
if (!$contacts) {
|
||||||
|
@ -127,7 +127,7 @@ class ForumManager
|
||||||
|
|
||||||
$entry = [
|
$entry = [
|
||||||
'url' => $baseurl . '/' . $contact['id'],
|
'url' => $baseurl . '/' . $contact['id'],
|
||||||
'external_url' => Contact::magicLink($contact['url']),
|
'external_url' => Contact::magicLinkByContact($contact),
|
||||||
'name' => $contact['name'],
|
'name' => $contact['name'],
|
||||||
'cid' => $contact['id'],
|
'cid' => $contact['id'],
|
||||||
'selected' => $selected,
|
'selected' => $selected,
|
||||||
|
|
|
@ -837,7 +837,7 @@ class HTML
|
||||||
$redir = false;
|
$redir = false;
|
||||||
|
|
||||||
if ($redirect) {
|
if ($redirect) {
|
||||||
$url = Contact::magicLink($contact['url']);
|
$url = Contact::magicLinkByContact($contact);
|
||||||
if (strpos($url, 'redir/') === 0) {
|
if (strpos($url, 'redir/') === 0) {
|
||||||
$sparkle = ' sparkle';
|
$sparkle = ' sparkle';
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
namespace Friendica\Content;
|
namespace Friendica\Content;
|
||||||
|
|
||||||
use Friendica\Core\Addon;
|
use Friendica\Core\Addon;
|
||||||
|
use Friendica\Core\Cache\Duration;
|
||||||
use Friendica\Core\Protocol;
|
use Friendica\Core\Protocol;
|
||||||
use Friendica\Core\Renderer;
|
use Friendica\Core\Renderer;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
@ -266,7 +267,7 @@ class Widget
|
||||||
|
|
||||||
$extra_sql = self::unavailableNetworks();
|
$extra_sql = self::unavailableNetworks();
|
||||||
|
|
||||||
$r = DBA::p("SELECT DISTINCT(`network`) FROM `contact` WHERE `uid` = ? AND NOT `deleted` AND `network` != '' $extra_sql ORDER BY `network`",
|
$r = DBA::p("SELECT `network` FROM `contact` WHERE `uid` = ? AND NOT `deleted` AND `network` != '' $extra_sql GROUP BY `network` ORDER BY `network`",
|
||||||
local_user()
|
local_user()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -395,7 +396,7 @@ class Widget
|
||||||
$entries = [];
|
$entries = [];
|
||||||
foreach ($commonContacts as $contact) {
|
foreach ($commonContacts as $contact) {
|
||||||
$entries[] = [
|
$entries[] = [
|
||||||
'url' => Contact::magicLink($contact['url']),
|
'url' => Contact::magicLinkByContact($contact),
|
||||||
'name' => $contact['name'],
|
'name' => $contact['name'],
|
||||||
'photo' => Contact::getThumb($contact),
|
'photo' => Contact::getThumb($contact),
|
||||||
];
|
];
|
||||||
|
@ -460,7 +461,13 @@ class Widget
|
||||||
|
|
||||||
$ret = [];
|
$ret = [];
|
||||||
|
|
||||||
$dthen = Item::firstPostDate($uid, $wall);
|
$cachekey = 'Widget::postedByYear' . $uid . '-' . (int)$wall;
|
||||||
|
$dthen = DI::cache()->get($cachekey);
|
||||||
|
if (!empty($dthen)) {
|
||||||
|
$dthen = Item::firstPostDate($uid, $wall);
|
||||||
|
DI::cache()->set($cachekey, $dthen, Duration::HOUR);
|
||||||
|
}
|
||||||
|
|
||||||
if ($dthen) {
|
if ($dthen) {
|
||||||
// Set the start and end date to the beginning of the month
|
// Set the start and end date to the beginning of the month
|
||||||
$dnow = substr($dnow, 0, 8) . '01';
|
$dnow = substr($dnow, 0, 8) . '01';
|
||||||
|
|
|
@ -144,6 +144,7 @@ class ACL
|
||||||
'archive' => false,
|
'archive' => false,
|
||||||
'deleted' => false,
|
'deleted' => false,
|
||||||
'pending' => false,
|
'pending' => false,
|
||||||
|
'network' => Protocol::FEDERATED,
|
||||||
'rel' => [Contact::FOLLOWER, Contact::FRIEND]
|
'rel' => [Contact::FOLLOWER, Contact::FRIEND]
|
||||||
], $condition),
|
], $condition),
|
||||||
$params
|
$params
|
||||||
|
@ -156,7 +157,7 @@ class ACL
|
||||||
|
|
||||||
$acl_forums = Contact::selectToArray($fields,
|
$acl_forums = Contact::selectToArray($fields,
|
||||||
['uid' => $user_id, 'self' => false, 'blocked' => false, 'archive' => false, 'deleted' => false,
|
['uid' => $user_id, 'self' => false, 'blocked' => false, 'archive' => false, 'deleted' => false,
|
||||||
'pending' => false, 'contact-type' => Contact::TYPE_COMMUNITY], $params
|
'network' => Protocol::FEDERATED, 'pending' => false, 'contact-type' => Contact::TYPE_COMMUNITY], $params
|
||||||
);
|
);
|
||||||
|
|
||||||
$acl_contacts = array_merge($acl_forums, $acl_contacts);
|
$acl_contacts = array_merge($acl_forums, $acl_contacts);
|
||||||
|
|
|
@ -905,7 +905,7 @@ class Contact
|
||||||
|
|
||||||
if (empty($contact['uid']) || ($contact['uid'] != $uid)) {
|
if (empty($contact['uid']) || ($contact['uid'] != $uid)) {
|
||||||
if ($uid == 0) {
|
if ($uid == 0) {
|
||||||
$profile_link = self::magicLink($contact['url']);
|
$profile_link = self::magicLinkByContact($contact);
|
||||||
$menu = ['profile' => [DI::l10n()->t('View Profile'), $profile_link, true]];
|
$menu = ['profile' => [DI::l10n()->t('View Profile'), $profile_link, true]];
|
||||||
|
|
||||||
return $menu;
|
return $menu;
|
||||||
|
@ -2684,11 +2684,11 @@ class Contact
|
||||||
return 'contact/' . $contact['id'] . '/conversations';
|
return 'contact/' . $contact['id'] . '/conversations';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($contact['network'] != Protocol::DFRN) {
|
if (!empty($contact['network']) && $contact['network'] != Protocol::DFRN) {
|
||||||
return $destination;
|
return $destination;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($contact['uid'])) {
|
if (!empty($contact['uid']) || empty($contact['network'])) {
|
||||||
return self::magicLink($contact['url'], $url);
|
return self::magicLink($contact['url'], $url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2819,22 +2819,22 @@ class Contact
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a random, global contact of the current node
|
* Returns a random, global contact array of the current node
|
||||||
*
|
*
|
||||||
* @return string The profile URL
|
* @return array The profile array
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public static function getRandomUrl()
|
public static function getRandomContact()
|
||||||
{
|
{
|
||||||
$r = DBA::selectFirst('contact', ['url'], [
|
$contact = DBA::selectFirst('contact', ['id', 'network', 'url', 'uid'], [
|
||||||
"`uid` = ? AND `network` = ? AND NOT `failed` AND `last-item` > ?",
|
"`uid` = ? AND `network` = ? AND NOT `failed` AND `last-item` > ?",
|
||||||
0, Protocol::DFRN, DateTimeFormat::utc('now - 1 month'),
|
0, Protocol::DFRN, DateTimeFormat::utc('now - 1 month'),
|
||||||
], ['order' => ['RAND()']]);
|
], ['order' => ['RAND()']]);
|
||||||
|
|
||||||
if (DBA::isResult($r)) {
|
if (DBA::isResult($contact)) {
|
||||||
return $r['url'];
|
return $contact;
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -930,7 +930,9 @@ class Event
|
||||||
$location = self::locationToArray($item['event-location']);
|
$location = self::locationToArray($item['event-location']);
|
||||||
|
|
||||||
// Construct the profile link (magic-auth).
|
// Construct the profile link (magic-auth).
|
||||||
$profile_link = Contact::magicLinkById($item['author-id']);
|
$author = ['uid' => 0, 'id' => $item['author-id'],
|
||||||
|
'network' => $item['author-network'], 'url' => $item['author-link']];
|
||||||
|
$profile_link = Contact::magicLinkByContact($author);
|
||||||
|
|
||||||
$tpl = Renderer::getMarkupTemplate('event_stream_item.tpl');
|
$tpl = Renderer::getMarkupTemplate('event_stream_item.tpl');
|
||||||
$return = Renderer::replaceMacros($tpl, [
|
$return = Renderer::replaceMacros($tpl, [
|
||||||
|
|
|
@ -32,7 +32,6 @@ use Friendica\Core\System;
|
||||||
use Friendica\Model\Tag;
|
use Friendica\Model\Tag;
|
||||||
use Friendica\Core\Worker;
|
use Friendica\Core\Worker;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\Database\DBStructure;
|
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Post;
|
use Friendica\Model\Post;
|
||||||
use Friendica\Protocol\Activity;
|
use Friendica\Protocol\Activity;
|
||||||
|
@ -75,12 +74,12 @@ class Item
|
||||||
'uid', 'id', 'parent', 'guid', 'network', 'gravity',
|
'uid', 'id', 'parent', 'guid', 'network', 'gravity',
|
||||||
'uri-id', 'uri', 'thr-parent-id', 'thr-parent', 'parent-uri-id', 'parent-uri',
|
'uri-id', 'uri', 'thr-parent-id', 'thr-parent', 'parent-uri-id', 'parent-uri',
|
||||||
'commented', 'created', 'edited', 'received', 'verb', 'object-type', 'postopts', 'plink',
|
'commented', 'created', 'edited', 'received', 'verb', 'object-type', 'postopts', 'plink',
|
||||||
'wall', 'private', 'starred', 'origin', 'title', 'body', 'language',
|
'wall', 'private', 'starred', 'origin', 'parent-origin', 'title', 'body', 'language',
|
||||||
'content-warning', 'location', 'coord', 'app', 'rendered-hash', 'rendered-html', 'object',
|
'content-warning', 'location', 'coord', 'app', 'rendered-hash', 'rendered-html', 'object',
|
||||||
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
|
'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
|
||||||
'author-id', 'author-link', 'author-name', 'author-avatar', 'author-network',
|
'author-id', 'author-link', 'author-name', 'author-avatar', 'author-network',
|
||||||
'owner-id', 'owner-link', 'owner-name', 'owner-avatar', 'owner-network',
|
'owner-id', 'owner-link', 'owner-name', 'owner-avatar', 'owner-network',
|
||||||
'causer-id', 'causer-link', 'causer-name', 'causer-avatar', 'causer-contact-type',
|
'causer-id', 'causer-link', 'causer-name', 'causer-avatar', 'causer-contact-type', 'causer-network',
|
||||||
'contact-id', 'contact-uid', 'contact-link', 'contact-name', 'contact-avatar',
|
'contact-id', 'contact-uid', 'contact-link', 'contact-name', 'contact-avatar',
|
||||||
'writable', 'self', 'cid', 'alias',
|
'writable', 'self', 'cid', 'alias',
|
||||||
'event-created', 'event-edited', 'event-start', 'event-finish',
|
'event-created', 'event-edited', 'event-start', 'event-finish',
|
||||||
|
@ -2196,7 +2195,8 @@ class Item
|
||||||
$params = ['order' => ['received' => false]];
|
$params = ['order' => ['received' => false]];
|
||||||
$thread = Post::selectFirst(['received'], $condition, $params);
|
$thread = Post::selectFirst(['received'], $condition, $params);
|
||||||
if (DBA::isResult($thread)) {
|
if (DBA::isResult($thread)) {
|
||||||
return substr(DateTimeFormat::local($thread['received']), 0, 10);
|
$postdate = substr(DateTimeFormat::local($thread['received']), 0, 10);
|
||||||
|
return $postdate;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2673,7 +2673,9 @@ class Item
|
||||||
foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) {
|
foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) {
|
||||||
$mime = $attachment['mimetype'];
|
$mime = $attachment['mimetype'];
|
||||||
|
|
||||||
$the_url = Contact::magicLinkById($item['author-id'], $attachment['url']);
|
$author = ['uid' => 0, 'id' => $item['author-id'],
|
||||||
|
'network' => $item['author-network'], 'url' => $item['author-link']];
|
||||||
|
$the_url = Contact::magicLinkByContact($author, $attachment['url']);
|
||||||
|
|
||||||
if (strpos($mime, 'video') !== false) {
|
if (strpos($mime, 'video') !== false) {
|
||||||
if (!$vhead) {
|
if (!$vhead) {
|
||||||
|
|
|
@ -539,7 +539,7 @@ class Profile
|
||||||
|
|
||||||
$today = (((strtotime($rr['start'] . ' +00:00') < $now) && (strtotime($rr['finish'] . ' +00:00') > $now)) ? true : false);
|
$today = (((strtotime($rr['start'] . ' +00:00') < $now) && (strtotime($rr['finish'] . ' +00:00') > $now)) ? true : false);
|
||||||
|
|
||||||
$rr['link'] = Contact::magicLink($rr['url']);
|
$rr['link'] = Contact::magicLinkById($rr['cid']);
|
||||||
$rr['title'] = $rr['name'];
|
$rr['title'] = $rr['name'];
|
||||||
$rr['date'] = DI::l10n()->getDay(DateTimeFormat::convert($rr['start'], $a->timezone, 'UTC', $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . DI::l10n()->t('[today]') : '');
|
$rr['date'] = DI::l10n()->getDay(DateTimeFormat::convert($rr['start'], $a->timezone, 'UTC', $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . DI::l10n()->t('[today]') : '');
|
||||||
$rr['startime'] = null;
|
$rr['startime'] = null;
|
||||||
|
|
|
@ -407,7 +407,7 @@ class Tag
|
||||||
|
|
||||||
$searchpath = DI::baseUrl() . "/search?tag=";
|
$searchpath = DI::baseUrl() . "/search?tag=";
|
||||||
|
|
||||||
$taglist = DBA::select('tag-view', ['type', 'name', 'url'],
|
$taglist = DBA::select('tag-view', ['type', 'name', 'url', 'cid'],
|
||||||
['uri-id' => $item['uri-id'], 'type' => [self::HASHTAG, self::MENTION, self::EXCLUSIVE_MENTION, self::IMPLICIT_MENTION]]);
|
['uri-id' => $item['uri-id'], 'type' => [self::HASHTAG, self::MENTION, self::EXCLUSIVE_MENTION, self::IMPLICIT_MENTION]]);
|
||||||
while ($tag = DBA::fetch($taglist)) {
|
while ($tag = DBA::fetch($taglist)) {
|
||||||
if ($tag['url'] == '') {
|
if ($tag['url'] == '') {
|
||||||
|
@ -428,7 +428,11 @@ class Tag
|
||||||
break;
|
break;
|
||||||
case self::MENTION:
|
case self::MENTION:
|
||||||
case self::EXCLUSIVE_MENTION:
|
case self::EXCLUSIVE_MENTION:
|
||||||
|
if (!empty($tag['cid'])) {
|
||||||
|
$tag['url'] = Contact::magicLinkById($tag['cid']);
|
||||||
|
} else {
|
||||||
$tag['url'] = Contact::magicLink($tag['url']);
|
$tag['url'] = Contact::magicLink($tag['url']);
|
||||||
|
}
|
||||||
$return['mentions'][] = $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a>';
|
$return['mentions'][] = $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a>';
|
||||||
$return['tags'][] = $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a>';
|
$return['tags'][] = $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a>';
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -518,7 +518,7 @@ class Contact extends BaseModule
|
||||||
|
|
||||||
$relation_text = sprintf($relation_text, $contact['name']);
|
$relation_text = sprintf($relation_text, $contact['name']);
|
||||||
|
|
||||||
$url = Model\Contact::magicLink($contact['url']);
|
$url = Model\Contact::magicLinkByContact($contact);
|
||||||
if (strpos($url, 'redir/') === 0) {
|
if (strpos($url, 'redir/') === 0) {
|
||||||
$sparkle = ' class="sparkle" ';
|
$sparkle = ' class="sparkle" ';
|
||||||
} else {
|
} else {
|
||||||
|
@ -1076,7 +1076,7 @@ class Contact extends BaseModule
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$url = Model\Contact::magicLink($contact['url']);
|
$url = Model\Contact::magicLinkByContact($contact);
|
||||||
|
|
||||||
if (strpos($url, 'redir/') === 0) {
|
if (strpos($url, 'redir/') === 0) {
|
||||||
$sparkle = ' class="sparkle" ';
|
$sparkle = ' class="sparkle" ';
|
||||||
|
|
|
@ -94,7 +94,7 @@ class Hovercard extends BaseModule
|
||||||
'nick' => $contact['nick'],
|
'nick' => $contact['nick'],
|
||||||
'addr' => $contact['addr'] ?: $contact['url'],
|
'addr' => $contact['addr'] ?: $contact['url'],
|
||||||
'thumb' => Contact::getThumb($contact),
|
'thumb' => Contact::getThumb($contact),
|
||||||
'url' => Contact::magicLink($contact['url']),
|
'url' => Contact::magicLinkByContact($contact),
|
||||||
'nurl' => $contact['nurl'],
|
'nurl' => $contact['nurl'],
|
||||||
'location' => $contact['location'],
|
'location' => $contact['location'],
|
||||||
'about' => $contact['about'],
|
'about' => $contact['about'],
|
||||||
|
|
|
@ -47,7 +47,7 @@ class ItemBody extends BaseModule
|
||||||
throw new HTTPException\NotFoundException(DI::l10n()->t('Item not found.'));
|
throw new HTTPException\NotFoundException(DI::l10n()->t('Item not found.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = Post::selectFirst(['body'], ['uid' => local_user(), 'id' => $itemId]);
|
$item = Post::selectFirst(['body'], ['uid' => local_user(), 'uri-id' => $itemId]);
|
||||||
|
|
||||||
if (!empty($item)) {
|
if (!empty($item)) {
|
||||||
if (DI::mode()->isAjax()) {
|
if (DI::mode()->isAjax()) {
|
||||||
|
|
|
@ -34,10 +34,10 @@ class RandomProfile extends BaseModule
|
||||||
{
|
{
|
||||||
$a = DI::app();
|
$a = DI::app();
|
||||||
|
|
||||||
$contactUrl = Contact::getRandomUrl();
|
$contact = Contact::getRandomContact();
|
||||||
|
|
||||||
if ($contactUrl) {
|
if (!empty($contact)) {
|
||||||
$link = Contact::magicLink($contactUrl);
|
$link = Contact::magicLinkByContact($contact);
|
||||||
$a->redirect($link);
|
$a->redirect($link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -208,16 +208,9 @@ class Post
|
||||||
$dropping = true;
|
$dropping = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$origin = $item['origin'];
|
$origin = $item['origin'] || $item['parent-origin'];
|
||||||
|
|
||||||
if (!$origin) {
|
if ($item['pinned']) {
|
||||||
/// @todo This shouldn't be done as query here, but better during the data creation.
|
|
||||||
// it is now done here, since during the RC phase we shouldn't make to intense changes.
|
|
||||||
$parent = PostModel::selectFirst(['origin'], ['id' => $item['parent']]);
|
|
||||||
if (DBA::isResult($parent)) {
|
|
||||||
$origin = $parent['origin'];
|
|
||||||
}
|
|
||||||
} elseif ($item['pinned']) {
|
|
||||||
$pinned = DI::l10n()->t('pinned item');
|
$pinned = DI::l10n()->t('pinned item');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,10 +245,9 @@ class Post
|
||||||
$profile_name = $item['author-link'];
|
$profile_name = $item['author-link'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$author = ['uid' => 0, 'id' => $item['author-id'],
|
|
||||||
'network' => $item['author-network'], 'url' => $item['author-link']];
|
|
||||||
|
|
||||||
if (Session::isAuthenticated()) {
|
if (Session::isAuthenticated()) {
|
||||||
|
$author = ['uid' => 0, 'id' => $item['author-id'],
|
||||||
|
'network' => $item['author-network'], 'url' => $item['author-link']];
|
||||||
$profile_link = Contact::magicLinkByContact($author);
|
$profile_link = Contact::magicLinkByContact($author);
|
||||||
} else {
|
} else {
|
||||||
$profile_link = $item['author-link'];
|
$profile_link = $item['author-link'];
|
||||||
|
@ -1005,7 +997,7 @@ class Post
|
||||||
// This will have been stored in $a->page_contact by our calling page.
|
// This will have been stored in $a->page_contact by our calling page.
|
||||||
// Put this person as the wall owner of the wall-to-wall notice.
|
// Put this person as the wall owner of the wall-to-wall notice.
|
||||||
|
|
||||||
$this->owner_url = Contact::magicLink($a->page_contact['url']);
|
$this->owner_url = Contact::magicLinkByContact($a->page_contact);
|
||||||
$this->owner_photo = $a->page_contact['thumb'];
|
$this->owner_photo = $a->page_contact['thumb'];
|
||||||
$this->owner_name = $a->page_contact['name'];
|
$this->owner_name = $a->page_contact['name'];
|
||||||
$this->wall_to_wall = true;
|
$this->wall_to_wall = true;
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
|
||||||
if (!defined('DB_UPDATE_VERSION')) {
|
if (!defined('DB_UPDATE_VERSION')) {
|
||||||
define('DB_UPDATE_VERSION', 1401);
|
define('DB_UPDATE_VERSION', 1402);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
@ -1279,11 +1279,11 @@ return [
|
||||||
"uid_hidden" => ["uid", "hidden"],
|
"uid_hidden" => ["uid", "hidden"],
|
||||||
"event-id" => ["event-id"],
|
"event-id" => ["event-id"],
|
||||||
"uid_wall" => ["uid", "wall"],
|
"uid_wall" => ["uid", "wall"],
|
||||||
"parent-uri-id" => ["parent-uri-id"],
|
"parent-uri-id_uid" => ["parent-uri-id", "uid"],
|
||||||
"thr-parent-id" => ["thr-parent-id"],
|
"thr-parent-id" => ["thr-parent-id"],
|
||||||
"external-id" => ["external-id"],
|
"external-id" => ["external-id"],
|
||||||
"owner-id" => ["owner-id"],
|
"owner-id" => ["owner-id"],
|
||||||
"author-id" => ["author-id"],
|
"author-id_uid" => ["author-id", "uid"],
|
||||||
"causer-id" => ["causer-id"],
|
"causer-id" => ["causer-id"],
|
||||||
"vid" => ["vid"],
|
"vid" => ["vid"],
|
||||||
"uid_received" => ["uid", "received"],
|
"uid_received" => ["uid", "received"],
|
||||||
|
|
|
@ -68,6 +68,7 @@
|
||||||
"unseen" => ["post-user", "unseen"],
|
"unseen" => ["post-user", "unseen"],
|
||||||
"deleted" => ["post-user", "deleted"],
|
"deleted" => ["post-user", "deleted"],
|
||||||
"origin" => ["post-user", "origin"],
|
"origin" => ["post-user", "origin"],
|
||||||
|
"parent-origin" => ["post-thread-user", "origin"],
|
||||||
"forum_mode" => ["post-thread-user", "forum_mode"],
|
"forum_mode" => ["post-thread-user", "forum_mode"],
|
||||||
"mention" => ["post-thread-user", "mention"],
|
"mention" => ["post-thread-user", "mention"],
|
||||||
"global" => ["post-user", "global"],
|
"global" => ["post-user", "global"],
|
||||||
|
|
Loading…
Reference in a new issue