From ade8c6992ed9a4a0a47282595c728c1351b5c169 Mon Sep 17 00:00:00 2001 From: Jean Baptiste Favre Date: Sun, 16 Sep 2012 19:27:31 +0200 Subject: [PATCH] Twitter cards implementation. Currently only supports 'photo' cards. --- actions/attachment.php | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/actions/attachment.php b/actions/attachment.php index 321525a55f..f805aa1fc3 100644 --- a/actions/attachment.php +++ b/actions/attachment.php @@ -117,6 +117,45 @@ class AttachmentAction extends Action common_local_url('attachment', array('attachment' => $this->attachment->id)))), 'title'=>'oEmbed'),null); + /* Twitter card support. See https://dev.twitter.com/docs/cards */ + /* @fixme: should we display twitter cards only for attachments posted + * by local users ? Seems mandatory to display twitter:creator + */ + switch ($this->attachment->mimetype) { + case 'image/pjpeg': + case 'image/jpeg': + case 'image/jpg': + case 'image/png': + case 'image/gif': + $this->element('meta', array('name' => 'twitter:card', + 'content' => 'photo'), + null); + $this->element('meta', array('name' => 'twitter:url', + 'content' => common_local_url('attachment', + array('attachment' => $this->attachment->id))), + null ); + $this->element('meta', array('name' => 'twitter:image', + 'content' => $this->attachment->url)); + + $ns = new AttachmentNoticeSection($this); + $notices = $ns->getNotices(); + $noticeArray = $notices->fetchAll(); + + // Should not have more than 1 notice for this attachment. + if( count($noticeArray) != 1 ) { break; } + $post = $noticeArray[0]; + + $flink = Foreign_link::getByUserID($post->profile_id, TWITTER_SERVICE); + if( $flink ) { // Our local user has registered Twitter Gateway + $fuser = Foreign_user::getForeignUser($flink->foreign_id, TWITTER_SERVICE); + if( $fuser ) { // Got nickname for local user's Twitter account + $this->element('meta', array('name' => 'twitter:creator', + 'content' => '@'.$fuser->nickname)); + } + } + break; + default: break; + } } /** -- 2.39.5