Merge pull request #4324 from annando/items-rework
Some functions had been moved away from include/items.php
This commit is contained in:
commit
49b7a830dc
3 changed files with 86 additions and 90 deletions
|
@ -1073,20 +1073,6 @@ function get_item_id($guid, $uid = 0) {
|
||||||
return ["nick" => $nick, "id" => $id];
|
return ["nick" => $nick, "id" => $id];
|
||||||
}
|
}
|
||||||
|
|
||||||
// return - test
|
|
||||||
/// @TODO move to src/Model/Item.php
|
|
||||||
function get_item_contact($item, $contacts) {
|
|
||||||
if (! count($contacts) || (! is_array($item))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
foreach ($contacts as $contact) {
|
|
||||||
if ($contact['id'] == $item['contact-id']) {
|
|
||||||
return $contact;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* look for mention tags and setup a second delivery chain for forum/community posts if appropriate
|
* look for mention tags and setup a second delivery chain for forum/community posts if appropriate
|
||||||
* @param int $uid
|
* @param int $uid
|
||||||
|
@ -1198,78 +1184,6 @@ function tag_deliver($uid, $item_id)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @TODO move to src/Protocol/DFRN.php
|
|
||||||
function tgroup_check($uid, $item) {
|
|
||||||
|
|
||||||
$mention = false;
|
|
||||||
|
|
||||||
// check that the message originated elsewhere and is a top-level post
|
|
||||||
|
|
||||||
if (($item['wall']) || ($item['origin']) || ($item['uri'] != $item['parent-uri'])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @TODO Encapsulate this or find it encapsulated and replace all occurrances
|
|
||||||
$u = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
|
|
||||||
intval($uid)
|
|
||||||
);
|
|
||||||
if (! DBM::is_result($u)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$community_page = (($u[0]['page-flags'] == PAGE_COMMUNITY) ? true : false);
|
|
||||||
$prvgroup = (($u[0]['page-flags'] == PAGE_PRVGROUP) ? true : false);
|
|
||||||
|
|
||||||
$link = normalise_link(System::baseUrl() . '/profile/' . $u[0]['nickname']);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Diaspora uses their own hardwired link URL in @-tags
|
|
||||||
* instead of the one we supply with webfinger
|
|
||||||
*/
|
|
||||||
$dlink = normalise_link(System::baseUrl() . '/u/' . $u[0]['nickname']);
|
|
||||||
|
|
||||||
$cnt = preg_match_all('/[\@\!]\[url\=(.*?)\](.*?)\[\/url\]/ism', $item['body'], $matches, PREG_SET_ORDER);
|
|
||||||
if ($cnt) {
|
|
||||||
foreach ($matches as $mtch) {
|
|
||||||
if (link_compare($link, $mtch[1]) || link_compare($dlink, $mtch[1])) {
|
|
||||||
$mention = true;
|
|
||||||
logger('tgroup_check: mention found: ' . $mtch[2]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! $mention) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @TODO Combine both return statements into one
|
|
||||||
return (($community_page) || ($prvgroup));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function returns true if $update has an edited timestamp newer
|
|
||||||
* than $existing, i.e. $update contains new data which should override
|
|
||||||
* what's already there. If there is no timestamp yet, the update is
|
|
||||||
* assumed to be newer. If the update has no timestamp, the existing
|
|
||||||
* item is assumed to be up-to-date. If the timestamps are equal it
|
|
||||||
* assumes the update has been seen before and should be ignored.
|
|
||||||
*
|
|
||||||
* @TODO fix type-hints (both array)
|
|
||||||
*/
|
|
||||||
/// @TODO move to src/Protocol/DFRN.php
|
|
||||||
function edited_timestamp_is_newer($existing, $update) {
|
|
||||||
if (!x($existing, 'edited') || !$existing['edited']) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!x($update, 'edited') || !$update['edited']) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$existing_edited = datetime_convert('UTC', 'UTC', $existing['edited']);
|
|
||||||
$update_edited = datetime_convert('UTC', 'UTC', $update['edited']);
|
|
||||||
return (strcmp($existing_edited, $update_edited) < 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* consume_feed - process atom feed and update anything/everything we might need to update
|
* consume_feed - process atom feed and update anything/everything we might need to update
|
||||||
|
|
|
@ -2075,7 +2075,7 @@ class DFRN
|
||||||
{
|
{
|
||||||
$changed = false;
|
$changed = false;
|
||||||
|
|
||||||
if (edited_timestamp_is_newer($current, $item)) {
|
if (self::isEditedTimestampNewer($current, $item)) {
|
||||||
// do not accept (ignore) an earlier edit than one we currently have.
|
// do not accept (ignore) an earlier edit than one we currently have.
|
||||||
if (datetime_convert("UTC", "UTC", $item["edited"]) < $current["edited"]) {
|
if (datetime_convert("UTC", "UTC", $item["edited"]) < $current["edited"]) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -2417,7 +2417,7 @@ class DFRN
|
||||||
);
|
);
|
||||||
|
|
||||||
// Is there an existing item?
|
// Is there an existing item?
|
||||||
if (DBM::is_result($current) && edited_timestamp_is_newer($current[0], $item)
|
if (DBM::is_result($current) && self::isEditedTimestampNewer($current[0], $item)
|
||||||
&& (datetime_convert("UTC", "UTC", $item["edited"]) < $current[0]["edited"])
|
&& (datetime_convert("UTC", "UTC", $item["edited"]) < $current[0]["edited"])
|
||||||
) {
|
) {
|
||||||
logger("Item ".$item["uri"]." already existed.", LOGGER_DEBUG);
|
logger("Item ".$item["uri"]." already existed.", LOGGER_DEBUG);
|
||||||
|
@ -2708,7 +2708,7 @@ class DFRN
|
||||||
$item["owner-avatar"] = $importer["thumb"];
|
$item["owner-avatar"] = $importer["thumb"];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($importer["rel"] == CONTACT_IS_FOLLOWER) && (!tgroup_check($importer["importer_uid"], $item))) {
|
if (($importer["rel"] == CONTACT_IS_FOLLOWER) && (!self::tgroupCheck($importer["importer_uid"], $item))) {
|
||||||
logger("Contact ".$importer["id"]." is only follower and tgroup check was negative.", LOGGER_DEBUG);
|
logger("Contact ".$importer["id"]." is only follower and tgroup check was negative.", LOGGER_DEBUG);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -3089,4 +3089,73 @@ class DFRN
|
||||||
}
|
}
|
||||||
return ACTIVITY_POST;
|
return ACTIVITY_POST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function tgroupCheck($uid, $item)
|
||||||
|
{
|
||||||
|
$mention = false;
|
||||||
|
|
||||||
|
// check that the message originated elsewhere and is a top-level post
|
||||||
|
|
||||||
|
if ($item['wall'] || $item['origin'] || ($item['uri'] != $item['parent-uri'])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$u = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
|
||||||
|
intval($uid)
|
||||||
|
);
|
||||||
|
if (!DBM::is_result($u)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$community_page = ($u[0]['page-flags'] == PAGE_COMMUNITY);
|
||||||
|
$prvgroup = ($u[0]['page-flags'] == PAGE_PRVGROUP);
|
||||||
|
|
||||||
|
$link = normalise_link(System::baseUrl() . '/profile/' . $u[0]['nickname']);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Diaspora uses their own hardwired link URL in @-tags
|
||||||
|
* instead of the one we supply with webfinger
|
||||||
|
*/
|
||||||
|
$dlink = normalise_link(System::baseUrl() . '/u/' . $u[0]['nickname']);
|
||||||
|
|
||||||
|
$cnt = preg_match_all('/[\@\!]\[url\=(.*?)\](.*?)\[\/url\]/ism', $item['body'], $matches, PREG_SET_ORDER);
|
||||||
|
if ($cnt) {
|
||||||
|
foreach ($matches as $mtch) {
|
||||||
|
if (link_compare($link, $mtch[1]) || link_compare($dlink, $mtch[1])) {
|
||||||
|
$mention = true;
|
||||||
|
logger('mention found: ' . $mtch[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$mention) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $community_page || $prvgroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function returns true if $update has an edited timestamp newer
|
||||||
|
* than $existing, i.e. $update contains new data which should override
|
||||||
|
* what's already there. If there is no timestamp yet, the update is
|
||||||
|
* assumed to be newer. If the update has no timestamp, the existing
|
||||||
|
* item is assumed to be up-to-date. If the timestamps are equal it
|
||||||
|
* assumes the update has been seen before and should be ignored.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static function isEditedTimestampNewer($existing, $update)
|
||||||
|
{
|
||||||
|
if (!x($existing, 'edited') || !$existing['edited']) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!x($update, 'edited') || !$update['edited']) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$existing_edited = datetime_convert('UTC', 'UTC', $existing['edited']);
|
||||||
|
$update_edited = datetime_convert('UTC', 'UTC', $update['edited']);
|
||||||
|
|
||||||
|
return (strcmp($existing_edited, $update_edited) < 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,7 +238,7 @@ class Delivery {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$item_contact = get_item_contact($item,$icontacts);
|
$item_contact = self::getItemContact($item,$icontacts);
|
||||||
if (!$item_contact) {
|
if (!$item_contact) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -505,4 +505,17 @@ class Delivery {
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function getItemContact($item, $contacts)
|
||||||
|
{
|
||||||
|
if (!count($contacts) || !is_array($item)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
foreach ($contacts as $contact) {
|
||||||
|
if ($contact['id'] == $item['contact-id']) {
|
||||||
|
return $contact;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue