From a38ed0057a4d535fb8251447cbd7658be0b9125f Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Tue, 22 Oct 2013 20:35:03 +0200 Subject: [PATCH] Moved jbfavre's Twitter card support to Twitter plugin It was causing problems with an undefined TWITTER_SERVICE constant. --- actions/attachment.php | 41 -------------- plugins/TwitterBridge/TwitterBridgePlugin.php | 53 +++++++++++++++++++ 2 files changed, 53 insertions(+), 41 deletions(-) diff --git a/actions/attachment.php b/actions/attachment.php index 090ad56f7a..321525a55f 100644 --- a/actions/attachment.php +++ b/actions/attachment.php @@ -117,47 +117,6 @@ 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)); - $this->element('meta', array('name' => 'twitter:title', - 'content' => $this->attachment->title)); - - $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; - } } /** diff --git a/plugins/TwitterBridge/TwitterBridgePlugin.php b/plugins/TwitterBridge/TwitterBridgePlugin.php index c513772baa..b8f091e2bb 100644 --- a/plugins/TwitterBridge/TwitterBridgePlugin.php +++ b/plugins/TwitterBridge/TwitterBridgePlugin.php @@ -528,4 +528,57 @@ class TwitterBridgePlugin extends Plugin return true; } + + public function onEndShowHeadElements(Action $action) + { + if (!($action instanceof AttachmentAction)) { + return true; + } + + /* 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 + * + * Author: jbfavre + */ + switch ($action->attachment->mimetype) { + case 'image/pjpeg': + case 'image/jpeg': + case 'image/jpg': + case 'image/png': + case 'image/gif': + $action->element('meta', array('name' => 'twitter:card', + 'content' => 'photo'), + null); + $action->element('meta', array('name' => 'twitter:url', + 'content' => common_local_url('attachment', + array('attachment' => $action->attachment->id))), + null ); + $action->element('meta', array('name' => 'twitter:image', + 'content' => $action->attachment->url)); + $action->element('meta', array('name' => 'twitter:title', + 'content' => $action->attachment->title)); + + $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 + $action->element('meta', array('name' => 'twitter:creator', + 'content' => '@'.$fuser->nickname)); + } + } + break; + default: break; + } + + return true; + } }