Refactor and centralize notice source link calculation
This commit is contained in:
parent
b547079b28
commit
22fde00def
@ -342,10 +342,21 @@ class TwitapisearchatomAction extends ApiAction
|
|||||||
'rel' => 'related',
|
'rel' => 'related',
|
||||||
'href' => $profile->avatarUrl()));
|
'href' => $profile->avatarUrl()));
|
||||||
|
|
||||||
// TODO: Here is where we'd put in a link to an atom feed for threads
|
// @todo: Here is where we'd put in a link to an atom feed for threads
|
||||||
|
|
||||||
|
$source = null;
|
||||||
|
|
||||||
|
$ns = $notice->getSource();
|
||||||
|
if ($ns) {
|
||||||
|
if (!empty($ns->name) && !empty($ns->url)) {
|
||||||
|
$source = '<a href="' . $ns->url . '">' . $ns->name . '</a>';
|
||||||
|
} else {
|
||||||
|
$source = $ns->code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->element("twitter:source", null,
|
$this->element("twitter:source", null,
|
||||||
htmlentities($this->sourceLink($notice->source)));
|
htmlentities($source));
|
||||||
|
|
||||||
$this->elementStart('author');
|
$this->elementStart('author');
|
||||||
|
|
||||||
|
@ -704,7 +704,7 @@ class Notice extends Memcached_DataObject
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Is this notice part of an active conversation?
|
* Is this notice part of an active conversation?
|
||||||
*
|
*
|
||||||
* @return boolean true if other messages exist in the same
|
* @return boolean true if other messages exist in the same
|
||||||
* conversation, false if this is the only one
|
* conversation, false if this is the only one
|
||||||
*/
|
*/
|
||||||
@ -1812,4 +1812,41 @@ class Notice extends Memcached_DataObject
|
|||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the source of the notice
|
||||||
|
*
|
||||||
|
* @return Notice_source $ns A notice source object. 'code' is the only attribute
|
||||||
|
* guaranteed to be populated.
|
||||||
|
*/
|
||||||
|
function getSource()
|
||||||
|
{
|
||||||
|
$ns = new Notice_source();
|
||||||
|
if (!empty($this->source)) {
|
||||||
|
switch ($this->source) {
|
||||||
|
case 'web':
|
||||||
|
case 'xmpp':
|
||||||
|
case 'mail':
|
||||||
|
case 'omb':
|
||||||
|
case 'system':
|
||||||
|
case 'api':
|
||||||
|
$ns->code = $this->source;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$ns = Notice_source::staticGet($this->source);
|
||||||
|
if (!$ns) {
|
||||||
|
$ns = new Notice_source();
|
||||||
|
$ns->code = $this->source;
|
||||||
|
$app = Oauth_application::staticGet('name', $this->source);
|
||||||
|
if ($app) {
|
||||||
|
$ns->name = $app->name;
|
||||||
|
$ns->url = $app->source_url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $ns;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -313,7 +313,19 @@ class ApiAction extends Action
|
|||||||
$twitter_status['created_at'] = $this->dateTwitter($notice->created);
|
$twitter_status['created_at'] = $this->dateTwitter($notice->created);
|
||||||
$twitter_status['in_reply_to_status_id'] = ($notice->reply_to) ?
|
$twitter_status['in_reply_to_status_id'] = ($notice->reply_to) ?
|
||||||
intval($notice->reply_to) : null;
|
intval($notice->reply_to) : null;
|
||||||
$twitter_status['source'] = $this->sourceLink($notice->source);
|
|
||||||
|
$source = null;
|
||||||
|
|
||||||
|
$ns = $notice->getSource();
|
||||||
|
if ($ns) {
|
||||||
|
if (!empty($ns->name) && !empty($ns->url)) {
|
||||||
|
$source = '<a href="' . $ns->url . '">' . $ns->name . '</a>';
|
||||||
|
} else {
|
||||||
|
$source = $ns->code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$twitter_status['source'] = $source;
|
||||||
$twitter_status['id'] = intval($notice->id);
|
$twitter_status['id'] = intval($notice->id);
|
||||||
|
|
||||||
$replier_profile = null;
|
$replier_profile = null;
|
||||||
@ -1354,43 +1366,6 @@ class ApiAction extends Action
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function sourceLink($source)
|
|
||||||
{
|
|
||||||
$source_name = _($source);
|
|
||||||
switch ($source) {
|
|
||||||
case 'web':
|
|
||||||
case 'xmpp':
|
|
||||||
case 'mail':
|
|
||||||
case 'omb':
|
|
||||||
case 'api':
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
|
|
||||||
$name = null;
|
|
||||||
$url = null;
|
|
||||||
|
|
||||||
$ns = Notice_source::staticGet($source);
|
|
||||||
|
|
||||||
if ($ns) {
|
|
||||||
$name = $ns->name;
|
|
||||||
$url = $ns->url;
|
|
||||||
} else {
|
|
||||||
$app = Oauth_application::staticGet('name', $source);
|
|
||||||
if ($app) {
|
|
||||||
$name = $app->name;
|
|
||||||
$url = $app->source_url;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($name) && !empty($url)) {
|
|
||||||
$source_name = '<a href="' . $url . '">' . $name . '</a>';
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return $source_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns query argument or default value if not found. Certain
|
* Returns query argument or default value if not found. Certain
|
||||||
* parameters used throughout the API are lightly scrubbed and
|
* parameters used throughout the API are lightly scrubbed and
|
||||||
|
@ -488,48 +488,44 @@ class NoticeListItem extends Widget
|
|||||||
|
|
||||||
function showNoticeSource()
|
function showNoticeSource()
|
||||||
{
|
{
|
||||||
if ($this->notice->source) {
|
$ns = $this->notice->getSource();
|
||||||
|
|
||||||
|
if ($ns) {
|
||||||
|
$source_name = _($ns->code);
|
||||||
$this->out->text(' ');
|
$this->out->text(' ');
|
||||||
$this->out->elementStart('span', 'source');
|
$this->out->elementStart('span', 'source');
|
||||||
$this->out->text(_('from'));
|
$this->out->text(_('from'));
|
||||||
$source_name = _($this->notice->source);
|
|
||||||
$this->out->text(' ');
|
$this->out->text(' ');
|
||||||
switch ($this->notice->source) {
|
|
||||||
case 'web':
|
|
||||||
case 'xmpp':
|
|
||||||
case 'mail':
|
|
||||||
case 'omb':
|
|
||||||
case 'system':
|
|
||||||
case 'api':
|
|
||||||
$this->out->element('span', 'device', $source_name);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
|
|
||||||
$name = $source_name;
|
// if $ns->name and $ns->url are populated we have
|
||||||
$url = null;
|
// configured a source attr somewhere
|
||||||
|
if (empty($ns->name) && empty($ns->url)) {
|
||||||
|
// otherwise it's from normal channel such as web or api
|
||||||
|
$this->out->element('span', 'device', $source_name);
|
||||||
|
} else {
|
||||||
|
$name = null;
|
||||||
|
$url = null;
|
||||||
|
$title = null;
|
||||||
|
|
||||||
if (Event::handle('StartNoticeSourceLink', array($this->notice, &$name, &$url, &$title))) {
|
if (Event::handle('StartNoticeSourceLink', array($this->notice, &$name, &$url, &$title))) {
|
||||||
$ns = Notice_source::staticGet($this->notice->source);
|
$name = $source_name;
|
||||||
|
$url = $ns->url;
|
||||||
if ($ns) {
|
|
||||||
$name = $ns->name;
|
|
||||||
$url = $ns->url;
|
|
||||||
} else {
|
|
||||||
$app = Oauth_application::staticGet('name', $this->notice->source);
|
|
||||||
if ($app) {
|
|
||||||
$name = $app->name;
|
|
||||||
$url = $app->source_url;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Event::handle('EndNoticeSourceLink', array($this->notice, &$name, &$url, &$title));
|
Event::handle('EndNoticeSourceLink', array($this->notice, &$name, &$url, &$title));
|
||||||
|
|
||||||
if (!empty($name) && !empty($url)) {
|
if (!empty($name) && !empty($url)) {
|
||||||
$this->out->elementStart('span', 'device');
|
$this->out->elementStart('span', 'device');
|
||||||
$this->out->element('a', array('href' => $url,
|
|
||||||
'rel' => 'external',
|
$attrs = array(
|
||||||
'title' => $title),
|
'href' => $url,
|
||||||
$name);
|
'rel' => 'external'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isset($title)) {
|
||||||
|
$attrs['title'] = $title;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->out->element('a', $attrs, $name);
|
||||||
$this->out->elementEnd('span');
|
$this->out->elementEnd('span');
|
||||||
} else {
|
} else {
|
||||||
$this->out->element('span', 'device', $name);
|
$this->out->element('span', 'device', $name);
|
||||||
|
Loading…
Reference in New Issue
Block a user