]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Squashed commit of the following:
authorEvan Prodromou <evan@status.net>
Mon, 9 Jul 2012 16:55:05 +0000 (12:55 -0400)
committerEvan Prodromou <evan@status.net>
Mon, 9 Jul 2012 16:56:09 +0000 (12:56 -0400)
commit 7ef19ab918cc9805abb8d01e8220ae4ed63155d7
Author: Evan Prodromou <evan@status.net>
Date:   Mon Jul 9 12:53:29 2012 -0400

    Show link to facebook account on profile block

    If you've logged in with Facebook, show a link to that account on the profile block.

commit b56967479c009d702150791944dbd80746ee3ba1
Author: Evan Prodromou <evan@status.net>
Date:   Mon Jul 9 12:28:34 2012 -0400

    Add profile link from profile block to Twitter account

    Add a profile link to Twitter for accounts that are linked via Twitter login.

commit 181e441fd03c6034e737f6a3dae115557aa3e1aa
Author: Evan Prodromou <evan@status.net>
Date:   Mon Jul 9 11:57:56 2012 -0400

    OpenID shows other account links

commit ef7357883dad9e34af2746e1c6a41ea826d7c992
Author: Evan Prodromou <evan@status.net>
Date:   Mon Jul 9 11:53:12 2012 -0400

    Add a profile link for OpenIDs

    OpenID plugin now adds a profile link for each OpenID on the account.

commit 093d26b95bc453686d24c42f5a8f4739cb338fd2
Author: Evan Prodromou <evan@status.net>
Date:   Mon Jul 9 11:15:18 2012 -0400

    Better array access

commit 49d47257efdcae2101b589a1f825872bdd70667c
Author: Evan Prodromou <evan@status.net>
Date:   Mon Jul 9 10:57:16 2012 -0400

    Show list of other accounts in profile block

    We add a group of "rel-me" links to other user accounts on the Web.

    This is mostly useful for when you've used OpenID, Twitter, or
    Facebook login to associate a remote account.

    There's an extension to the profileblock recipe to show the links as
    little icons; there's a new hook in accountprofileblock to get such
    links from plugins.

    There's a modification to the base theme to show the icons correctly
    (I think).

12 files changed:
EVENTS.txt
lib/accountprofileblock.php
lib/defaultprofileblock.php
lib/groupprofileblock.php
lib/profileblock.php
plugins/FacebookBridge/FacebookBridgePlugin.php
plugins/FacebookBridge/images/f_logo.png [new file with mode: 0644]
plugins/OpenID/OpenIDPlugin.php
plugins/OpenID/icons/openid-16x16.gif [new file with mode: 0644]
plugins/TwitterBridge/TwitterBridgePlugin.php
plugins/TwitterBridge/icons/twitter-bird-white-on-blue.png [new file with mode: 0644]
theme/base/css/display.css

index 0c08a46478b26a3bd784544bd5b30cd89e98bc86..49940e467fbc88d1b5309200c5a5f6a261840494 100644 (file)
@@ -1450,3 +1450,9 @@ EndNoticeListPrefill: After pre-filling a list of notices with extra data
 - &$profiles: Profiles that were pre-filled 
 - $avatarSize: The avatar size for the list
 
+OtherAccountProfiles: Hook to add account profiles to a user account profile block
+- $profile: the Profile being shown
+- &$others: Modifiable array of profile info arrays. Each one has the following fields:
+            href: link to the profile
+            text: text for the profile
+            image: mini image for the profile
index 4eca000c9efed19ae3857a99962d5cd48e8b7e26..f49c73aeab62f51448cc8cc72e810a058dfa2651 100644 (file)
@@ -94,6 +94,15 @@ class AccountProfileBlock extends ProfileBlock
         return $this->profile->bio;
     }
 
+    function otherProfiles()
+    {
+        $others = array();
+
+        Event::handle('OtherAccountProfiles', array($this->profile, &$others));
+        
+        return $others;
+    }
+
     function showTags()
     {
         $cur = common_current_user();
index b8af14ac211b00f4e1967c093cff346d26c1d881..78c7c4a118ff7385bc96b5d3d27418fac2a08aa5 100644 (file)
@@ -86,4 +86,9 @@ class DefaultProfileBlock extends AccountProfileBlock
     {
         return null;
     }
+
+    function otherProfiles()
+    {
+        return array();
+    }
 }
\ No newline at end of file
index 58e553a4c23348aca55296f36d457d547f5abb4e..87ec174dc6f336c0a9ef1d6efc7575e573331fd5 100644 (file)
@@ -85,6 +85,11 @@ class GroupProfileBlock extends ProfileBlock
         return $this->group->description;
     }
 
+    function otherProfiles()
+    {
+        return array();
+    }
+
     function showActions()
     {
         $cur = common_current_user();
index eb19a1a9aac1c240cc8143e3955fb1041b7fde80..697ff8d340e89fee526212fd017acadcc83a0364 100644 (file)
@@ -61,6 +61,7 @@ abstract class ProfileBlock extends Widget
         $this->showName();
         $this->showLocation();
         $this->showHomepage();
+        $this->showOtherProfiles();
         $this->showDescription();
         $this->showTags();
     }
@@ -133,6 +134,31 @@ abstract class ProfileBlock extends Widget
         }
     }
 
+    function showOtherProfiles()
+    {
+        $otherProfiles = $this->otherProfiles();
+
+        if (!empty($otherProfiles)) {
+
+            $this->out->elementStart('ul',
+                                     array('class' => 'profile_block_otherprofile_list'));
+
+            foreach ($otherProfiles as $otherProfile) {
+                $this->out->elementStart('li');
+                $this->out->elementStart('a',
+                                         array('href' => $otherProfile['href'],
+                                               'rel' => 'me',
+                                               'class' => 'profile_block_otherprofile',
+                                               'alt' => $otherProfile['text']));
+                $this->out->element('img',
+                                    array('src' => $otherProfile['image'],
+                                          'class' => 'profile_block_otherprofile_icon'));
+                $this->out->elementEnd('a');
+                $this->out->elementEnd('li');
+            }
+        }
+    }
+
     function avatarSize()
     {
         return AVATAR_PROFILE_SIZE;
index bf16da337dc7137852b1c17075cfd6e11e0edc60..289f219112a9e78645a4c77f6dd7f92f5c58b5a6 100644 (file)
@@ -559,6 +559,69 @@ ENDOFSCRIPT;
         return true;
     }
 
+    /**
+     * Add links in the user's profile block to their Facebook profile URL.
+     *
+     * @param Profile $profile The profile being shown
+     * @param Array   &$links  Writeable array of arrays (href, text, image).
+     *
+     * @return boolean hook value (true)
+     */
+
+    function onOtherAccountProfiles($profile, &$links)
+    {
+        $fuser = null;
+
+        $flink = Foreign_link::getByUserID($profile->id, FACEBOOK_SERVICE);
+
+        if (!empty($flink)) {
+
+            $fuser = $this->getFacebookUser($flink->foreign_id);
+
+            if (!empty($fuser)) {
+                $links[] = array("href" => $fuser->link,
+                                 "text" => sprintf(_("@%s on Facebook"), $fuser->name),
+                                 "image" => $this->path("images/f_logo.png"));
+            }
+        }
+
+        return true;
+    }
+
+    function getFacebookUser($id) {
+
+        $key = Cache::key(sprintf("FacebookBridgePlugin:userdata:%d", $id));
+
+        $c = Cache::instance();
+
+        if ($c) {
+            $obj = $c->get($key);
+            if ($obj) {
+                return $obj;
+            }
+        }
+
+        $url = sprintf("https://graph.facebook.com/%s", $id);
+        $client = new HTTP_Client();
+        $resp = $client->get($url);
+
+        if (!$resp->isOK()) {
+            return null;
+        }
+
+        $user = json_decode($resp->getBody());
+
+        if ($user->error) {
+            return null;
+        }
+
+        if ($c) {
+            $c->set($key, $user);
+        }
+
+        return $user;
+    }
+
     /*
      * Add version info for this plugin
      *
diff --git a/plugins/FacebookBridge/images/f_logo.png b/plugins/FacebookBridge/images/f_logo.png
new file mode 100644 (file)
index 0000000..b54e21c
Binary files /dev/null and b/plugins/FacebookBridge/images/f_logo.png differ
index ed6d6534c09dbdaff0ebef609fabd235cee9b628..d5c5c303c232f4a66fc545e55402d6f5d5056662 100644 (file)
@@ -814,4 +814,30 @@ class OpenIDPlugin extends Plugin
 
         return true;
     }
+
+    /**
+     * Add links in the user's profile block to their OpenID URLs.
+     *
+     * @param Profile $profile The profile being shown
+     * @param Array   &$links  Writeable array of arrays (href, text, image).
+     *
+     * @return boolean hook value (true)
+     */
+    
+    function onOtherAccountProfiles($profile, &$links)
+    {
+        $oid = new User_openid();
+
+        $oid->user_id = $profile->id;
+
+        if ($oid->find()) {
+            while ($oid->fetch()) {
+                $links[] = array('href' => $oid->display,
+                                 'text' => _('OpenID'),
+                                 'image' => $this->path("icons/openid-16x16.gif"));
+            }
+        }
+
+        return true;
+    }
 }
diff --git a/plugins/OpenID/icons/openid-16x16.gif b/plugins/OpenID/icons/openid-16x16.gif
new file mode 100644 (file)
index 0000000..e2d8377
Binary files /dev/null and b/plugins/OpenID/icons/openid-16x16.gif differ
index d733f71c56fee621cf6ba084d59977e7d27cd4dd..25d8a423ca403a960fe39a51f6a368364c21663f 100644 (file)
@@ -557,4 +557,32 @@ class TwitterBridgePlugin extends Plugin
         }
         return true;
     }
+
+    /**
+     * Add links in the user's profile block to their Twitter profile URL.
+     *
+     * @param Profile $profile The profile being shown
+     * @param Array   &$links  Writeable array of arrays (href, text, image).
+     *
+     * @return boolean hook value (true)
+     */
+
+    function onOtherAccountProfiles($profile, &$links)
+    {
+        $fuser = null;
+
+        $flink = Foreign_link::getByUserID($profile->id, TWITTER_SERVICE);
+
+        if (!empty($flink)) {
+            $fuser = $flink->getForeignUser();
+
+            if (!empty($fuser)) {
+                $links[] = array("href" => $fuser->uri,
+                                 "text" => sprintf(_("@%s on Twitter"), $fuser->nickname),
+                                 "image" => $this->path("icons/twitter-bird-white-on-blue.png"));
+            }
+        }
+
+        return true;
+    }
 }
diff --git a/plugins/TwitterBridge/icons/twitter-bird-white-on-blue.png b/plugins/TwitterBridge/icons/twitter-bird-white-on-blue.png
new file mode 100644 (file)
index 0000000..2c42b08
Binary files /dev/null and b/plugins/TwitterBridge/icons/twitter-bird-white-on-blue.png differ
index d2d07c4cec609c8de93f38796f58058be9ef09f9..483aa15ff7594651c8c5e1fe4d0ddcfae18c4f40 100644 (file)
@@ -2549,6 +2549,11 @@ display:none;
     display:none;
 }
 
+.profile_block_otherprofile_list li {
+    display: inline;
+    list-style-type: none;
+}
+
 /*end of @media screen, projection, tv*/