]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
fix 0.7.x 0.8.x merge conflict in register.php
authorRobin Millette <millette@controlyourself.ca>
Sat, 18 Apr 2009 21:14:31 +0000 (21:14 +0000)
committerRobin Millette <millette@controlyourself.ca>
Sat, 18 Apr 2009 21:14:31 +0000 (21:14 +0000)
actions/finishopenidlogin.php
actions/register.php
actions/subscribers.php
actions/subscriptions.php
js/util.js
lib/subpeopletagcloudsection.php [new file with mode: 0644]
lib/subscriberspeopleselftagcloudsection.php [new file with mode: 0644]
lib/subscriberspeopletagcloudsection.php [new file with mode: 0644]
lib/subscriptionspeopleselftagcloudsection.php [new file with mode: 0644]
lib/subscriptionspeopletagcloudsection.php [new file with mode: 0644]

index 952185742f969656ae6b0de9b7bf36451d9e6fbd..b08b96df6c2afd017cecf9852fc663ec41b65e67 100644 (file)
@@ -191,11 +191,28 @@ class FinishopenidloginAction extends Action
     {
         # FIXME: save invite code before redirect, and check here
 
-        if (common_config('site', 'closed') || common_config('site', 'inviteonly')) {
+        if (common_config('site', 'closed')) {
             $this->clientError(_('Registration not allowed.'));
             return;
         }
 
+        $invite = null;
+
+        if (common_config('site', 'inviteonly')) {
+            $code = $_SESSION['invitecode'];
+            if (empty($code)) {
+                $this->clientError(_('Registration not allowed.'));
+                return;
+            }
+
+            $invite = Invitation::staticGet($code);
+
+            if (empty($invite)) {
+                $this->clientError(_('Not a valid invitation code.'));
+                return;
+            }
+        }
+
         $nickname = $this->trimmed('newname');
 
         if (!Validate::string($nickname, array('min_length' => 1,
@@ -257,10 +274,16 @@ class FinishopenidloginAction extends Action
         # XXX: add language
         # XXX: add timezone
 
-        $user = User::register(array('nickname' => $nickname,
-                                     'email' => $email,
-                                     'fullname' => $fullname,
-                                     'location' => $location));
+        $args = array('nickname' => $nickname,
+                      'email' => $email,
+                      'fullname' => $fullname,
+                      'location' => $location);
+
+        if (!empty($invite)) {
+            $args['code'] = $invite->code;
+        }
+
+        $user = User::register($args);
 
         $result = oid_link_user($user->id, $canonical, $display);
 
index c3cfb8d255d2309e72315c54660a8fbede05338d..dcbbbdb6a6de9afb238715b7ff1cac3d78f40b7d 100644 (file)
@@ -55,6 +55,45 @@ class RegisterAction extends Action
 
     var $registered = false;
 
+    /**
+     * Prepare page to run
+     *
+     *
+     * @param $args
+     * @return string title
+     */
+
+    function prepare($args)
+    {
+        parent::prepare($args);
+        $this->code = $this->trimmed('code');
+
+        if (empty($this->code)) {
+            common_ensure_session();
+            if (array_key_exists('invitecode', $_SESSION)) {
+                $this->code = $_SESSION['invitecode'];
+            }
+        }
+
+        if (common_config('site', 'inviteonly') && empty($this->code)) {
+            $this->clientError(_('Sorry, only invited people can register.'));
+            return false;
+        }
+
+        if (!empty($this->code)) {
+            $this->invite = Invitation::staticGet('code', $this->code);
+            if (empty($this->invite)) {
+                $this->clientError(_('Sorry, invalid invitation code.'));
+                return false;
+            }
+            // Store this in case we need it
+            common_ensure_session();
+            $_SESSION['invitecode'] = $this->code;
+        }
+
+        return true;
+    }
+
     /**
      * Title of the page
      *
@@ -112,7 +151,7 @@ class RegisterAction extends Action
             $token = $this->trimmed('token');
             if (!$token || $token != common_session_token()) {
                 $this->showForm(_('There was a problem with your session token. '.
-                            'Try again, please.'));
+                                  'Try again, please.'));
                 return;
             }
 
@@ -145,14 +184,14 @@ class RegisterAction extends Action
 
             if (!$this->boolean('license')) {
                 $this->showForm(_('You can\'t register if you don\'t '.
-                            'agree to the license.'));
+                                  'agree to the license.'));
             } else if ($email && !Validate::email($email, true)) {
                 $this->showForm(_('Not a valid email address.'));
             } else if (!Validate::string($nickname, array('min_length' => 1,
-                            'max_length' => 64,
-                            'format' => NICKNAME_FMT))) {
+                                                          'max_length' => 64,
+                                                          'format' => NICKNAME_FMT))) {
                 $this->showForm(_('Nickname must have only lowercase letters '.
-                            'and numbers and no spaces.'));
+                                  'and numbers and no spaces.'));
             } else if ($this->nicknameExists($nickname)) {
                 $this->showForm(_('Nickname already in use. Try another one.'));
             } else if (!User::allowed_nickname($nickname)) {
@@ -160,9 +199,9 @@ class RegisterAction extends Action
             } else if ($this->emailExists($email)) {
                 $this->showForm(_('Email address already exists.'));
             } else if (!is_null($homepage) && (strlen($homepage) > 0) &&
-                    !Validate::uri($homepage,
-                        array('allowed_schemes' =>
-                            array('http', 'https')))) {
+                       !Validate::uri($homepage,
+                                      array('allowed_schemes' =>
+                                            array('http', 'https')))) {
                 $this->showForm(_('Homepage is not a valid URL.'));
                 return;
             } else if (!is_null($fullname) && mb_strlen($fullname) > 255) {
@@ -180,13 +219,13 @@ class RegisterAction extends Action
             } else if ($password != $confirm) {
                 $this->showForm(_('Passwords don\'t match.'));
             } else if ($user = User::register(array('nickname' => $nickname,
-                            'password' => $password,
-                            'email' => $email,
-                            'fullname' => $fullname,
-                            'homepage' => $homepage,
-                            'bio' => $bio,
-                            'location' => $location,
-                            'code' => $code))) {
+                                                    'password' => $password,
+                                                    'email' => $email,
+                                                    'fullname' => $fullname,
+                                                    'homepage' => $homepage,
+                                                    'bio' => $bio,
+                                                    'location' => $location,
+                                                    'code' => $code))) {
                 if (!$user) {
                     $this->showForm(_('Invalid username or password.'));
                     return;
@@ -259,17 +298,17 @@ class RegisterAction extends Action
 
     // overrided to add hentry, and content-inner class
     function showContentBlock()
-     {
-         $this->elementStart('div', array('id' => 'content', 'class' => 'hentry'));
-         $this->showPageTitle();
-         $this->showPageNoticeBlock();
-         $this->elementStart('div', array('id' => 'content_inner',
-             'class' => 'entry-content'));
-         // show the actual content (forms, lists, whatever)
-         $this->showContent();
-         $this->elementEnd('div');
-         $this->elementEnd('div');
-     }
+    {
+        $this->elementStart('div', array('id' => 'content', 'class' => 'hentry'));
+        $this->showPageTitle();
+        $this->showPageNoticeBlock();
+        $this->elementStart('div', array('id' => 'content_inner',
+                                         'class' => 'entry-content'));
+        // show the actual content (forms, lists, whatever)
+        $this->showContent();
+        $this->elementEnd('div');
+        $this->elementEnd('div');
+    }
 
     /**
      * Instructions or a notice for the page
@@ -357,78 +396,78 @@ class RegisterAction extends Action
         }
 
         $this->elementStart('form', array('method' => 'post',
-                    'id' => 'form_register',
-                    'class' => 'form_settings',
-                    'action' => common_local_url('register')));
+                                          'id' => 'form_register',
+                                          'class' => 'form_settings',
+                                          'action' => common_local_url('register')));
         $this->elementStart('fieldset');
         $this->element('legend', null, 'Account settings');
         $this->hidden('token', common_session_token());
 
-        if ($code) {
-            $this->hidden('code', $code);
+        if ($this->code) {
+            $this->hidden('code', $this->code);
         }
 
         $this->elementStart('ul', 'form_data');
         if (Event::handle('StartRegistrationFormData', array($this))) {
             $this->elementStart('li');
             $this->input('nickname', _('Nickname'), $this->trimmed('nickname'),
-                    _('1-64 lowercase letters or numbers, '.
-                        'no punctuation or spaces. Required.'));
+                         _('1-64 lowercase letters or numbers, '.
+                           'no punctuation or spaces. Required.'));
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->password('password', _('Password'),
-                    _('6 or more characters. Required.'));
+                            _('6 or more characters. Required.'));
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->password('confirm', _('Confirm'),
-                    _('Same as password above. Required.'));
+                            _('Same as password above. Required.'));
             $this->elementEnd('li');
             $this->elementStart('li');
-            if ($invite && $invite->address_type == 'email') {
-                $this->input('email', _('Email'), $invite->address,
-                        _('Used only for updates, announcements, '.
-                            'and password recovery'));
+            if ($this->invite && $this->invite->address_type == 'email') {
+                $this->input('email', _('Email'), $this->invite->address,
+                             _('Used only for updates, announcements, '.
+                               'and password recovery'));
             } else {
                 $this->input('email', _('Email'), $this->trimmed('email'),
-                        _('Used only for updates, announcements, '.
-                            'and password recovery'));
+                             _('Used only for updates, announcements, '.
+                               'and password recovery'));
             }
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->input('fullname', _('Full name'),
-                    $this->trimmed('fullname'),
-                    _('Longer name, preferably your "real" name'));
+                         $this->trimmed('fullname'),
+                         _('Longer name, preferably your "real" name'));
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->input('homepage', _('Homepage'),
-                    $this->trimmed('homepage'),
-                    _('URL of your homepage, blog, '.
-                        'or profile on another site'));
+                         $this->trimmed('homepage'),
+                         _('URL of your homepage, blog, '.
+                           'or profile on another site'));
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->textarea('bio', _('Bio'),
-                    $this->trimmed('bio'),
-                    _('Describe yourself and your '.
-                        'interests in 140 chars'));
+                            $this->trimmed('bio'),
+                            _('Describe yourself and your '.
+                              'interests in 140 chars'));
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->input('location', _('Location'),
-                    $this->trimmed('location'),
-                    _('Where you are, like "City, '.
-                        'State (or Region), Country"'));
+                         $this->trimmed('location'),
+                         _('Where you are, like "City, '.
+                           'State (or Region), Country"'));
             $this->elementEnd('li');
             Event::handle('EndRegistrationFormData', array($this));
             $this->elementStart('li', array('id' => 'settings_rememberme'));
             $this->checkbox('rememberme', _('Remember me'),
-                    $this->boolean('rememberme'),
-                    _('Automatically login in the future; '.
-                        'not for shared computers!'));
+                            $this->boolean('rememberme'),
+                            _('Automatically login in the future; '.
+                              'not for shared computers!'));
             $this->elementEnd('li');
             $attrs = array('type' => 'checkbox',
-                    'id' => 'license',
-                    'class' => 'checkbox',
-                    'name' => 'license',
-                    'value' => 'true');
+                           'id' => 'license',
+                           'class' => 'checkbox',
+                           'name' => 'license',
+                           'value' => 'true');
             if ($this->boolean('license')) {
                 $attrs['checked'] = 'checked';
             }
@@ -437,9 +476,9 @@ class RegisterAction extends Action
             $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license'));
             $this->text(_('My text and files are available under '));
             $this->element('a', array('href' => common_config('license', 'url')),
-                    common_config('license', 'title'), _("Creative Commons Attribution 3.0"));
+                           common_config('license', 'title'), _("Creative Commons Attribution 3.0"));
             $this->text(_(' except this private data: password, '.
-                        'email address, IM address, and phone number.'));
+                          'email address, IM address, and phone number.'));
             $this->elementEnd('label');
             $this->elementEnd('li');
         }
index d91a7d4fd35241c7c756a3b1b157aa763a43e4d5..4482de9a7c74279b000e042012fbb927a86b5dbd 100644 (file)
@@ -118,6 +118,16 @@ class SubscribersAction extends GalleryAction
         $this->raw(common_markup_to_html($message));
         $this->elementEnd('div');
     }
+
+    function showSections()
+    {
+        parent::showSections();
+        $cloud = new SubscribersPeopleTagCloudSection($this);
+        $cloud->show();
+
+        $cloud2 = new SubscribersPeopleSelfTagCloudSection($this);
+        $cloud2->show();
+    }
 }
 
 class SubscribersList extends ProfileList
index e6f3c54db8c83c67820e8898875c4f7cd18de71d..095b18ad87db49b97f1c16746d3a7366f6b0f7a4 100644 (file)
@@ -125,6 +125,16 @@ class SubscriptionsAction extends GalleryAction
         $this->raw(common_markup_to_html($message));
         $this->elementEnd('div');
     }
+
+    function showSections()
+    {
+        parent::showSections();
+        $cloud = new SubscriptionsPeopleTagCloudSection($this);
+        $cloud->show();
+
+        $cloud2 = new SubscriptionsPeopleSelfTagCloudSection($this);
+        $cloud2->show();
+    }
 }
 
 class SubscriptionsList extends ProfileList
index 38d2a9a424febe7a067aba0199131f705d8b13d6..53e6eb7923c9da5734ed27846aa45ef839e1b848 100644 (file)
@@ -179,13 +179,13 @@ $(document).ready(function(){
                                                     }
                                                     else {
                                                                                                            $("#notices_primary .notices").prepend(document._importNode($("li", xml).get(0), true));
-                                                                                                           counter();
                                                                                                            $("#notices_primary .notice:first").css({display:"none"});
                                                                                                            $("#notices_primary .notice:first").fadeIn(2500);
                                                                                                            NoticeHover();
                                                                                                            NoticeReply();
                                                                                                        }
                                                                                                        $("#notice_data-text").val("");
+                                                    counter();
                                                                                                }
                                                                                                $("#form_notice").removeClass("processing");
                                                                                                $("#notice_action-submit").removeAttr("disabled");
diff --git a/lib/subpeopletagcloudsection.php b/lib/subpeopletagcloudsection.php
new file mode 100644 (file)
index 0000000..d98f28a
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Laconica, the distributed open-source microblogging tool
+ *
+ * Personal tag cloud section
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Widget
+ * @package   Laconica
+ * @author    Evan Prodromou <evan@controlyourself.ca>
+ * @copyright 2009 Control Yourself, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://laconi.ca/
+ */
+
+if (!defined('LACONICA')) {
+    exit(1);
+}
+
+/**
+ * Personal tag cloud section
+ *
+ * @category Widget
+ * @package  Laconica
+ * @author   Evan Prodromou <evan@controlyourself.ca>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://laconi.ca/
+ */
+
+class SubPeopleTagCloudSection extends TagCloudSection
+{
+    function getTags()
+    {
+        $qry = $this->query();
+        $limit = TAGS_PER_SECTION;
+        $offset = 0;
+
+        if (common_config('db','type') == 'pgsql') {
+            $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
+        } else {
+            $qry .= ' LIMIT ' . $offset . ', ' . $limit;
+        }
+
+        $profile_tag = Memcached_DataObject::cachedQuery('Profile_tag',
+                                                 sprintf($qry,
+                                                         $this->out->user->id));
+        return $profile_tag;
+    }
+
+    function tagUrl($tag) {
+        return common_local_url('peopletag', array('tag' => $tag));
+    }
+
+    function showTag($tag, $weight, $relative) {
+        $rel = 'tag-cloud-';
+        $rel .= 1+intval(7 * $relative * $weight - 0.01);
+
+        $this->out->elementStart('li', $rel);
+        $this->out->element('a', array('href' => $this->tagUrl($tag)), $tag);
+        $this->out->elementEnd('li');
+    }
+}
diff --git a/lib/subscriberspeopleselftagcloudsection.php b/lib/subscriberspeopleselftagcloudsection.php
new file mode 100644 (file)
index 0000000..b5a39c6
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Laconica, the distributed open-source microblogging tool
+ *
+ * Personal tag cloud section
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Widget
+ * @package   Laconica
+ * @author    Evan Prodromou <evan@controlyourself.ca>
+ * @copyright 2009 Control Yourself, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://laconi.ca/
+ */
+
+if (!defined('LACONICA')) {
+    exit(1);
+}
+
+/**
+ * Personal tag cloud section
+ *
+ * @category Widget
+ * @package  Laconica
+ * @author   Evan Prodromou <evan@controlyourself.ca>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://laconi.ca/
+ */
+
+class SubscribersPeopleSelfTagCloudSection extends SubPeopleTagCloudSection
+{
+    function title()
+    {
+        return _('People Tagcloud as self-tagged');
+    }
+
+    function query() {
+        return 'select tag, count(tag) as weight from subscription left join profile_tag on tagger = subscriber where subscribed=%d and subscribed != subscriber and tagger = tagged group by tag order by weight desc';
+    }
+}
diff --git a/lib/subscriberspeopletagcloudsection.php b/lib/subscriberspeopletagcloudsection.php
new file mode 100644 (file)
index 0000000..23011ef
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Laconica, the distributed open-source microblogging tool
+ *
+ * Personal tag cloud section
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Widget
+ * @package   Laconica
+ * @author    Evan Prodromou <evan@controlyourself.ca>
+ * @copyright 2009 Control Yourself, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://laconi.ca/
+ */
+
+if (!defined('LACONICA')) {
+    exit(1);
+}
+
+/**
+ * Personal tag cloud section
+ *
+ * @category Widget
+ * @package  Laconica
+ * @author   Evan Prodromou <evan@controlyourself.ca>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://laconi.ca/
+ */
+
+class SubscribersPeopleTagCloudSection extends SubPeopleTagCloudSection
+{
+    function title()
+    {
+        return _('People Tagcloud as tagged');
+    }
+
+    function tagUrl($tag) {
+        $nickname = $this->out->profile->nickname;
+        return common_local_url('subscribers', array('nickname' => $nickname, 'tag' => $tag));
+    }
+
+
+    function query() {
+        return 'select tag, count(tag) as weight from subscription left join profile_tag on subscriber=tagged and subscribed=tagger where subscribed=%d and subscriber != subscribed group by tag order by weight desc';
+    }
+}
diff --git a/lib/subscriptionspeopleselftagcloudsection.php b/lib/subscriptionspeopleselftagcloudsection.php
new file mode 100644 (file)
index 0000000..8ac65ad
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Laconica, the distributed open-source microblogging tool
+ *
+ * Personal tag cloud section
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Widget
+ * @package   Laconica
+ * @author    Evan Prodromou <evan@controlyourself.ca>
+ * @copyright 2009 Control Yourself, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://laconi.ca/
+ */
+
+if (!defined('LACONICA')) {
+    exit(1);
+}
+
+/**
+ * Personal tag cloud section
+ *
+ * @category Widget
+ * @package  Laconica
+ * @author   Evan Prodromou <evan@controlyourself.ca>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://laconi.ca/
+ */
+
+class SubscriptionsPeopleSelfTagCloudSection extends SubPeopleTagCloudSection
+{
+    function title()
+    {
+        return _('People Tagcloud as self-tagged');
+    }
+
+    function query() {
+        return 'select tag, count(tag) as weight from subscription left join profile_tag on tagger = subscriber where subscribed=%d and subscriber != subscribed and tagger = tagged group by tag order by weight desc';
+    }
+}
diff --git a/lib/subscriptionspeopletagcloudsection.php b/lib/subscriptionspeopletagcloudsection.php
new file mode 100644 (file)
index 0000000..c3f7d17
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Laconica, the distributed open-source microblogging tool
+ *
+ * Personal tag cloud section
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Widget
+ * @package   Laconica
+ * @author    Evan Prodromou <evan@controlyourself.ca>
+ * @copyright 2009 Control Yourself, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://laconi.ca/
+ */
+
+if (!defined('LACONICA')) {
+    exit(1);
+}
+
+/**
+ * Personal tag cloud section
+ *
+ * @category Widget
+ * @package  Laconica
+ * @author   Evan Prodromou <evan@controlyourself.ca>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://laconi.ca/
+ */
+
+class SubscriptionsPeopleTagCloudSection extends SubPeopleTagCloudSection
+{
+    function title()
+    {
+        return _('People Tagcloud as tagged');
+    }
+
+    function tagUrl($tag) {
+        $nickname = $this->out->profile->nickname;
+        return common_local_url('subscriptions', array('nickname' => $nickname, 'tag' => $tag));
+    }
+
+    function query() {
+        return 'select tag, count(tag) as weight from subscription left join profile_tag on subscriber=tagger and subscribed=tagged where subscriber=%d and subscriber != subscribed group by tag order by weight desc';
+    }
+}