Merge pull request #5166 from annando/unsed-item-fields

Remove unused, unneeded or redundant item fields
This commit is contained in:
Hypolite Petovan 2018-06-03 12:19:50 -04:00 committed by GitHub
commit 0a13ab6b9f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 164 additions and 345 deletions

View file

@ -504,7 +504,6 @@ CREATE TABLE IF NOT EXISTS `item` (
`pubmail` boolean NOT NULL DEFAULT '0' COMMENT '', `pubmail` boolean NOT NULL DEFAULT '0' COMMENT '',
`moderated` boolean NOT NULL DEFAULT '0' COMMENT '', `moderated` boolean NOT NULL DEFAULT '0' COMMENT '',
`visible` boolean NOT NULL DEFAULT '0' COMMENT '', `visible` boolean NOT NULL DEFAULT '0' COMMENT '',
`spam` boolean NOT NULL DEFAULT '0' COMMENT '',
`starred` boolean NOT NULL DEFAULT '0' COMMENT 'item has been favourited', `starred` boolean NOT NULL DEFAULT '0' COMMENT 'item has been favourited',
`bookmark` boolean NOT NULL DEFAULT '0' COMMENT 'item has been bookmarked', `bookmark` boolean NOT NULL DEFAULT '0' COMMENT 'item has been bookmarked',
`unseen` boolean NOT NULL DEFAULT '1' COMMENT 'item has not been seen', `unseen` boolean NOT NULL DEFAULT '1' COMMENT 'item has not been seen',
@ -976,7 +975,6 @@ CREATE TABLE IF NOT EXISTS `thread` (
`pubmail` boolean NOT NULL DEFAULT '0' COMMENT '', `pubmail` boolean NOT NULL DEFAULT '0' COMMENT '',
`moderated` boolean NOT NULL DEFAULT '0' COMMENT '', `moderated` boolean NOT NULL DEFAULT '0' COMMENT '',
`visible` boolean NOT NULL DEFAULT '0' COMMENT '', `visible` boolean NOT NULL DEFAULT '0' COMMENT '',
`spam` boolean NOT NULL DEFAULT '0' COMMENT '',
`starred` boolean NOT NULL DEFAULT '0' COMMENT '', `starred` boolean NOT NULL DEFAULT '0' COMMENT '',
`ignored` boolean NOT NULL DEFAULT '0' COMMENT '', `ignored` boolean NOT NULL DEFAULT '0' COMMENT '',
`bookmark` boolean NOT NULL DEFAULT '0' COMMENT '', `bookmark` boolean NOT NULL DEFAULT '0' COMMENT '',

View file

@ -492,7 +492,7 @@ function api_rss_extra(App $a, $arr, $user_info)
*/ */
function api_unique_id_to_nurl($id) function api_unique_id_to_nurl($id)
{ {
$r = dba::selectFirst('contact', ['nurl'], ['uid' => 0, 'id' => $id]); $r = dba::selectFirst('contact', ['nurl'], ['id' => $id]);
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
return $r["nurl"]; return $r["nurl"];
@ -532,7 +532,7 @@ function api_get_user(App $a, $contact_id = null)
$user = dbesc(api_unique_id_to_nurl(intval($contact_id))); $user = dbesc(api_unique_id_to_nurl(intval($contact_id)));
if ($user == "") { if ($user == "") {
throw new BadRequestException("User not found."); throw new BadRequestException("User ID ".$contact_id." not found.");
} }
$url = $user; $url = $user;
@ -546,7 +546,7 @@ function api_get_user(App $a, $contact_id = null)
$user = dbesc(api_unique_id_to_nurl($_GET['user_id'])); $user = dbesc(api_unique_id_to_nurl($_GET['user_id']));
if ($user == "") { if ($user == "") {
throw new BadRequestException("User not found."); throw new BadRequestException("User ID ".$_GET['user_id']." not found.");
} }
$url = $user; $url = $user;
@ -670,13 +670,14 @@ function api_get_user(App $a, $contact_id = null)
'statusnet_profile_url' => $r[0]["url"], 'statusnet_profile_url' => $r[0]["url"],
'uid' => 0, 'uid' => 0,
'cid' => Contact::getIdForURL($r[0]["url"], api_user(), true), 'cid' => Contact::getIdForURL($r[0]["url"], api_user(), true),
'pid' => Contact::getIdForURL($r[0]["url"], 0, true),
'self' => 0, 'self' => 0,
'network' => $r[0]["network"], 'network' => $r[0]["network"],
]; ];
return $ret; return $ret;
} else { } else {
throw new BadRequestException("User not found."); throw new BadRequestException("User ".$url." not found.");
} }
} }
@ -809,6 +810,7 @@ function api_get_user(App $a, $contact_id = null)
'statusnet_profile_url' => $uinfo[0]['url'], 'statusnet_profile_url' => $uinfo[0]['url'],
'uid' => intval($uinfo[0]['uid']), 'uid' => intval($uinfo[0]['uid']),
'cid' => intval($uinfo[0]['cid']), 'cid' => intval($uinfo[0]['cid']),
'pid' => Contact::getIdForURL($uinfo[0]["url"], 0, true),
'self' => $uinfo[0]['self'], 'self' => $uinfo[0]['self'],
'network' => $uinfo[0]['network'], 'network' => $uinfo[0]['network'],
]; ];
@ -856,16 +858,12 @@ function api_get_user(App $a, $contact_id = null)
*/ */
function api_item_get_user(App $a, $item) function api_item_get_user(App $a, $item)
{ {
$status_user = api_get_user($a, $item["author-link"]); $status_user = api_get_user($a, $item["author-id"]);
$status_user["protected"] = (($item["allow_cid"] != "") || $status_user["protected"] = $item["private"];
($item["allow_gid"] != "") ||
($item["deny_cid"] != "") ||
($item["deny_gid"] != "") ||
$item["private"]);
if ($item['thr-parent'] == $item['uri']) { if ($item['thr-parent'] == $item['uri']) {
$owner_user = api_get_user($a, $item["owner-link"]); $owner_user = api_get_user($a, $item["owner-id"]);
} else { } else {
$owner_user = $status_user; $owner_user = $status_user;
} }
@ -1356,31 +1354,17 @@ function api_status_show($type)
logger('api_status_show: user_info: '.print_r($user_info, true), LOGGER_DEBUG); logger('api_status_show: user_info: '.print_r($user_info, true), LOGGER_DEBUG);
if ($type == "raw") { if ($type == "raw") {
$privacy_sql = "AND `item`.`allow_cid`='' AND `item`.`allow_gid`='' AND `item`.`deny_cid`='' AND `item`.`deny_gid`=''"; $privacy_sql = "AND NOT `private`";
} else { } else {
$privacy_sql = ""; $privacy_sql = "";
} }
// get last public wall message // get last public wall message
$lastwall = q( $condition = ["`owner-id` = ? AND `uid` = ? AND `type` != 'activity' ".$privacy_sql,
"SELECT `item`.* $user_info['pid'], api_user()];
FROM `item` $lastwall = dba::selectFirst('item', [], $condition, ['order' => ['id' => true]]);
WHERE `item`.`contact-id` = %d AND `item`.`uid` = %d
AND ((`item`.`author-link` IN ('%s', '%s')) OR (`item`.`owner-link` IN ('%s', '%s')))
AND `item`.`type` != 'activity' $privacy_sql
ORDER BY `item`.`id` DESC
LIMIT 1",
intval($user_info['cid']),
intval(api_user()),
dbesc($user_info['url']),
dbesc(normalise_link($user_info['url'])),
dbesc($user_info['url']),
dbesc(normalise_link($user_info['url']))
);
if (DBM::is_result($lastwall)) { if (DBM::is_result($lastwall)) {
$lastwall = $lastwall[0];
$in_reply_to = api_in_reply_to($lastwall); $in_reply_to = api_in_reply_to($lastwall);
$converted = api_convert_item($lastwall); $converted = api_convert_item($lastwall);
@ -1428,10 +1412,10 @@ function api_status_show($type)
$status_info["entities"] = $converted["entities"]; $status_info["entities"] = $converted["entities"];
} }
if (($lastwall['item_network'] != "") && ($status_info["source"] == 'web')) { if ($status_info["source"] == 'web') {
$status_info["source"] = ContactSelector::networkToName($lastwall['item_network'], $user_info['url']); $status_info["source"] = ContactSelector::networkToName($lastwall['network'], $user_info['url']);
} elseif (($lastwall['item_network'] != "") && (ContactSelector::networkToName($lastwall['item_network'], $user_info['url']) != $status_info["source"])) { } elseif (ContactSelector::networkToName($lastwall['network'], $user_info['url']) != $status_info["source"]) {
$status_info["source"] = trim($status_info["source"].' ('.ContactSelector::networkToName($lastwall['item_network'], $user_info['url']).')'); $status_info["source"] = trim($status_info["source"].' ('.ContactSelector::networkToName($lastwall['network'], $user_info['url']).')');
} }
// "uid" and "self" are only needed for some internal stuff, so remove it from here // "uid" and "self" are only needed for some internal stuff, so remove it from here
@ -1460,28 +1444,12 @@ function api_users_show($type)
$a = get_app(); $a = get_app();
$user_info = api_get_user($a); $user_info = api_get_user($a);
$lastwall = q(
"SELECT `item`.* $condition = ["`owner-id` = ? AND `uid` = ? AND `verb` = ? AND `type` != 'activity' AND NOT `private`",
FROM `item` $user_info['pid'], api_user(), ACTIVITY_POST];
INNER JOIN `contact` ON `contact`.`id`=`item`.`contact-id` AND `contact`.`uid` = `item`.`uid` $lastwall = dba::selectFirst('item', [], $condition, ['order' => ['id' => true]]);
WHERE `item`.`uid` = %d AND `verb` = '%s' AND `item`.`contact-id` = %d
AND ((`item`.`author-link` IN ('%s', '%s')) OR (`item`.`owner-link` IN ('%s', '%s')))
AND `type`!='activity'
AND `item`.`allow_cid`='' AND `item`.`allow_gid`='' AND `item`.`deny_cid`='' AND `item`.`deny_gid`=''
ORDER BY `id` DESC
LIMIT 1",
intval(api_user()),
dbesc(ACTIVITY_POST),
intval($user_info['cid']),
dbesc($user_info['url']),
dbesc(normalise_link($user_info['url'])),
dbesc($user_info['url']),
dbesc(normalise_link($user_info['url']))
);
if (DBM::is_result($lastwall)) { if (DBM::is_result($lastwall)) {
$lastwall = $lastwall[0];
$in_reply_to = api_in_reply_to($lastwall); $in_reply_to = api_in_reply_to($lastwall);
$converted = api_convert_item($lastwall); $converted = api_convert_item($lastwall);
@ -1519,12 +1487,12 @@ function api_users_show($type)
$user_info["status"]["entities"] = $converted["entities"]; $user_info["status"]["entities"] = $converted["entities"];
} }
if (($lastwall['item_network'] != "") && ($user_info["status"]["source"] == 'web')) { if ($user_info["status"]["source"] == 'web') {
$user_info["status"]["source"] = ContactSelector::networkToName($lastwall['item_network'], $user_info['url']); $user_info["status"]["source"] = ContactSelector::networkToName($lastwall['network'], $user_info['url']);
} }
if (($lastwall['item_network'] != "") && (ContactSelector::networkToName($lastwall['item_network'], $user_info['url']) != $user_info["status"]["source"])) { if (ContactSelector::networkToName($lastwall['network'], $user_info['url']) != $user_info["status"]["source"]) {
$user_info["status"]["source"] = trim($user_info["status"]["source"] . ' (' . ContactSelector::networkToName($lastwall['item_network'], $user_info['url']) . ')'); $user_info["status"]["source"] = trim($user_info["status"]["source"] . ' (' . ContactSelector::networkToName($lastwall['network'], $user_info['url']) . ')');
} }
} }
@ -1573,10 +1541,10 @@ function api_users_search($type)
} }
$userlist = ["users" => $userlist]; $userlist = ["users" => $userlist];
} else { } else {
throw new BadRequestException("User not found."); throw new BadRequestException("User ".$_GET["q"]." not found.");
} }
} else { } else {
throw new BadRequestException("User not found."); throw new BadRequestException("No user specified.");
} }
return api_format_data("users", $type, $userlist); return api_format_data("users", $type, $userlist);
@ -1735,13 +1703,8 @@ function api_statuses_home_timeline($type)
$sql_extra .= ' AND `item`.`parent` = ' . intval($conversation_id); $sql_extra .= ' AND `item`.`parent` = ' . intval($conversation_id);
} }
$r = q( $r = q("SELECT `item`.* FROM `item`
"SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`
FROM `item`
STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` = `item`.`uid`
AND (NOT `contact`.`blocked` OR `contact`.`pending`) AND (NOT `contact`.`blocked` OR `contact`.`pending`)
WHERE `item`.`uid` = %d AND `verb` = '%s' WHERE `item`.`uid` = %d AND `verb` = '%s'
AND `item`.`visible` AND NOT `item`.`moderated` AND NOT `item`.`deleted` AND `item`.`visible` AND NOT `item`.`moderated` AND NOT `item`.`deleted`
@ -2016,12 +1979,8 @@ function api_statuses_show($type)
$id = $item['id']; $id = $item['id'];
$r = q( $r = q(
"SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, "SELECT `item`.* FROM `item`
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`
FROM `item`
INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` = `item`.`uid`
AND (NOT `contact`.`blocked` OR `contact`.`pending`) AND (NOT `contact`.`blocked` OR `contact`.`pending`)
WHERE `item`.`visible` AND NOT `item`.`moderated` AND NOT `item`.`deleted` WHERE `item`.`visible` AND NOT `item`.`moderated` AND NOT `item`.`deleted`
AND `item`.`uid` IN (0, %d) AND `item`.`verb` = '%s' AND `item`.`uid` IN (0, %d) AND `item`.`verb` = '%s'
@ -2107,13 +2066,8 @@ function api_conversation_show($type)
$sql_extra = ' AND `item`.`id` <= ' . intval($max_id); $sql_extra = ' AND `item`.`id` <= ' . intval($max_id);
} }
$r = q( $r = q("SELECT `item`.* FROM `item`
"SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`
FROM `item`
STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` = `item`.`uid`
AND (NOT `contact`.`blocked` OR `contact`.`pending`) AND (NOT `contact`.`blocked` OR `contact`.`pending`)
WHERE `item`.`parent` = %d AND `item`.`visible` WHERE `item`.`parent` = %d AND `item`.`visible`
AND NOT `item`.`moderated` AND NOT `item`.`deleted` AND NOT `item`.`moderated` AND NOT `item`.`deleted`
@ -2175,17 +2129,11 @@ function api_statuses_repeat($type)
logger('API: api_statuses_repeat: '.$id); logger('API: api_statuses_repeat: '.$id);
$r = q( $r = q("SELECT `item`.* FROM `item`
"SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, `contact`.`nick` as `reply_author`, STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
`contact`.`name`, `contact`.`photo` as `reply_photo`, `contact`.`url` as `reply_url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`
FROM `item`
INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` = `item`.`uid`
AND (NOT `contact`.`blocked` OR `contact`.`pending`) AND (NOT `contact`.`blocked` OR `contact`.`pending`)
WHERE `item`.`visible` AND NOT `item`.`moderated` AND NOT `item`.`deleted` WHERE `item`.`visible` AND NOT `item`.`moderated` AND NOT `item`.`deleted`
AND NOT `item`.`private` AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND NOT `item`.`private`
AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = ''
AND `item`.`id`=%d", AND `item`.`id`=%d",
intval($id) intval($id)
); );
@ -2299,36 +2247,25 @@ function api_statuses_mentions($type)
$start = ($page - 1) * $count; $start = ($page - 1) * $count;
// Ugly code - should be changed
$myurl = System::baseUrl() . '/profile/'. $a->user['nickname'];
$myurl = substr($myurl, strpos($myurl, '://') + 3);
$myurl = str_replace('www.', '', $myurl);
$sql_extra = ''; $sql_extra = '';
if ($max_id > 0) { if ($max_id > 0) {
$sql_extra .= ' AND `item`.`id` <= ' . intval($max_id); $sql_extra = ' AND `item`.`id` <= ' . intval($max_id);
} }
$r = q( $r = q("SELECT `item`.* FROM `item` FORCE INDEX (`uid_id`)
"SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`
FROM `item` FORCE INDEX (`uid_id`)
STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` = `item`.`uid`
AND (NOT `contact`.`blocked` OR `contact`.`pending`) AND (NOT `contact`.`blocked` OR `contact`.`pending`)
WHERE `item`.`uid` = %d AND `verb` = '%s' WHERE `item`.`uid` = %d AND `item`.`verb` = '%s'
AND NOT (`item`.`author-link` IN ('https://%s', 'http://%s')) AND `item`.`author-id` != %d
AND `item`.`visible` AND NOT `item`.`moderated` AND NOT `item`.`deleted` AND `item`.`visible` AND NOT `item`.`moderated` AND NOT `item`.`deleted`
AND `item`.`parent` IN (SELECT `iid` FROM `thread` WHERE `uid` = %d AND `mention` AND !`ignored`) AND `item`.`parent` IN (SELECT `iid` FROM `thread` WHERE `uid` = %d AND `mention` AND NOT `ignored`)
$sql_extra $sql_extra
AND `item`.`id` > %d AND `item`.`id` > %d
ORDER BY `item`.`id` DESC LIMIT %d ,%d", ORDER BY `item`.`id` DESC LIMIT %d ,%d",
intval(api_user()), intval(api_user()),
dbesc(ACTIVITY_POST), dbesc(ACTIVITY_POST),
dbesc(protect_sprintf($myurl)), intval($user_info['pid']),
dbesc(protect_sprintf($myurl)),
intval(api_user()), intval(api_user()),
intval($since_id), intval($since_id),
intval($start), intval($start),
@ -2408,13 +2345,8 @@ function api_statuses_user_timeline($type)
$sql_extra .= ' AND `item`.`id` <= ' . intval($max_id); $sql_extra .= ' AND `item`.`id` <= ' . intval($max_id);
} }
$r = q( $r = q("SELECT `item`.* FROM `item` FORCE INDEX (`uid_contactid_id`)
"SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`
FROM `item` FORCE INDEX (`uid_contactid_id`)
STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` = `item`.`uid`
AND (NOT `contact`.`blocked` OR `contact`.`pending`) AND (NOT `contact`.`blocked` OR `contact`.`pending`)
WHERE `item`.`uid` = %d AND `verb` = '%s' WHERE `item`.`uid` = %d AND `verb` = '%s'
AND `item`.`contact-id` = %d AND `item`.`contact-id` = %d
@ -2566,17 +2498,12 @@ function api_favorites($type)
$sql_extra .= ' AND `item`.`id` <= ' . intval($max_id); $sql_extra .= ' AND `item`.`id` <= ' . intval($max_id);
} }
$r = q( $r = q("SELECT `item`.* FROM `item`
"SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`
FROM `item`, `contact`
WHERE `item`.`uid` = %d
AND `item`.`visible` = 1 AND `item`.`moderated` = 0 AND `item`.`deleted` = 0
AND `item`.`starred` = 1
AND `contact`.`id` = `item`.`contact-id`
AND (NOT `contact`.`blocked` OR `contact`.`pending`) AND (NOT `contact`.`blocked` OR `contact`.`pending`)
WHERE `item`.`uid` = %d
AND `item`.`visible` AND NOT `item`.`moderated` AND NOT `item`.`deleted`
AND `item`.`starred`
$sql_extra $sql_extra
AND `item`.`id`>%d AND `item`.`id`>%d
ORDER BY `item`.`id` DESC LIMIT %d ,%d", ORDER BY `item`.`id` DESC LIMIT %d ,%d",
@ -3001,8 +2928,8 @@ function api_format_items_activities(&$item, $type = "json")
]; ];
$items = q( $items = q(
'SELECT * FROM item 'SELECT * FROM `item`
WHERE uid=%d AND `thr-parent`="%s" AND visible AND NOT deleted', WHERE `uid` = %d AND `thr-parent` = "%s" AND `visible` AND NOT `deleted`',
intval($item['uid']), intval($item['uid']),
dbesc($item['uri']) dbesc($item['uri'])
); );
@ -3012,7 +2939,7 @@ function api_format_items_activities(&$item, $type = "json")
//builtin_activity_puller($i, $activities); //builtin_activity_puller($i, $activities);
// get user data and add it to the array of the activity // get user data and add it to the array of the activity
$user = api_get_user($a, $i['author-link']); $user = api_get_user($a, $i['author-id']);
switch ($i['verb']) { switch ($i['verb']) {
case ACTIVITY_LIKE: case ACTIVITY_LIKE:
$activities['like'][] = $user; $activities['like'][] = $user;
@ -3168,26 +3095,18 @@ function api_format_items($r, $user_info, $filter_user = false, $type = "json")
$status["entities"] = $converted["entities"]; $status["entities"] = $converted["entities"];
} }
if (($item['item_network'] != "") && ($status["source"] == 'web')) { if ($status["source"] == 'web') {
$status["source"] = ContactSelector::networkToName($item['item_network'], $user_info['url']); $status["source"] = ContactSelector::networkToName($item['network'], $user_info['url']);
} elseif (($item['item_network'] != "") && (ContactSelector::networkToName($item['item_network'], $user_info['url']) != $status["source"])) { } elseif (ContactSelector::networkToName($item['network'], $user_info['url']) != $status["source"]) {
$status["source"] = trim($status["source"].' ('.ContactSelector::networkToName($item['item_network'], $user_info['url']).')'); $status["source"] = trim($status["source"].' ('.ContactSelector::networkToName($item['network'], $user_info['url']).')');
} }
// Retweets are only valid for top postings
// It doesn't work reliable with the link if its a feed
//$IsRetweet = ($item['owner-link'] != $item['author-link']);
//if ($IsRetweet)
// $IsRetweet = (($item['owner-name'] != $item['author-name']) || ($item['owner-avatar'] != $item['author-avatar']));
if ($item["id"] == $item["parent"]) { if ($item["id"] == $item["parent"]) {
$retweeted_item = api_share_as_retweet($item); $retweeted_item = api_share_as_retweet($item);
if ($retweeted_item !== false) { if ($retweeted_item !== false) {
$retweeted_status = $status; $retweeted_status = $status;
try { try {
$retweeted_status["user"] = api_get_user($a, $retweeted_item["author-link"]); $retweeted_status["user"] = api_get_user($a, $retweeted_item["author-id"]);
} catch (BadRequestException $e) { } catch (BadRequestException $e) {
// user not found. should be found? // user not found. should be found?
/// @todo check if the user should be always found /// @todo check if the user should be always found
@ -3395,13 +3314,8 @@ function api_lists_statuses($type)
$sql_extra .= ' AND `item`.`parent` = ' . intval($conversation_id); $sql_extra .= ' AND `item`.`parent` = ' . intval($conversation_id);
} }
$statuses = dba::p( $statuses = dba::p("SELECT `item`.* FROM `item`
"SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`, `group_member`.`gid`
FROM `item`
STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` = `item`.`uid`
AND (NOT `contact`.`blocked` OR `contact`.`pending`) AND (NOT `contact`.`blocked` OR `contact`.`pending`)
STRAIGHT_JOIN `group_member` ON `group_member`.`contact-id` = `item`.`contact-id` STRAIGHT_JOIN `group_member` ON `group_member`.`contact-id` = `item`.`contact-id`
WHERE `item`.`uid` = ? AND `verb` = ? WHERE `item`.`uid` = ? AND `verb` = ?
@ -4936,13 +4850,8 @@ function prepare_photo_data($type, $scale, $photo_id)
$data['photo']['friendica_activities'] = api_format_items_activities($item[0], $type); $data['photo']['friendica_activities'] = api_format_items_activities($item[0], $type);
// retrieve comments on photo // retrieve comments on photo
$r = q( $r = q("SELECT `item`.* FROM `item`
"SELECT `item`.*, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`, STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`
FROM `item`
STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`contact-id` AND `contact`.`uid` = `item`.`uid`
AND (NOT `contact`.`blocked` OR `contact`.`pending`) AND (NOT `contact`.`blocked` OR `contact`.`pending`)
WHERE `item`.`parent` = %d AND `item`.`visible` WHERE `item`.`parent` = %d AND `item`.`visible`
AND NOT `item`.`moderated` AND NOT `item`.`deleted` AND NOT `item`.`moderated` AND NOT `item`.`deleted`
@ -5254,7 +5163,7 @@ function api_in_reply_to($item)
$in_reply_to['status_id_str'] = (string) intval($in_reply_to['status_id']); $in_reply_to['status_id_str'] = (string) intval($in_reply_to['status_id']);
$r = q( $r = q(
"SELECT `contact`.`nick`, `contact`.`name`, `contact`.`id`, `contact`.`url` FROM item "SELECT `contact`.`nick`, `contact`.`name`, `contact`.`id`, `contact`.`url` FROM `item`
STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`author-id` STRAIGHT_JOIN `contact` ON `contact`.`id` = `item`.`author-id`
WHERE `item`.`id` = %d LIMIT 1", WHERE `item`.`id` = %d LIMIT 1",
intval($in_reply_to['status_id']) intval($in_reply_to['status_id'])

View file

@ -418,7 +418,6 @@ These Fields are not added below (yet). They are here to for bug search.
`item`.`inform`, `item`.`inform`,
`item`.`pubmail`, `item`.`pubmail`,
`item`.`visible`, `item`.`visible`,
`item`.`spam`,
`item`.`bookmark`, `item`.`bookmark`,
`item`.`unseen`, `item`.`unseen`,
`item`.`deleted`, `item`.`deleted`,
@ -426,10 +425,12 @@ These Fields are not added below (yet). They are here to for bug search.
`item`.`mention`, `item`.`mention`,
`item`.`global`, `item`.`global`,
`item`.`shadow`, `item`.`shadow`,
`item`.`author-link`, `item`.`author-name`, `item`.`author-avatar`,
`item`.`owner-link`, `item`.`owner-name`, `item`.`owner-avatar`,
*/ */
return "`item`.`author-id`, `item`.`author-link`, `item`.`author-name`, `item`.`author-avatar`, return "`item`.`author-id`,
`item`.`owner-id`, `item`.`owner-link`, `item`.`owner-name`, `item`.`owner-avatar`, `item`.`owner-id`,
`item`.`contact-id`, `item`.`uid`, `item`.`id`, `item`.`parent`, `item`.`contact-id`, `item`.`uid`, `item`.`id`, `item`.`parent`,
`item`.`uri`, `item`.`thr-parent`, `item`.`parent-uri`, `item`.`content-warning`, `item`.`uri`, `item`.`thr-parent`, `item`.`parent-uri`, `item`.`content-warning`,
`item`.`commented`, `item`.`created`, `item`.`edited`, `item`.`received`, `item`.`commented`, `item`.`created`, `item`.`edited`, `item`.`received`,
@ -441,7 +442,9 @@ These Fields are not added below (yet). They are here to for bug search.
`item`.`allow_cid`, `item`.`allow_gid`, `item`.`deny_cid`, `item`.`deny_gid`, `item`.`allow_cid`, `item`.`allow_gid`, `item`.`deny_cid`, `item`.`deny_gid`,
`item`.`id` AS `item_id`, `item`.`network` AS `item_network`, `item`.`id` AS `item_id`, `item`.`network` AS `item_network`,
`author`.`thumb` AS `author-thumb`, `owner`.`thumb` AS `owner-thumb`, `author`.`url` AS `author-link`, `author`.`name` AS `author-name`, `author`.`thumb` AS `author-avatar`,
`owner`.`url` AS `owner-link`, `owner`.`name` AS `owner-name`, `owner`.`thumb` AS `owner-avatar`,
`contact`.`url` AS `contact-link`, `contact`.`name` AS `contact-name`, `contact`.`thumb` AS `contact-avatar`,
`contact`.`network`, `contact`.`url`, `contact`.`name`, `contact`.`writable`, `contact`.`network`, `contact`.`url`, `contact`.`name`, `contact`.`writable`,
`contact`.`self`, `contact`.`id` AS `cid`, `contact`.`alias`, `contact`.`self`, `contact`.`id` AS `cid`, `contact`.`alias`,
@ -532,7 +535,6 @@ function conversation(App $a, $items, $mode, $update, $preview = false, $order =
. ((x($_GET, 'bmark')) ? '&bmark=' . $_GET['bmark'] : '') . ((x($_GET, 'bmark')) ? '&bmark=' . $_GET['bmark'] : '')
. ((x($_GET, 'liked')) ? '&liked=' . $_GET['liked'] : '') . ((x($_GET, 'liked')) ? '&liked=' . $_GET['liked'] : '')
. ((x($_GET, 'conv')) ? '&conv=' . $_GET['conv'] : '') . ((x($_GET, 'conv')) ? '&conv=' . $_GET['conv'] : '')
. ((x($_GET, 'spam')) ? '&spam=' . $_GET['spam'] : '')
. ((x($_GET, 'nets')) ? '&nets=' . $_GET['nets'] : '') . ((x($_GET, 'nets')) ? '&nets=' . $_GET['nets'] : '')
. ((x($_GET, 'cmin')) ? '&cmin=' . $_GET['cmin'] : '') . ((x($_GET, 'cmin')) ? '&cmin=' . $_GET['cmin'] : '')
. ((x($_GET, 'cmax')) ? '&cmax=' . $_GET['cmax'] : '') . ((x($_GET, 'cmax')) ? '&cmax=' . $_GET['cmax'] : '')
@ -658,6 +660,13 @@ function conversation(App $a, $items, $mode, $update, $preview = false, $order =
continue; continue;
} }
if ($item['network'] == NETWORK_FEED) {
$item['author-avatar'] = $item['contact-avatar'];
$item['author-name'] = $item['contact-name'];
$item['owner-avatar'] = $item['contact-avatar'];
$item['owner-name'] = $item['contact-name'];
}
$profile_name = (strlen($item['author-name']) ? $item['author-name'] : $item['name']); $profile_name = (strlen($item['author-name']) ? $item['author-name'] : $item['name']);
if ($item['author-link'] && !$item['author-name']) { if ($item['author-link'] && !$item['author-name']) {
$profile_name = $item['author-link']; $profile_name = $item['author-link'];
@ -671,24 +680,6 @@ function conversation(App $a, $items, $mode, $update, $preview = false, $order =
$sparkle = ' sparkle'; $sparkle = ' sparkle';
} }
if (!x($item, 'author-thumb') || ($item['author-thumb'] == "")) {
$author_contact = Contact::getDetailsByURL($item['author-link'], $profile_owner);
if ($author_contact["thumb"]) {
$item['author-thumb'] = $author_contact["thumb"];
} else {
$item['author-thumb'] = $item['author-avatar'];
}
}
if (!isset($item['owner-thumb']) || ($item['owner-thumb'] == "")) {
$owner_contact = Contact::getDetailsByURL($item['owner-link'], $profile_owner);
if ($owner_contact["thumb"]) {
$item['owner-thumb'] = $owner_contact["thumb"];
} else {
$item['owner-thumb'] = $item['owner-avatar'];
}
}
$locate = ['location' => $item['location'], 'coord' => $item['coord'], 'html' => '']; $locate = ['location' => $item['location'], 'coord' => $item['coord'], 'html' => ''];
Addon::callHooks('render_location',$locate); Addon::callHooks('render_location',$locate);
@ -749,7 +740,7 @@ function conversation(App $a, $items, $mode, $update, $preview = false, $order =
'name' => $profile_name_e, 'name' => $profile_name_e,
'sparkle' => $sparkle, 'sparkle' => $sparkle,
'lock' => $lock, 'lock' => $lock,
'thumb' => System::removedBaseUrl(proxy_url($item['author-thumb'], false, PROXY_SIZE_THUMB)), 'thumb' => System::removedBaseUrl(proxy_url($item['author-avatar'], false, PROXY_SIZE_THUMB)),
'title' => $title_e, 'title' => $title_e,
'body' => $body_e, 'body' => $body_e,
'tags' => $tags_e, 'tags' => $tags_e,
@ -768,7 +759,7 @@ function conversation(App $a, $items, $mode, $update, $preview = false, $order =
'indent' => '', 'indent' => '',
'owner_name' => $owner_name_e, 'owner_name' => $owner_name_e,
'owner_url' => $owner_url, 'owner_url' => $owner_url,
'owner_photo' => System::removedBaseUrl(proxy_url($item['owner-thumb'], false, PROXY_SIZE_THUMB)), 'owner_photo' => System::removedBaseUrl(proxy_url($item['owner-avatar'], false, PROXY_SIZE_THUMB)),
'plink' => get_plink($item), 'plink' => get_plink($item),
'edpost' => false, 'edpost' => false,
'isstarred' => $isstarred, 'isstarred' => $isstarred,

View file

@ -152,7 +152,7 @@ function notification($params)
} }
// "your post" // "your post"
if (DBM::is_result($item) && $item['owner-name'] == $item['author-name'] && $item['wall']) { if (DBM::is_result($item) && $item['owner-id'] == $item['author-id'] && $item['wall']) {
$dest_str = L10n::t('%1$s commented on [url=%2$s]your %3$s[/url]', $dest_str = L10n::t('%1$s commented on [url=%2$s]your %3$s[/url]',
'[url='.$params['source_link'].']'.$params['source_name'].'[/url]', '[url='.$params['source_link'].']'.$params['source_name'].'[/url]',
$itemlink, $itemlink,

View file

@ -928,7 +928,7 @@ function admin_page_site_post(App $a)
update_table("term", ['url'], $old_url, $new_url); update_table("term", ['url'], $old_url, $new_url);
update_table("contact", ['photo', 'thumb', 'micro', 'url', 'nurl', 'alias', 'request', 'notify', 'poll', 'confirm', 'poco', 'avatar'], $old_url, $new_url); update_table("contact", ['photo', 'thumb', 'micro', 'url', 'nurl', 'alias', 'request', 'notify', 'poll', 'confirm', 'poco', 'avatar'], $old_url, $new_url);
update_table("gcontact", ['url', 'nurl', 'photo', 'server_url', 'notify', 'alias'], $old_url, $new_url); update_table("gcontact", ['url', 'nurl', 'photo', 'server_url', 'notify', 'alias'], $old_url, $new_url);
update_table("item", ['owner-link', 'owner-avatar', 'author-link', 'author-avatar', 'body', 'plink', 'tag'], $old_url, $new_url); update_table("item", ['owner-link', 'author-link', 'body', 'plink', 'tag'], $old_url, $new_url);
// update profile addresses in the format "user@server.tld" // update profile addresses in the format "user@server.tld"
update_table("contact", ['addr'], $old_host, $new_host); update_table("contact", ['addr'], $old_host, $new_host);

View file

@ -49,8 +49,7 @@ function display_init(App $a)
// Does the local user have this item? // Does the local user have this item?
if (local_user()) { if (local_user()) {
$r = dba::fetch_first("SELECT `id`, `parent`, `author-name`, `author-link`, $r = dba::fetch_first("SELECT `id`, `parent`, `author-id`, `body`, `uid`
`author-avatar`, `network`, `body`, `uid`, `owner-link`
FROM `item` WHERE `visible` AND NOT `deleted` AND NOT `moderated` FROM `item` WHERE `visible` AND NOT `deleted` AND NOT `moderated`
AND `guid` = ? AND `uid` = ? LIMIT 1", $a->argv[1], local_user()); AND `guid` = ? AND `uid` = ? LIMIT 1", $a->argv[1], local_user());
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
@ -60,8 +59,7 @@ function display_init(App $a)
// Is it an item with uid=0? // Is it an item with uid=0?
if (!DBM::is_result($r)) { if (!DBM::is_result($r)) {
$r = dba::fetch_first("SELECT `id`, `parent`, `author-name`, `author-link`, $r = dba::fetch_first("SELECT `id`, `parent`, `author-id`, `body`, `uid`
`author-avatar`, `network`, `body`, `uid`, `owner-link`
FROM `item` WHERE `visible` AND NOT `deleted` AND NOT `moderated` FROM `item` WHERE `visible` AND NOT `deleted` AND NOT `moderated`
AND NOT `private` AND `uid` = 0 AND NOT `private` AND `uid` = 0
AND `guid` = ? LIMIT 1", $a->argv[1]); AND `guid` = ? LIMIT 1", $a->argv[1]);
@ -73,8 +71,7 @@ function display_init(App $a)
return; return;
} }
} elseif (($a->argc == 3) && ($nick == 'feed-item')) { } elseif (($a->argc == 3) && ($nick == 'feed-item')) {
$r = dba::fetch_first("SELECT `id`, `parent`, `author-name`, `author-link`, $r = dba::fetch_first("SELECT `id`, `parent`, `author-id`, `body`, `uid`
`author-avatar`, `network`, `body`, `uid`, `owner-link`
FROM `item` WHERE `visible` AND NOT `deleted` AND NOT `moderated` FROM `item` WHERE `visible` AND NOT `deleted` AND NOT `moderated`
AND NOT `private` AND `uid` = 0 AND NOT `private` AND `uid` = 0
AND `id` = ? LIMIT 1", $a->argv[2]); AND `id` = ? LIMIT 1", $a->argv[2]);
@ -87,7 +84,7 @@ function display_init(App $a)
} }
if ($r["id"] != $r["parent"]) { if ($r["id"] != $r["parent"]) {
$r = dba::fetch_first("SELECT `id`, `author-name`, `author-link`, `author-avatar`, `network`, `body`, `uid`, `owner-link` FROM `item` $r = dba::fetch_first("SELECT `id`, `author-id`, `body`, `uid` FROM `item`
WHERE `item`.`visible` AND NOT `item`.`deleted` AND NOT `item`.`moderated` WHERE `item`.`visible` AND NOT `item`.`deleted` AND NOT `item`.`moderated`
AND `id` = ?", $r["parent"]); AND `id` = ?", $r["parent"]);
} }
@ -117,14 +114,16 @@ function display_init(App $a)
} }
function display_fetchauthor($a, $item) { function display_fetchauthor($a, $item) {
$author = dba::selectFirst('contact', ['name', 'nick', 'photo', 'network', 'url'], ['id' => $item['author-id']]);
$profiledata = []; $profiledata = [];
$profiledata["uid"] = -1; $profiledata['uid'] = -1;
$profiledata["nickname"] = $item["author-name"]; $profiledata['nickname'] = $author['nick'];
$profiledata["name"] = $item["author-name"]; $profiledata['name'] = $author['name'];
$profiledata["picdate"] = ""; $profiledata['picdate'] = '';
$profiledata["photo"] = $item["author-avatar"]; $profiledata['photo'] = $author['photo'];
$profiledata["url"] = $item["author-link"]; $profiledata['url'] = $author['url'];
$profiledata["network"] = $item["network"]; $profiledata['network'] = $author['network'];
// Check for a repeated message // Check for a repeated message
$skip = false; $skip = false;

View file

@ -103,7 +103,6 @@ function network_init(App $a)
'/new', //new '/new', //new
'', //starred '', //starred
'', //bookmarked '', //bookmarked
'', //spam
]; ];
$tab_args = [ $tab_args = [
'f=&order=comment', //all 'f=&order=comment', //all
@ -112,7 +111,6 @@ function network_init(App $a)
'', //new '', //new
'f=&star=1', //starred 'f=&star=1', //starred
'f=&bmark=1', //bookmarked 'f=&bmark=1', //bookmarked
'f=&spam=1', //spam
]; ];
$k = array_search('active', $last_sel_tabs); $k = array_search('active', $last_sel_tabs);
@ -218,9 +216,8 @@ function saved_searches($search)
* '/network/new', => $new_active = 'active' * '/network/new', => $new_active = 'active'
* '/network?f=&star=1', => $starred_active = 'active' * '/network?f=&star=1', => $starred_active = 'active'
* '/network?f=&bmark=1', => $bookmarked_active = 'active' * '/network?f=&bmark=1', => $bookmarked_active = 'active'
* '/network?f=&spam=1', => $spam_active = 'active'
* *
* @return Array ($no_active, $comment_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active); * @return Array ($no_active, $comment_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active);
*/ */
function network_query_get_sel_tab(App $a) function network_query_get_sel_tab(App $a)
{ {
@ -230,7 +227,6 @@ function network_query_get_sel_tab(App $a)
$bookmarked_active = ''; $bookmarked_active = '';
$all_active = ''; $all_active = '';
$conv_active = ''; $conv_active = '';
$spam_active = '';
$postord_active = ''; $postord_active = '';
if (($a->argc > 1 && $a->argv[1] === 'new') || ($a->argc > 2 && $a->argv[2] === 'new')) { if (($a->argc > 1 && $a->argv[1] === 'new') || ($a->argc > 2 && $a->argv[2] === 'new')) {
@ -249,11 +245,7 @@ function network_query_get_sel_tab(App $a)
$conv_active = 'active'; $conv_active = 'active';
} }
if (x($_GET, 'spam')) { if (($new_active == '') && ($starred_active == '') && ($bookmarked_active == '') && ($conv_active == '')) {
$spam_active = 'active';
}
if (($new_active == '') && ($starred_active == '') && ($bookmarked_active == '') && ($conv_active == '') && ($spam_active == '')) {
$no_active = 'active'; $no_active = 'active';
} }
@ -264,7 +256,7 @@ function network_query_get_sel_tab(App $a)
} }
} }
return [$no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active]; return [$no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active];
} }
function network_query_get_sel_group(App $a) function network_query_get_sel_group(App $a)
@ -928,7 +920,7 @@ function network_tabs(App $a)
// item filter tabs // item filter tabs
/// @TODO fix this logic, reduce duplication /// @TODO fix this logic, reduce duplication
/// $a->page['content'] .= '<div class="tabs-wrapper">'; /// $a->page['content'] .= '<div class="tabs-wrapper">';
list($no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active) = network_query_get_sel_tab($a); list($no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active) = network_query_get_sel_tab($a);
// if no tabs are selected, defaults to comments // if no tabs are selected, defaults to comments
if ($no_active == 'active') { if ($no_active == 'active') {
@ -1004,7 +996,7 @@ function network_tabs(App $a)
// save selected tab, but only if not in file mode // save selected tab, but only if not in file mode
if (!x($_GET, 'file')) { if (!x($_GET, 'file')) {
PConfig::set(local_user(), 'network.view', 'tab.selected', [ PConfig::set(local_user(), 'network.view', 'tab.selected', [
$all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active
]); ]);
} }

View file

@ -1,69 +0,0 @@
<?php
/*
This file is part of the Diaspora protocol. It is used for fetching single public posts.
*/
use Friendica\App;
use Friendica\Core\L10n;
use Friendica\Core\System;
use Friendica\Database\DBM;
use Friendica\Protocol\Diaspora;
function p_init($a){
if ($a->argc != 2) {
header($_SERVER["SERVER_PROTOCOL"].' 510 '.L10n::t('Not Extended'));
killme();
}
$guid = $a->argv[1];
if (strtolower(substr($guid, -4)) != ".xml") {
header($_SERVER["SERVER_PROTOCOL"].' 404 '.L10n::t('Not Found'));
killme();
}
$guid = strtolower(substr($guid, 0, -4));
// Fetch the item
$item = q("SELECT `uid`, `title`, `body`, `guid`, `contact-id`, `private`, `created`, `app`, `location`, `coord`
FROM `item` WHERE `wall` AND NOT `private` AND `guid` = '%s' AND `network` IN ('%s', '%s') AND `id` = `parent` LIMIT 1",
dbesc($guid), NETWORK_DFRN, NETWORK_DIASPORA);
if (!$item) {
$r = q("SELECT `author-link`
FROM `item` WHERE `uid` = 0 AND `guid` = '%s' AND `network` IN ('%s', '%s') AND `id` = `parent` LIMIT 1",
dbesc($guid), NETWORK_DFRN, NETWORK_DIASPORA);
if ($r) {
$parts = parse_url($r[0]["author-link"]);
$host = $parts["scheme"]."://".$parts["host"];
if (normalise_link($host) != normalise_link(System::baseUrl())) {
$location = $host."/p/".urlencode($guid).".xml";
header("HTTP/1.1 301 Moved Permanently");
header("Location:".$location);
killme();
}
}
header($_SERVER["SERVER_PROTOCOL"].' 404 '.L10n::t('Not Found'));
killme();
}
// Fetch some data from the author (We could combine both queries - but I think this is more readable)
$r = q("SELECT `user`.`prvkey`, `contact`.`addr`, `user`.`nickname`, `contact`.`nick` FROM `user`
INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self`
WHERE `user`.`uid` = %d", intval($item[0]["uid"]));
if (!DBM::is_result($r)) {
header($_SERVER["SERVER_PROTOCOL"].' 404 '.L10n::t('Not Found'));
killme();
}
$user = $r[0];
$status = Diaspora::buildStatus($item[0], $user);
$xml = Diaspora::buildPostXml($status["type"], $status["message"]);
header("Content-Type: application/xml; charset=utf-8");
echo $xml;
killme();
}

View file

@ -442,7 +442,7 @@ function ping_get_notifications($uid)
do { do {
$r = q( $r = q(
"SELECT `notify`.*, `item`.`visible`, `item`.`spam`, `item`.`deleted` "SELECT `notify`.*, `item`.`visible`, `item`.`deleted`
FROM `notify` LEFT JOIN `item` ON `item`.`id` = `notify`.`iid` FROM `notify` LEFT JOIN `item` ON `item`.`id` = `notify`.`iid`
WHERE `notify`.`uid` = %d AND `notify`.`msg` != '' WHERE `notify`.`uid` = %d AND `notify`.`msg` != ''
AND NOT (`notify`.`type` IN (%d, %d)) AND NOT (`notify`.`type` IN (%d, %d))
@ -469,10 +469,6 @@ function ping_get_notifications($uid)
$notification["visible"] = true; $notification["visible"] = true;
} }
if (is_null($notification["spam"])) {
$notification["spam"] = 0;
}
if (is_null($notification["deleted"])) { if (is_null($notification["deleted"])) {
$notification["deleted"] = 0; $notification["deleted"] = 0;
} }
@ -495,7 +491,6 @@ function ping_get_notifications($uid)
$notification["href"] = System::baseUrl() . "/notify/view/" . $notification["id"]; $notification["href"] = System::baseUrl() . "/notify/view/" . $notification["id"];
if ($notification["visible"] if ($notification["visible"]
&& !$notification["spam"]
&& !$notification["deleted"] && !$notification["deleted"]
&& !(x($result, $notification["parent"]) && is_array($result[$notification["parent"]])) && !(x($result, $notification["parent"]) && is_array($result[$notification["parent"]]))
) { ) {

View file

@ -1208,7 +1208,6 @@ class DBStructure
"pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"moderated" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "moderated" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"spam" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"starred" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been favourited"], "starred" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been favourited"],
"bookmark" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been bookmarked"], "bookmark" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been bookmarked"],
"unseen" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => "item has not been seen"], "unseen" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => "item has not been seen"],
@ -1704,7 +1703,6 @@ class DBStructure
"pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"moderated" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "moderated" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "visible" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"spam" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"starred" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "starred" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"ignored" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "ignored" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"bookmark" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""], "bookmark" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],

View file

@ -944,21 +944,36 @@ class Contact extends BaseObject
'name' => $data['name'], 'name' => $data['name'],
'nick' => $data['nick']]; 'nick' => $data['nick']];
// Only fill the pubkey if it was empty before. We have to prevent identity theft.
if (!empty($contact['pubkey'])) {
unset($contact['pubkey']);
} else {
$updated['pubkey'] = $data['pubkey'];
}
if ($data['keywords'] != '') { if ($data['keywords'] != '') {
$updated['keywords'] = $data['keywords']; $updated['keywords'] = $data['keywords'];
} }
if ($data['location'] != '') { if ($data['location'] != '') {
$updated['location'] = $data['location']; $updated['location'] = $data['location'];
} }
if ($data['about'] != '') {
$updated['about'] = $data['about']; // Update the technical stuff as well - if filled
if ($data['notify'] != '') {
$updated['notify'] = $data['notify'];
}
if ($data['poll'] != '') {
$updated['poll'] = $data['poll'];
}
if ($data['batch'] != '') {
$updated['batch'] = $data['batch'];
}
if ($data['request'] != '') {
$updated['request'] = $data['request'];
}
if ($data['confirm'] != '') {
$updated['confirm'] = $data['confirm'];
}
if ($data['poco'] != '') {
$updated['poco'] = $data['poco'];
}
// Only fill the pubkey if it had been empty before. We have to prevent identity theft.
if (empty($contact['pubkey'])) {
$updated['pubkey'] = $data['pubkey'];
} }
if (($data["addr"] != $contact["addr"]) || ($data["alias"] != $contact["alias"])) { if (($data["addr"] != $contact["addr"]) || ($data["alias"] != $contact["alias"])) {

View file

@ -566,6 +566,14 @@ class Item extends BaseObject
return 0; return 0;
} }
//unset($item['author-link']);
//unset($item['author-name']);
//unset($item['author-avatar']);
//unset($item['owner-link']);
unset($item['owner-name']);
unset($item['owner-avatar']);
if ($item['network'] == NETWORK_PHANTOM) { if ($item['network'] == NETWORK_PHANTOM) {
logger('Missing network. Called by: '.System::callstack(), LOGGER_DEBUG); logger('Missing network. Called by: '.System::callstack(), LOGGER_DEBUG);
@ -1483,8 +1491,7 @@ class Item extends BaseObject
$forum_mode = ($prvgroup ? 2 : 1); $forum_mode = ($prvgroup ? 2 : 1);
$fields = ['wall' => true, 'origin' => true, 'forum_mode' => $forum_mode, 'contact-id' => $self['id'], $fields = ['wall' => true, 'origin' => true, 'forum_mode' => $forum_mode, 'contact-id' => $self['id'],
'owner-id' => $owner_id, 'owner-name' => $self['name'], 'owner-link' => $self['url'], 'owner-id' => $owner_id, 'owner-link' => $self['url'], 'private' => $private, 'allow_cid' => $user['allow_cid'],
'owner-avatar' => $self['thumb'], 'private' => $private, 'allow_cid' => $user['allow_cid'],
'allow_gid' => $user['allow_gid'], 'deny_cid' => $user['deny_cid'], 'deny_gid' => $user['deny_gid']]; 'allow_gid' => $user['allow_gid'], 'deny_cid' => $user['deny_cid'], 'deny_gid' => $user['deny_gid']];
dba::update('item', $fields, ['id' => $item_id]); dba::update('item', $fields, ['id' => $item_id]);
@ -2075,7 +2082,7 @@ EOT;
private static function addThread($itemid, $onlyshadow = false) private static function addThread($itemid, $onlyshadow = false)
{ {
$fields = ['uid', 'created', 'edited', 'commented', 'received', 'changed', 'wall', 'private', 'pubmail', $fields = ['uid', 'created', 'edited', 'commented', 'received', 'changed', 'wall', 'private', 'pubmail',
'moderated', 'visible', 'spam', 'starred', 'bookmark', 'contact-id', 'moderated', 'visible', 'starred', 'bookmark', 'contact-id',
'deleted', 'origin', 'forum_mode', 'mention', 'network', 'author-id', 'owner-id']; 'deleted', 'origin', 'forum_mode', 'mention', 'network', 'author-id', 'owner-id'];
$condition = ["`id` = ? AND (`parent` = ? OR `parent` = 0)", $itemid, $itemid]; $condition = ["`id` = ? AND (`parent` = ? OR `parent` = 0)", $itemid, $itemid];
$item = dba::selectFirst('item', $fields, $condition); $item = dba::selectFirst('item', $fields, $condition);
@ -2096,7 +2103,7 @@ EOT;
private static function updateThread($itemid, $setmention = false) private static function updateThread($itemid, $setmention = false)
{ {
$fields = ['uid', 'guid', 'title', 'body', 'created', 'edited', 'commented', 'received', 'changed', $fields = ['uid', 'guid', 'title', 'body', 'created', 'edited', 'commented', 'received', 'changed',
'wall', 'private', 'pubmail', 'moderated', 'visible', 'spam', 'starred', 'bookmark', 'contact-id', 'wall', 'private', 'pubmail', 'moderated', 'visible', 'starred', 'bookmark', 'contact-id',
'deleted', 'origin', 'forum_mode', 'network', 'author-id', 'owner-id', 'rendered-html', 'rendered-hash']; 'deleted', 'origin', 'forum_mode', 'network', 'author-id', 'owner-id', 'rendered-html', 'rendered-hash'];
$condition = ["`id` = ? AND (`parent` = ? OR `parent` = 0)", $itemid, $itemid]; $condition = ["`id` = ? AND (`parent` = ? OR `parent` = 0)", $itemid, $itemid];

View file

@ -198,6 +198,13 @@ class Post extends BaseObject
$filer = (($conv->getProfileOwner() == local_user() && ($item['uid'] != 0)) ? L10n::t("save to folder") : false); $filer = (($conv->getProfileOwner() == local_user() && ($item['uid'] != 0)) ? L10n::t("save to folder") : false);
if ($item['network'] == NETWORK_FEED) {
$item['author-avatar'] = $item['contact-avatar'];
$item['author-name'] = $item['contact-name'];
$item['owner-avatar'] = $item['contact-avatar'];
$item['owner-name'] = $item['contact-name'];
}
$diff_author = !link_compare($item['url'], $item['author-link']); $diff_author = !link_compare($item['url'], $item['author-link']);
$profile_name = htmlentities(((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']); $profile_name = htmlentities(((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
if ($item['author-link'] && (!$item['author-name'])) { if ($item['author-link'] && (!$item['author-name'])) {
@ -209,14 +216,6 @@ class Post extends BaseObject
$sparkle = ' sparkle'; $sparkle = ' sparkle';
} }
if (($item['network'] == NETWORK_FEED) || empty($item['author-thumb'])) {
$item['author-thumb'] = $item['author-avatar'];
}
if (($item['network'] == NETWORK_FEED) || empty($item['owner-thumb'])) {
$item['owner-thumb'] = $item['owner-avatar'];
}
$locate = ['location' => $item['location'], 'coord' => $item['coord'], 'html' => '']; $locate = ['location' => $item['location'], 'coord' => $item['coord'], 'html' => ''];
Addon::callHooks('render_location', $locate); Addon::callHooks('render_location', $locate);
$location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate)); $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate));
@ -369,7 +368,7 @@ class Post extends BaseObject
'profile_url' => $profile_link, 'profile_url' => $profile_link,
'item_photo_menu' => item_photo_menu($item), 'item_photo_menu' => item_photo_menu($item),
'name' => $name_e, 'name' => $name_e,
'thumb' => $a->remove_baseurl(proxy_url($item['author-thumb'], false, PROXY_SIZE_THUMB)), 'thumb' => $a->remove_baseurl(proxy_url($item['author-avatar'], false, PROXY_SIZE_THUMB)),
'osparkle' => $osparkle, 'osparkle' => $osparkle,
'sparkle' => $sparkle, 'sparkle' => $sparkle,
'title' => $title_e, 'title' => $title_e,
@ -382,7 +381,7 @@ class Post extends BaseObject
'indent' => $indent, 'indent' => $indent,
'shiny' => $shiny, 'shiny' => $shiny,
'owner_url' => $this->getOwnerUrl(), 'owner_url' => $this->getOwnerUrl(),
'owner_photo' => $a->remove_baseurl(proxy_url($item['owner-thumb'], false, PROXY_SIZE_THUMB)), 'owner_photo' => $a->remove_baseurl(proxy_url($item['owner-avatar'], false, PROXY_SIZE_THUMB)),
'owner_name' => htmlentities($owner_name_e), 'owner_name' => htmlentities($owner_name_e),
'plink' => get_plink($item), 'plink' => get_plink($item),
'edpost' => Feature::isEnabled($conv->getProfileOwner(), 'edit_posts') ? $edpost : '', 'edpost' => Feature::isEnabled($conv->getProfileOwner(), 'edit_posts') ? $edpost : '',

View file

@ -164,10 +164,11 @@ class Notifier {
if (!in_array($cmd, [Delivery::MAIL, Delivery::SUGGESTION, Delivery::RELOCATION])) { if (!in_array($cmd, [Delivery::MAIL, Delivery::SUGGESTION, Delivery::RELOCATION])) {
$parent = $items[0]; $parent = $items[0];
$thr_parent = q("SELECT `network`, `author-link`, `owner-link` FROM `item` WHERE `uri` = '%s' AND `uid` = %d", $fields = ['network', 'author-id', 'owner-id'];
dbesc($target_item["thr-parent"]), intval($target_item["uid"])); $condition = ['uri' => $target_item["thr-parent"], 'uid' => $target_item["uid"]];
$thr_parent = dba::selectFirst('item', $fields, $condition);
logger('GUID: '.$target_item["guid"].': Parent is '.$parent['network'].'. Thread parent is '.$thr_parent[0]['network'], LOGGER_DEBUG); logger('GUID: '.$target_item["guid"].': Parent is '.$parent['network'].'. Thread parent is '.$thr_parent['network'], LOGGER_DEBUG);
// This is IMPORTANT!!!! // This is IMPORTANT!!!!
@ -213,7 +214,7 @@ class Notifier {
} }
// Special treatment for forum posts // Special treatment for forum posts
if (($target_item['author-link'] != $target_item['owner-link']) && if (($target_item['author-id'] != $target_item['owner-id']) &&
($owner['id'] != $target_item['contact-id']) && ($owner['id'] != $target_item['contact-id']) &&
($target_item['uri'] === $target_item['parent-uri'])) { ($target_item['uri'] === $target_item['parent-uri'])) {
@ -247,7 +248,7 @@ class Notifier {
$target_item['deny_cid'].$target_item['deny_gid']) == 0)) $target_item['deny_cid'].$target_item['deny_gid']) == 0))
$push_notify = true; $push_notify = true;
if (($thr_parent && ($thr_parent[0]['network'] == NETWORK_OSTATUS)) || ($parent['network'] == NETWORK_OSTATUS)) { if (($thr_parent && ($thr_parent['network'] == NETWORK_OSTATUS)) || ($parent['network'] == NETWORK_OSTATUS)) {
$push_notify = true; $push_notify = true;
if ($parent["network"] == NETWORK_OSTATUS) { if ($parent["network"] == NETWORK_OSTATUS) {
@ -333,37 +334,21 @@ class Notifier {
// If the thread parent is OStatus then do some magic to distribute the messages. // If the thread parent is OStatus then do some magic to distribute the messages.
// We have not only to look at the parent, since it could be a Friendica thread. // We have not only to look at the parent, since it could be a Friendica thread.
if (($thr_parent && ($thr_parent[0]['network'] == NETWORK_OSTATUS)) || ($parent['network'] == NETWORK_OSTATUS)) { if (($thr_parent && ($thr_parent['network'] == NETWORK_OSTATUS)) || ($parent['network'] == NETWORK_OSTATUS)) {
$diaspora_delivery = false; $diaspora_delivery = false;
logger('Some parent is OStatus for '.$target_item["guid"]." - Author: ".$thr_parent[0]['author-link']." - Owner: ".$thr_parent[0]['owner-link'], LOGGER_DEBUG); logger('Some parent is OStatus for '.$target_item["guid"]." - Author: ".$thr_parent['author-id']." - Owner: ".$thr_parent['owner-id'], LOGGER_DEBUG);
// Send a salmon to the parent author // Send a salmon to the parent author
$r = q("SELECT `url`, `notify` FROM `contact` WHERE `nurl`='%s' AND `uid` IN (0, %d) AND `notify` != ''", $probed_contact = dba::selectFirst('contact', ['url', 'notify'], ['id' => $thr_parent['author-id']]);
dbesc(normalise_link($thr_parent[0]['author-link'])), if (DBM::is_result($probed_contact) && !empty($probed_contact["notify"])) {
intval($uid));
if (DBM::is_result($r)) {
$probed_contact = $r[0];
} else {
$probed_contact = Probe::uri($thr_parent[0]['author-link']);
}
if ($probed_contact["notify"] != "") {
logger('Notify parent author '.$probed_contact["url"].': '.$probed_contact["notify"]); logger('Notify parent author '.$probed_contact["url"].': '.$probed_contact["notify"]);
$url_recipients[$probed_contact["notify"]] = $probed_contact["notify"]; $url_recipients[$probed_contact["notify"]] = $probed_contact["notify"];
} }
// Send a salmon to the parent owner // Send a salmon to the parent owner
$r = q("SELECT `url`, `notify` FROM `contact` WHERE `nurl`='%s' AND `uid` IN (0, %d) AND `notify` != ''", $probed_contact = dba::selectFirst('contact', ['url', 'notify'], ['id' => $thr_parent['owner-id']]);
dbesc(normalise_link($thr_parent[0]['owner-link'])), if (DBM::is_result($probed_contact) && !empty($probed_contact["notify"])) {
intval($uid));
if (DBM::is_result($r)) {
$probed_contact = $r[0];
} else {
$probed_contact = Probe::uri($thr_parent[0]['owner-link']);
}
if ($probed_contact["notify"] != "") {
logger('Notify parent owner '.$probed_contact["url"].': '.$probed_contact["notify"]); logger('Notify parent owner '.$probed_contact["url"].': '.$probed_contact["notify"]);
$url_recipients[$probed_contact["notify"]] = $probed_contact["notify"]; $url_recipients[$probed_contact["notify"]] = $probed_contact["notify"];
} }

View file

@ -65,7 +65,7 @@ item:
visible: true visible: true
contact-id: 42 contact-id: 42
author-id: 42 author-id: 42
owner-id: 42 owner-id: 45
uid: 42 uid: 42
verb: http://activitystrea.ms/schema/1.0/post verb: http://activitystrea.ms/schema/1.0/post
unseen: true unseen: true
@ -83,7 +83,7 @@ item:
visible: true visible: true
contact-id: 42 contact-id: 42
author-id: 42 author-id: 42
owner-id: 42 owner-id: 45
uid: 42 uid: 42
verb: http://activitystrea.ms/schema/1.0/post verb: http://activitystrea.ms/schema/1.0/post
unseen: false unseen: false