From d9b959fc64e4e36b0957afd33482f480b24868f9 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 4 Aug 2010 12:07:49 -0700 Subject: move code for making activities from OStatus plugin to Subscription and Fave classes --- classes/Fave.php | 25 +++++++++++++++++++++++++ classes/Subscription.php | 26 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) (limited to 'classes') diff --git a/classes/Fave.php b/classes/Fave.php index ed4f56aee..9d0b0aa02 100644 --- a/classes/Fave.php +++ b/classes/Fave.php @@ -129,4 +129,29 @@ class Fave extends Memcached_DataObject return $ids; } + + function asActivity() + { + $notice = Notice::staticGet('id', $this->notice_id); + $profile = Profile::staticGet('id', $this->user_id); + + $act = new Activity(); + + $act->verb = ActivityVerb::FAVORITE; + $act->id = TagURI::mint('favor:%d:%d:%s', + $profile->id, + $notice->id, + common_date_iso8601($this->created)); + + $act->time = $this->created; + $act->title = _("Favor"); + $act->content = sprintf(_("%s marked notice %s as a favorite."), + $profile->getBestName(), + $notice->uri); + + $act->actor = ActivityObject::fromProfile($profile); + $act->object = ActivityObject::fromNotice($notice); + + return $act; + } } diff --git a/classes/Subscription.php b/classes/Subscription.php index 0225ed4df..0044699a3 100644 --- a/classes/Subscription.php +++ b/classes/Subscription.php @@ -235,4 +235,30 @@ class Subscription extends Memcached_DataObject 'subscribed' => $other->id)); return (empty($sub)) ? false : true; } + + function asActivity() + { + $subscriber = Profile::staticGet('id', $this->subscriber); + $subscribed = Profile::staticGet('id', $this->subscribed); + + $act = new Activity(); + + $act->verb = ActivityVerb::FOLLOW; + + $act->id = TagURI::mint('follow:%d:%d:%s', + $subscriber->id, + $subscribed->id, + common_date_iso8601($this->created)); + + $act->time = strtotime($this->created); + $act->title = _("Follow"); + $act->content = sprintf(_("%s is now following %s."), + $subscriber->getBestName(), + $subscribed->getBestName()); + + $act->actor = ActivityObject::fromProfile($subscriber); + $act->object = ActivityObject::fromProfile($subscribed); + + return $act; + } } -- cgit v1.2.3-54-g00ecf From d634f9cf17f683c38150d64d29b47975b5aeac70 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 10 Aug 2010 17:03:47 -0700 Subject: Notice::asActivity --- classes/Notice.php | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'classes') diff --git a/classes/Notice.php b/classes/Notice.php index f1b012465..9a6f180e5 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1212,6 +1212,64 @@ class Notice extends Memcached_DataObject return $groups; } + function asActivity() + { + $profile = $this->getProfile(); + + $act = new Activity(); + + $act->actor = Activity::fromProfile($profile); + $act->verb = ActivityVerb::POST; + $act->objects[] = ActivityObject::fromNotice($this); + + $act->time = strtotime($this->created); + $act->link = $this->bestUrl(); + + $act->content = common_xml_safe_string($this->rendered); + $act->id = $this->uri; + $act->title = common_xml_safe_string($this->content); + + $ctx = new ActivityContext(); + + if (!empty($this->reply_to)) { + $reply = Notice::staticGet('id', $this->reply_to); + if (!empty($reply)) { + $ctx->replyToID = $reply->uri; + $ctx->replyToUrl = $reply->bestUrl(); + } + } + + $ctx->location = $this->getLocation(); + + $conv = null; + + if (!empty($this->conversation)) { + $conv = Conversation::staticGet('id', $this->conversation); + if (!empty($conv)) { + $ctx->conversation = $conv->uri; + } + } + + $reply_ids = $this->getReplies(); + + foreach ($reply_ids as $id) { + $profile = Profile::staticGet('id', $id); + if (!empty($profile)) { + $ctx->attention[] = $profile->uri; + } + } + + $groups = $this->getGroups(); + + foreach ($groups as $group) { + $ctx->attention[] = $group->uri; + } + + $act->context = $ctx; + + return $act; + } + // This has gotten way too long. Needs to be sliced up into functional bits // or ideally exported to a utility class. -- cgit v1.2.3-54-g00ecf From 4338bc1ee71c79a6ae55e30157e9bba078acca5d Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 13 Sep 2010 16:22:27 -0400 Subject: bug in time and object handling in Fave::asActivity --- classes/Fave.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'classes') diff --git a/classes/Fave.php b/classes/Fave.php index 9d0b0aa02..f21f1b529 100644 --- a/classes/Fave.php +++ b/classes/Fave.php @@ -141,16 +141,16 @@ class Fave extends Memcached_DataObject $act->id = TagURI::mint('favor:%d:%d:%s', $profile->id, $notice->id, - common_date_iso8601($this->created)); + common_date_iso8601($this->modified)); - $act->time = $this->created; + $act->time = strtotime($this->modified); $act->title = _("Favor"); $act->content = sprintf(_("%s marked notice %s as a favorite."), $profile->getBestName(), $notice->uri); - $act->actor = ActivityObject::fromProfile($profile); - $act->object = ActivityObject::fromNotice($notice); + $act->actor = ActivityObject::fromProfile($profile); + $act->objects[] = ActivityObject::fromNotice($notice); return $act; } -- cgit v1.2.3-54-g00ecf From 9771a7193ff14a23bcf4d34523441416c8ebfad7 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 13 Sep 2010 16:22:42 -0400 Subject: bug in time and object handling in Subscription::asActivity --- classes/Subscription.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'classes') diff --git a/classes/Subscription.php b/classes/Subscription.php index 0044699a3..1287499fa 100644 --- a/classes/Subscription.php +++ b/classes/Subscription.php @@ -256,8 +256,8 @@ class Subscription extends Memcached_DataObject $subscriber->getBestName(), $subscribed->getBestName()); - $act->actor = ActivityObject::fromProfile($subscriber); - $act->object = ActivityObject::fromProfile($subscribed); + $act->actor = ActivityObject::fromProfile($subscriber); + $act->objects[] = ActivityObject::fromProfile($subscribed); return $act; } -- cgit v1.2.3-54-g00ecf From 9f4891568f458a8135d59820b47b91e3f89ab93b Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 13 Sep 2010 16:27:02 -0400 Subject: bugs in function calls in Notice::asActivity --- classes/Notice.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'classes') diff --git a/classes/Notice.php b/classes/Notice.php index 9a6f180e5..0539ca3b1 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1218,16 +1218,16 @@ class Notice extends Memcached_DataObject $act = new Activity(); - $act->actor = Activity::fromProfile($profile); + $act->actor = ActivityObject::fromProfile($profile); $act->verb = ActivityVerb::POST; $act->objects[] = ActivityObject::fromNotice($this); $act->time = strtotime($this->created); $act->link = $this->bestUrl(); - $act->content = common_xml_safe_string($this->rendered); + $act->content = common_xml_safe_str($this->rendered); $act->id = $this->uri; - $act->title = common_xml_safe_string($this->content); + $act->title = common_xml_safe_str($this->content); $ctx = new ActivityContext(); -- cgit v1.2.3-54-g00ecf From 43ad609600f8374e923579c5f3dc6b28a92b1c7c Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 14 Sep 2010 11:01:29 -0400 Subject: Add Group_member::asActivity() to record group joins --- classes/Group_member.php | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'classes') diff --git a/classes/Group_member.php b/classes/Group_member.php index 2239461be..c6ff24fed 100644 --- a/classes/Group_member.php +++ b/classes/Group_member.php @@ -65,4 +65,54 @@ class Group_member extends Memcached_DataObject return true; } + + function getMember() + { + $member = Profile::staticGet('id', $this->profile_id); + + if (empty($member)) { + throw new Exception("Profile ID {$this->profile_id} invalid."); + } + + return $member; + } + + function getGroup() + { + $group = User_group::staticGet('id', $this->group_id); + + if (empty($group)) { + throw new Exception("Group ID {$this->group_id} invalid."); + } + + return $group; + } + + function asActivity() + { + $member = $this->getMember(); + $group = $this->getGroup(); + + $act = new Activity(); + + $act->id = TagURI::mint('join:%d:%d:%s', + $member->id, + $group->id, + common_date_iso8601($this->created)); + + $act->actor = ActivityObject::fromProfile($member); + $act->verb = ActivityVerb::JOIN; + $act->object = ActivityObject::fromGroup($group); + + $act->time = strtotime($this->created); + $act->title = _m("Join"); + + // TRANS: Success message for subscribe to group attempt through OStatus. + // TRANS: %1$s is the member name, %2$s is the subscribed group's name. + $act->content = sprintf(_m("%1$s has joined group %2$s."), + $member->getBestName(), + $group->getBestName()); + + return $act; + } } -- cgit v1.2.3-54-g00ecf From fac1942dad983eb9f7f455c252c472873f9b2e60 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 15 Sep 2010 07:11:24 -0400 Subject: better output for group membership as activity --- classes/Group_member.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'classes') diff --git a/classes/Group_member.php b/classes/Group_member.php index c6ff24fed..939a9cde7 100644 --- a/classes/Group_member.php +++ b/classes/Group_member.php @@ -100,16 +100,16 @@ class Group_member extends Memcached_DataObject $group->id, common_date_iso8601($this->created)); - $act->actor = ActivityObject::fromProfile($member); - $act->verb = ActivityVerb::JOIN; - $act->object = ActivityObject::fromGroup($group); + $act->actor = ActivityObject::fromProfile($member); + $act->verb = ActivityVerb::JOIN; + $act->objects[] = ActivityObject::fromGroup($group); $act->time = strtotime($this->created); - $act->title = _m("Join"); + $act->title = _("Join"); // TRANS: Success message for subscribe to group attempt through OStatus. // TRANS: %1$s is the member name, %2$s is the subscribed group's name. - $act->content = sprintf(_m("%1$s has joined group %2$s."), + $act->content = sprintf(_('%1$s has joined group %2$s.'), $member->getBestName(), $group->getBestName()); -- cgit v1.2.3-54-g00ecf From 444959a789e5bc122b177cb970ca4006c07c1eee Mon Sep 17 00:00:00 2001 From: James Walker Date: Fri, 17 Sep 2010 16:33:02 -0400 Subject: Status_network::encache() doesn't exist --- classes/Status_network.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'classes') diff --git a/classes/Status_network.php b/classes/Status_network.php index c4f37ce1c..70c7a58eb 100644 --- a/classes/Status_network.php +++ b/classes/Status_network.php @@ -167,9 +167,8 @@ class Status_network extends Safe_DataObject ' WHERE nickname = ' . $this->_quote($this->nickname); $orig->decache(); $result = $this->query($qry); - if ($result) { - $this->encache(); - } + $this->decache(); + return $result; } -- cgit v1.2.3-54-g00ecf From 521daf5562051d0cc319c35a0dceaae3e0fd49b7 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 20 Sep 2010 15:57:46 -0700 Subject: Ticket #2327: fixing block to remove the blocking user's subscription to the blockee if present; also cleaning up inbox delivery to apply the block checks more consistently, instead of just to group posts. --- classes/Notice.php | 33 ++++++++++++++++++++------------- classes/User.php | 3 +++ 2 files changed, 23 insertions(+), 13 deletions(-) (limited to 'classes') diff --git a/classes/Notice.php b/classes/Notice.php index f1b012465..13b322828 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -753,8 +753,15 @@ class Notice extends Memcached_DataObject } /** - * @param $groups array of Group *objects* - * @param $recipients array of profile *ids* + * Pull up a full list of local recipients who will be getting + * this notice in their inbox. Results will be cached, so don't + * change the input data wily-nilly! + * + * @param array $groups optional list of Group objects; + * if left empty, will be loaded from group_inbox records + * @param array $recipient optional list of reply profile ids + * if left empty, will be loaded from reply records + * @return array associating recipient user IDs with an inbox source constant */ function whoGets($groups=null, $recipients=null) { @@ -787,27 +794,27 @@ class Notice extends Memcached_DataObject $ni[$id] = NOTICE_INBOX_SOURCE_SUB; } - $profile = $this->getProfile(); - foreach ($groups as $group) { $users = $group->getUserMembers(); foreach ($users as $id) { if (!array_key_exists($id, $ni)) { - $user = User::staticGet('id', $id); - if (!$user->hasBlocked($profile)) { - $ni[$id] = NOTICE_INBOX_SOURCE_GROUP; - } + $ni[$id] = NOTICE_INBOX_SOURCE_GROUP; } } } foreach ($recipients as $recipient) { - if (!array_key_exists($recipient, $ni)) { - $recipientUser = User::staticGet('id', $recipient); - if (!empty($recipientUser)) { - $ni[$recipient] = NOTICE_INBOX_SOURCE_REPLY; - } + $ni[$recipient] = NOTICE_INBOX_SOURCE_REPLY; + } + } + + // Exclude any deleted, non-local, or blocking recipients. + $profile = $this->getProfile(); + foreach ($ni as $id => $source) { + $user = User::staticGet('id', $id); + if (empty($user) || $user->hasBlocked($profile)) { + unset($ni[$id]); } } diff --git a/classes/User.php b/classes/User.php index 8033229c4..4c25ee3d9 100644 --- a/classes/User.php +++ b/classes/User.php @@ -552,6 +552,9 @@ class User extends Memcached_DataObject if (Subscription::exists($other, $self)) { Subscription::cancel($other, $self); } + if (Subscription::exists($self, $other)) { + Subscription::cancel($self, $other); + } $block->query('COMMIT'); -- cgit v1.2.3-54-g00ecf From 28b06864fbb5a14e4a1b06803461b4022682dac6 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 20 Sep 2010 17:37:21 -0700 Subject: Fix for #2227: 'view profile designs' and other default-on options are initially mis-set to off due to caching at account creation --- classes/User.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'classes') diff --git a/classes/User.php b/classes/User.php index 4c25ee3d9..080e338fe 100644 --- a/classes/User.php +++ b/classes/User.php @@ -255,6 +255,19 @@ class User extends Memcached_DataObject $user->inboxed = 1; + // Set default-on options here, otherwise they'll be disabled + // initially for sites using caching, since the initial encache + // doesn't know about the defaults in the database. + $user->emailnotifysub = 1; + $user->emailnotifyfav = 1; + $user->emailnotifynudge = 1; + $user->emailnotifymsg = 1; + $user->emailnotifyattn = 1; + $user->emailmicroid = 1; + $user->emailpost = 1; + $user->jabbermicroid = 1; + $user->viewdesigns = 1; + $user->created = common_sql_now(); if (Event::handle('StartUserRegister', array(&$user, &$profile))) { -- cgit v1.2.3-54-g00ecf From 556a2a8fd8ce278f5c0b5ced9e762c6f9bac8659 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 21 Sep 2010 06:21:47 -0400 Subject: use Profile::getUri() to get a profile's URI --- classes/Notice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/Notice.php b/classes/Notice.php index 0539ca3b1..04dcd24cd 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1255,7 +1255,7 @@ class Notice extends Memcached_DataObject foreach ($reply_ids as $id) { $profile = Profile::staticGet('id', $id); if (!empty($profile)) { - $ctx->attention[] = $profile->uri; + $ctx->attention[] = $profile->getUri(); } } -- cgit v1.2.3-54-g00ecf From 4d01f8fbb650ea246d24ebde1001c8c42f98faa4 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 22 Sep 2010 12:08:17 -0400 Subject: save a URI with the user --- classes/User.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/User.php b/classes/User.php index 080e338fe..b85192b29 100644 --- a/classes/User.php +++ b/classes/User.php @@ -282,7 +282,13 @@ class User extends Memcached_DataObject } $user->id = $id; - $user->uri = common_user_uri($user); + + if (!empty($uri)) { + $user->uri = $uri; + } else { + $user->uri = common_user_uri($user); + } + if (!empty($password)) { // may not have a password for OpenID users $user->password = common_munge_password($password, $id); } -- cgit v1.2.3-54-g00ecf From b03ece26eb1589c5200094f4d87455ca46db780b Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Tue, 28 Sep 2010 23:21:09 +0200 Subject: * i18n/L10n and translator documentation updates. * whitespace and indentation updates --- classes/Avatar.php | 5 +++-- classes/Consumer.php | 1 - classes/Conversation.php | 2 -- classes/Fave.php | 5 ++++- classes/File.php | 1 - classes/File_oembed.php | 1 - classes/File_redirection.php | 1 - classes/File_thumbnail.php | 1 - classes/File_to_post.php | 1 - classes/Foreign_link.php | 2 -- classes/Foreign_service.php | 4 ++-- classes/Foreign_subscription.php | 2 +- classes/Foreign_user.php | 1 - classes/Group_block.php | 1 - classes/Group_inbox.php | 2 +- classes/Group_member.php | 9 +++++++-- classes/Inbox.php | 9 ++++----- classes/Invitation.php | 2 +- classes/Memcached_DataObject.php | 9 ++++----- classes/Message.php | 1 - classes/Nonce.php | 1 - classes/Notice.php | 7 +------ classes/Notice_source.php | 2 +- classes/Oauth_application.php | 2 -- classes/Oauth_application_user.php | 1 - 25 files changed, 29 insertions(+), 44 deletions(-) (limited to 'classes') diff --git a/classes/Avatar.php b/classes/Avatar.php index dbe2cd813..6edc81768 100644 --- a/classes/Avatar.php +++ b/classes/Avatar.php @@ -42,8 +42,9 @@ class Avatar extends Memcached_DataObject return Memcached_DataObject::pkeyGet('Avatar', $kv); } - // where should the avatar go for this user? - + /** + * Where should the avatar go for this user? + */ static function filename($id, $extension, $size=null, $extra=null) { if ($size) { diff --git a/classes/Consumer.php b/classes/Consumer.php index ce399f278..c1090b85a 100644 --- a/classes/Consumer.php +++ b/classes/Consumer.php @@ -65,5 +65,4 @@ class Consumer extends Memcached_DataObject $nonce->consumer_key = $this->consumer_key; $nonce->delete(); } - } diff --git a/classes/Conversation.php b/classes/Conversation.php index f540004ef..aab55723f 100755 --- a/classes/Conversation.php +++ b/classes/Conversation.php @@ -74,6 +74,4 @@ class Conversation extends Memcached_DataObject return $conv; } - } - diff --git a/classes/Fave.php b/classes/Fave.php index f21f1b529..059b339cd 100644 --- a/classes/Fave.php +++ b/classes/Fave.php @@ -144,8 +144,11 @@ class Fave extends Memcached_DataObject common_date_iso8601($this->modified)); $act->time = strtotime($this->modified); + // TRANS: Activity title when marking a notice as favorite. $act->title = _("Favor"); - $act->content = sprintf(_("%s marked notice %s as a favorite."), + // TRANS: Ntofication given when a user marks a notice as favorite. + // TRANS: %1$s is a user nickname or full name, %2$s is a notice URI. + $act->content = sprintf(_("%1$s marked notice %2$s as a favorite."), $profile->getBestName(), $notice->uri); diff --git a/classes/File.php b/classes/File.php index 407fd3211..d457968b5 100644 --- a/classes/File.php +++ b/classes/File.php @@ -29,7 +29,6 @@ require_once INSTALLDIR.'/classes/File_to_post.php'; /** * Table Definition for file */ - class File extends Memcached_DataObject { ###START_AUTOCODE diff --git a/classes/File_oembed.php b/classes/File_oembed.php index 041b44740..4813d5dda 100644 --- a/classes/File_oembed.php +++ b/classes/File_oembed.php @@ -131,4 +131,3 @@ class File_oembed extends Memcached_DataObject } } } - diff --git a/classes/File_redirection.php b/classes/File_redirection.php index 51b8be3b0..68fed77e8 100644 --- a/classes/File_redirection.php +++ b/classes/File_redirection.php @@ -281,4 +281,3 @@ class File_redirection extends Memcached_DataObject $file_redir->insert(); } } - diff --git a/classes/File_thumbnail.php b/classes/File_thumbnail.php index f8b70356c..edae8ac21 100644 --- a/classes/File_thumbnail.php +++ b/classes/File_thumbnail.php @@ -57,4 +57,3 @@ class File_thumbnail extends Memcached_DataObject $tn->insert(); } } - diff --git a/classes/File_to_post.php b/classes/File_to_post.php index 72a42b088..530921adc 100644 --- a/classes/File_to_post.php +++ b/classes/File_to_post.php @@ -67,4 +67,3 @@ class File_to_post extends Memcached_DataObject return Memcached_DataObject::pkeyGet('File_to_post', $kv); } } - diff --git a/classes/Foreign_link.php b/classes/Foreign_link.php index e47b2e309..60db51595 100644 --- a/classes/Foreign_link.php +++ b/classes/Foreign_link.php @@ -44,7 +44,6 @@ class Foreign_link extends Memcached_DataObject $result = $flink->find(true); return empty($result) ? null : $flink; - } static function getByForeignID($foreign_id, $service) @@ -129,5 +128,4 @@ class Foreign_link extends Memcached_DataObject return false; } } - } diff --git a/classes/Foreign_service.php b/classes/Foreign_service.php index ef614dbd6..dd74fd2ca 100644 --- a/classes/Foreign_service.php +++ b/classes/Foreign_service.php @@ -4,7 +4,7 @@ */ require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; -class Foreign_service extends Memcached_DataObject +class Foreign_service extends Memcached_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -12,7 +12,7 @@ class Foreign_service extends Memcached_DataObject public $__table = 'foreign_service'; // table name public $id; // int(4) primary_key not_null public $name; // varchar(32) unique_key not_null - public $description; // varchar(255) + public $description; // varchar(255) public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP diff --git a/classes/Foreign_subscription.php b/classes/Foreign_subscription.php index d50860621..ec2631238 100644 --- a/classes/Foreign_subscription.php +++ b/classes/Foreign_subscription.php @@ -4,7 +4,7 @@ */ require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; -class Foreign_subscription extends Memcached_DataObject +class Foreign_subscription extends Memcached_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ diff --git a/classes/Foreign_user.php b/classes/Foreign_user.php index e98a16064..8e6e0b33e 100644 --- a/classes/Foreign_user.php +++ b/classes/Foreign_user.php @@ -83,5 +83,4 @@ class Foreign_user extends Memcached_DataObject } return $result; } - } diff --git a/classes/Group_block.php b/classes/Group_block.php index 9f4d59295..ffc57a496 100644 --- a/classes/Group_block.php +++ b/classes/Group_block.php @@ -111,5 +111,4 @@ class Group_block extends Memcached_DataObject return true; } - } diff --git a/classes/Group_inbox.php b/classes/Group_inbox.php index 2a0787e38..8f5c65e59 100644 --- a/classes/Group_inbox.php +++ b/classes/Group_inbox.php @@ -1,8 +1,8 @@ profile_id); if (empty($member)) { - throw new Exception("Profile ID {$this->profile_id} invalid."); + // TRANS: Exception thrown providing an invalid profile ID. + // TRANS: %s is the invalid profile ID. + throw new Exception(sprintf(_("Profile ID %s is invalid."),$this->profile_id)); } return $member; @@ -82,7 +84,9 @@ class Group_member extends Memcached_DataObject $group = User_group::staticGet('id', $this->group_id); if (empty($group)) { - throw new Exception("Group ID {$this->group_id} invalid."); + // TRANS: Exception thrown providing an invalid group ID. + // TRANS: %s is the invalid group ID. + throw new Exception(sprintf(_("Group ID %s is invalid."),$this->group_id)); } return $group; @@ -105,6 +109,7 @@ class Group_member extends Memcached_DataObject $act->objects[] = ActivityObject::fromGroup($group); $act->time = strtotime($this->created); + // TRANS: Activity title. $act->title = _("Join"); // TRANS: Success message for subscribe to group attempt through OStatus. diff --git a/classes/Inbox.php b/classes/Inbox.php index 430419ba5..a1ab6215f 100644 --- a/classes/Inbox.php +++ b/classes/Inbox.php @@ -55,7 +55,6 @@ class Inbox extends Memcached_DataObject /** * Create a new inbox from existing Notice_inbox stuff */ - static function initialize($user_id) { $inbox = Inbox::fromNoticeInbox($user_id); @@ -115,10 +114,10 @@ class Inbox extends Memcached_DataObject */ static function insertNotice($user_id, $notice_id) { - // Going straight to the DB rather than trusting our caching - // during an update. Note: not using DB_DataObject::staticGet, - // which is unsafe to use directly (in-process caching causes - // memory leaks, which accumulate in queue processes). + // Going straight to the DB rather than trusting our caching + // during an update. Note: not using DB_DataObject::staticGet, + // which is unsafe to use directly (in-process caching causes + // memory leaks, which accumulate in queue processes). $inbox = new Inbox(); if (!$inbox->get('user_id', $user_id)) { $inbox = Inbox::initialize($user_id); diff --git a/classes/Invitation.php b/classes/Invitation.php index 8a36fd8df..0e87c1629 100644 --- a/classes/Invitation.php +++ b/classes/Invitation.php @@ -4,7 +4,7 @@ */ require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; -class Invitation extends Memcached_DataObject +class Invitation extends Memcached_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index 0f1ed0489..ccfd886a1 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -189,11 +189,11 @@ class Memcached_DataObject extends Safe_DataObject str_replace("\n", " ", $e->getTraceAsString())); return false; } else { - $keys = $this->_allCacheKeys(); + $keys = $this->_allCacheKeys(); - foreach ($keys as $key) { - $c->set($key, $this); - } + foreach ($keys as $key) { + $c->set($key, $this); + } } } @@ -637,4 +637,3 @@ class Memcached_DataObject extends Safe_DataObject return $vstr; } } - diff --git a/classes/Message.php b/classes/Message.php index fa0c5b318..353dc01f9 100644 --- a/classes/Message.php +++ b/classes/Message.php @@ -38,7 +38,6 @@ class Message extends Memcached_DataObject } static function saveNew($from, $to, $content, $source) { - $sender = Profile::staticGet('id', $from); if (!$sender->hasRight(Right::NEWMESSAGE)) { diff --git a/classes/Nonce.php b/classes/Nonce.php index 2f8ab00b5..93191bd40 100644 --- a/classes/Nonce.php +++ b/classes/Nonce.php @@ -36,5 +36,4 @@ class Nonce extends Memcached_DataObject { return array('consumer_key,token' => 'token:consumer_key,token'); } - } diff --git a/classes/Notice.php b/classes/Notice.php index 4f23e3500..79626f889 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -745,6 +745,7 @@ class Notice extends Memcached_DataObject 1, 1 ); + if ($conversation->N > 0) { return true; } @@ -1305,13 +1306,10 @@ class Notice extends Memcached_DataObject } if (Event::handle('StartActivitySource', array(&$this, &$xs))) { - if ($source) { - $atom_feed = $profile->getAtomFeed(); if (!empty($atom_feed)) { - $xs->elementStart('source'); // XXX: we should store the actual feed ID @@ -1899,7 +1897,6 @@ class Notice extends Memcached_DataObject $options = array(); if (!empty($location_id) && !empty($location_ns)) { - $options['location_id'] = $location_id; $options['location_ns'] = $location_ns; @@ -1911,7 +1908,6 @@ class Notice extends Memcached_DataObject } } else if (!empty($lat) && !empty($lon)) { - $options['lat'] = $lat; $options['lon'] = $lon; @@ -1922,7 +1918,6 @@ class Notice extends Memcached_DataObject $options['location_ns'] = $location->location_ns; } } else if (!empty($profile)) { - if (isset($profile->lat) && isset($profile->lon)) { $options['lat'] = $profile->lat; $options['lon'] = $profile->lon; diff --git a/classes/Notice_source.php b/classes/Notice_source.php index e7568bbca..43893ebe1 100644 --- a/classes/Notice_source.php +++ b/classes/Notice_source.php @@ -4,7 +4,7 @@ */ require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; -class Notice_source extends Memcached_DataObject +class Notice_source extends Memcached_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ diff --git a/classes/Oauth_application.php b/classes/Oauth_application.php index 748b64220..e81706104 100644 --- a/classes/Oauth_application.php +++ b/classes/Oauth_application.php @@ -110,7 +110,6 @@ class Oauth_application extends Memcached_DataObject * * @return void */ - function uploadLogo() { if ($_FILES['app_icon']['error'] == @@ -153,5 +152,4 @@ class Oauth_application extends Memcached_DataObject $oauser->application_id = $this->id; $oauser->delete(); } - } diff --git a/classes/Oauth_application_user.php b/classes/Oauth_application_user.php index 57986281f..3d4238d64 100644 --- a/classes/Oauth_application_user.php +++ b/classes/Oauth_application_user.php @@ -40,5 +40,4 @@ class Oauth_application_user extends Memcached_DataObject return empty($result) ? null : $oau; } - } -- cgit v1.2.3-54-g00ecf From 9587f9f55b55d2819f9ba57f7befd165ab842fa6 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Tue, 28 Sep 2010 23:42:18 +0200 Subject: * i18n/L10n and translator documentation updates. * whitespace and indentation updates --- classes/Profile.php | 4 ++-- classes/Profile_tag.php | 2 -- classes/Remember_me.php | 10 +++++++--- classes/Remote_profile.php | 8 ++++---- classes/Safe_DataObject.php | 1 - classes/Sms_carrier.php | 4 ++-- classes/Status_network.php | 12 ++++++------ classes/Status_network_tag.php | 4 ++-- classes/Subscription.php | 5 ++++- classes/User_group.php | 1 - classes/User_username.php | 6 ++++-- 11 files changed, 31 insertions(+), 26 deletions(-) (limited to 'classes') diff --git a/classes/Profile.php b/classes/Profile.php index 8f8679550..3a381fcc8 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -103,7 +103,6 @@ class Profile extends Memcached_DataObject foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { # We don't do a scaled one if original is our scaled size if (!($avatar->width == $size && $avatar->height == $size)) { - $scaled_filename = $imagefile->resize($size); //$scaled = DB_DataObject::factory('avatar'); @@ -790,13 +789,14 @@ class Profile extends Memcached_DataObject * @param $right string Name of the right, usually a constant in class Right * @return boolean whether the user has the right in question */ - function hasRight($right) { $result = false; + if ($this->hasRole(Profile_role::DELETED)) { return false; } + if (Event::handle('UserRightsCheck', array($this, $right, &$result))) { switch ($right) { diff --git a/classes/Profile_tag.php b/classes/Profile_tag.php index 0a1ad9cd6..ab6bab096 100644 --- a/classes/Profile_tag.php +++ b/classes/Profile_tag.php @@ -23,7 +23,6 @@ class Profile_tag extends Memcached_DataObject ###END_AUTOCODE static function getTags($tagger, $tagged) { - $tags = array(); # XXX: store this in memcached @@ -44,7 +43,6 @@ class Profile_tag extends Memcached_DataObject } static function setTags($tagger, $tagged, $newtags) { - $newtags = array_unique($newtags); $oldtags = Profile_tag::getTags($tagger, $tagged); diff --git a/classes/Remember_me.php b/classes/Remember_me.php index 8dc29bfa3..3df7a9983 100644 --- a/classes/Remember_me.php +++ b/classes/Remember_me.php @@ -4,7 +4,7 @@ */ require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; -class Remember_me extends Memcached_DataObject +class Remember_me extends Memcached_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -16,11 +16,15 @@ class Remember_me extends Memcached_DataObject /* Static get */ function staticGet($k,$v=null) - { return Memcached_DataObject::staticGet('Remember_me',$k,$v); } + { + return Memcached_DataObject::staticGet('Remember_me',$k,$v); + } /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE function sequenceKey() - { return array(false, false); } + { + return array(false, false); + } } diff --git a/classes/Remote_profile.php b/classes/Remote_profile.php index 77bfbcd99..1672e9f95 100644 --- a/classes/Remote_profile.php +++ b/classes/Remote_profile.php @@ -24,7 +24,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } */ require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; -class Remote_profile extends Memcached_DataObject +class Remote_profile extends Memcached_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -32,8 +32,8 @@ class Remote_profile extends Memcached_DataObject public $__table = 'remote_profile'; // table name public $id; // int(4) primary_key not_null public $uri; // varchar(255) unique_key - public $postnoticeurl; // varchar(255) - public $updateprofileurl; // varchar(255) + public $postnoticeurl; // varchar(255) + public $updateprofileurl; // varchar(255) public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP @@ -43,7 +43,7 @@ class Remote_profile extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE - + function hasRight($right) { $profile = Profile::staticGet($this->id); diff --git a/classes/Safe_DataObject.php b/classes/Safe_DataObject.php index f0ea6b136..891e33a66 100644 --- a/classes/Safe_DataObject.php +++ b/classes/Safe_DataObject.php @@ -287,4 +287,3 @@ class Safe_DataObject extends DB_DataObject return Safe_DataObject::$iniCache[$key]; } } - diff --git a/classes/Sms_carrier.php b/classes/Sms_carrier.php index ffa12de29..500cb4f04 100644 --- a/classes/Sms_carrier.php +++ b/classes/Sms_carrier.php @@ -4,7 +4,7 @@ */ require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; -class Sms_carrier extends Memcached_DataObject +class Sms_carrier extends Memcached_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ @@ -22,7 +22,7 @@ class Sms_carrier extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE - + function toEmailAddress($sms) { return sprintf($this->email_pattern, $sms); diff --git a/classes/Status_network.php b/classes/Status_network.php index 70c7a58eb..5d01e72cc 100644 --- a/classes/Status_network.php +++ b/classes/Status_network.php @@ -168,16 +168,16 @@ class Status_network extends Safe_DataObject $orig->decache(); $result = $this->query($qry); $this->decache(); - + return $result; } - + function delete() { $this->decache(); # while we still have the values! return parent::delete(); } - + /** * @param string $servername hostname * @param string $wildcard hostname suffix to match wildcard config @@ -313,7 +313,7 @@ class Status_network extends Safe_DataObject if (empty($result)) { return explode('|', $this->tags); } - + return $result; } @@ -331,7 +331,7 @@ class Status_network extends Safe_DataObject $snt->site_id = $this->site_id; $snt->tag = $tag; $snt->created = common_sql_now(); - + $id = $snt->insert(); if (!$id) { // TRANS: Exception thrown when a tag cannot be saved. @@ -356,7 +356,7 @@ class Status_network extends Safe_DataObject $tag->free(); } - + /** * Check if this site record has a particular meta-info tag attached. * @param string $tag diff --git a/classes/Status_network_tag.php b/classes/Status_network_tag.php index 7dab23289..a5893c114 100644 --- a/classes/Status_network_tag.php +++ b/classes/Status_network_tag.php @@ -26,7 +26,7 @@ class Status_network_tag extends Safe_DataObject public $__table = 'status_network_tag'; // table name public $site_id; // int(4) primary_key not_null - public $tag; // varchar(64) primary_key not_null + public $tag; // varchar(64) primary_key not_null public $created; // datetime() not_null @@ -34,7 +34,7 @@ class Status_network_tag extends Safe_DataObject { global $config; global $_DB_DATAOBJECT; - + $sn = new Status_network(); $sn->_connect(); diff --git a/classes/Subscription.php b/classes/Subscription.php index 1287499fa..b4dbd84c9 100644 --- a/classes/Subscription.php +++ b/classes/Subscription.php @@ -251,8 +251,11 @@ class Subscription extends Memcached_DataObject common_date_iso8601($this->created)); $act->time = strtotime($this->created); + // TRANS: Activity tile when subscribing to another person. $act->title = _("Follow"); - $act->content = sprintf(_("%s is now following %s."), + // TRANS: Notification given when one person starts following another. + // TRANS: %1$s is the subscriber, %2$s is the subscribed. + $act->content = sprintf(_("%1$s is now following %2$s."), $subscriber->getBestName(), $subscribed->getBestName()); diff --git a/classes/User_group.php b/classes/User_group.php index 0b83cfd47..cfdcef290 100644 --- a/classes/User_group.php +++ b/classes/User_group.php @@ -465,7 +465,6 @@ class User_group extends Memcached_DataObject } static function register($fields) { - // MAGICALLY put fields into current scope extract($fields); diff --git a/classes/User_username.php b/classes/User_username.php index 8d99cddd3..ae7785cc9 100644 --- a/classes/User_username.php +++ b/classes/User_username.php @@ -18,7 +18,9 @@ class User_username extends Memcached_DataObject /* Static get */ function staticGet($k,$v=null) - { return Memcached_DataObject::staticGet('User_username',$k,$v); } + { + return Memcached_DataObject::staticGet('User_username',$k,$v); + } /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE @@ -37,6 +39,7 @@ class User_username extends Memcached_DataObject $user_username->provider_name = $provider_name; $user_username->username = $username; $user_username->created = DB_DataObject_Cast::dateTime(); + if($user_username->insert()){ return $user_username; }else{ @@ -57,5 +60,4 @@ class User_username extends Memcached_DataObject function keys() { return array('provider_name' => 'K', 'username' => 'K'); } - } -- cgit v1.2.3-54-g00ecf From c19e592fa80f616a18718c4650ea0ffc9661f7ce Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Mon, 27 Sep 2010 15:01:03 -0700 Subject: Move hasFave() to Profile --- classes/Profile.php | 35 +++++++++++++++++++++++++++++++++++ classes/User.php | 33 ++------------------------------- 2 files changed, 37 insertions(+), 31 deletions(-) (limited to 'classes') diff --git a/classes/Profile.php b/classes/Profile.php index 3a381fcc8..668f25d2e 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -473,6 +473,41 @@ class Profile extends Memcached_DataObject return $cnt; } + function hasFave($notice) + { + $cache = common_memcache(); + + // XXX: Kind of a hack. + + if (!empty($cache)) { + // This is the stream of favorite notices, in rev chron + // order. This forces it into cache. + + $ids = Fave::stream($this->id, 0, NOTICE_CACHE_WINDOW); + + // If it's in the list, then it's a fave + + if (in_array($notice->id, $ids)) { + return true; + } + + // If we're not past the end of the cache window, + // then the cache has all available faves, so this one + // is not a fave. + + if (count($ids) < NOTICE_CACHE_WINDOW) { + return false; + } + + // Otherwise, cache doesn't have all faves; + // fall through to the default + } + + $fave = Fave::pkeyGet(array('user_id' => $this->id, + 'notice_id' => $notice->id)); + return ((is_null($fave)) ? false : true); + } + function faveCount() { $c = common_memcache(); diff --git a/classes/User.php b/classes/User.php index b85192b29..27299e62e 100644 --- a/classes/User.php +++ b/classes/User.php @@ -412,37 +412,8 @@ class User extends Memcached_DataObject function hasFave($notice) { - $cache = common_memcache(); - - // XXX: Kind of a hack. - - if ($cache) { - // This is the stream of favorite notices, in rev chron - // order. This forces it into cache. - - $ids = Fave::stream($this->id, 0, NOTICE_CACHE_WINDOW); - - // If it's in the list, then it's a fave - - if (in_array($notice->id, $ids)) { - return true; - } - - // If we're not past the end of the cache window, - // then the cache has all available faves, so this one - // is not a fave. - - if (count($ids) < NOTICE_CACHE_WINDOW) { - return false; - } - - // Otherwise, cache doesn't have all faves; - // fall through to the default - } - - $fave = Fave::pkeyGet(array('user_id' => $this->id, - 'notice_id' => $notice->id)); - return ((is_null($fave)) ? false : true); + $profile = $this->getProfile(); + return $profile->hasFave($notice); } function mutuallySubscribed($other) -- cgit v1.2.3-54-g00ecf From 3960c9ad39d96cdfef390065f15f9f0fc280f37c Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 28 Sep 2010 15:46:14 -0700 Subject: Move blowFavesCache() to Profile --- classes/Profile.php | 14 ++++++++++++++ classes/User.php | 11 +---------- 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'classes') diff --git a/classes/Profile.php b/classes/Profile.php index 668f25d2e..3844077e6 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -551,6 +551,20 @@ class Profile extends Memcached_DataObject return $cnt; } + function blowFavesCache() + { + $cache = common_memcache(); + if ($cache) { + // Faves don't happen chronologically, so we need to blow + // ;last cache, too + $cache->delete(common_cache_key('fave:ids_by_user:'.$this->id)); + $cache->delete(common_cache_key('fave:ids_by_user:'.$this->id.';last')); + $cache->delete(common_cache_key('fave:ids_by_user_own:'.$this->id)); + $cache->delete(common_cache_key('fave:ids_by_user_own:'.$this->id.';last')); + } + $this->blowFaveCount(); + } + function blowSubscriberCount() { $c = common_memcache(); diff --git a/classes/User.php b/classes/User.php index 27299e62e..e784fd9e9 100644 --- a/classes/User.php +++ b/classes/User.php @@ -482,17 +482,8 @@ class User extends Memcached_DataObject function blowFavesCache() { - $cache = common_memcache(); - if ($cache) { - // Faves don't happen chronologically, so we need to blow - // ;last cache, too - $cache->delete(common_cache_key('fave:ids_by_user:'.$this->id)); - $cache->delete(common_cache_key('fave:ids_by_user:'.$this->id.';last')); - $cache->delete(common_cache_key('fave:ids_by_user_own:'.$this->id)); - $cache->delete(common_cache_key('fave:ids_by_user_own:'.$this->id.';last')); - } $profile = $this->getProfile(); - $profile->blowFaveCount(); + $profile->blowFavesCache(); } function getSelfTags() -- cgit v1.2.3-54-g00ecf From 55a080ea4e662ae719e8956c93389f3c689bb73a Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Thu, 30 Sep 2010 16:25:15 -0700 Subject: ForceGroup plugin: optionally force new users to join a particular group or set of groups on registration; and/or to force posts by members of particular groups to be posted into those groups even if not explicitly mentioned. The posting feature requires a couple quick hook additions in core. --- classes/Notice.php | 1 + lib/distribqueuehandler.php | 8 +++- plugins/ForceGroup/ForceGroupPlugin.php | 82 +++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 plugins/ForceGroup/ForceGroupPlugin.php (limited to 'classes') diff --git a/classes/Notice.php b/classes/Notice.php index 79626f889..e268544b5 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -2034,6 +2034,7 @@ class Notice extends Memcached_DataObject { // We always insert for the author so they don't // have to wait + Event::handle('StartNoticeDistribute', array($this)); $user = User::staticGet('id', $this->profile_id); if (!empty($user)) { diff --git a/lib/distribqueuehandler.php b/lib/distribqueuehandler.php index 8f4b72d5c..a7519c1d5 100644 --- a/lib/distribqueuehandler.php +++ b/lib/distribqueuehandler.php @@ -77,14 +77,20 @@ class DistribQueueHandler $this->logit($notice, $e); } + try { + Event::handle('EndNoticeDistribute', array($notice)); + } catch (Exception $e) { + $this->logit($notice, $e); + } + try { Event::handle('EndNoticeSave', array($notice)); - // Enqueue for other handlers } catch (Exception $e) { $this->logit($notice, $e); } try { + // Enqueue for other handlers common_enqueue_notice($notice); } catch (Exception $e) { $this->logit($notice, $e); diff --git a/plugins/ForceGroup/ForceGroupPlugin.php b/plugins/ForceGroup/ForceGroupPlugin.php new file mode 100644 index 000000000..e0a04fcca --- /dev/null +++ b/plugins/ForceGroup/ForceGroupPlugin.php @@ -0,0 +1,82 @@ +. + */ + +/** + * @package ForceGroupPlugin + * @maintainer Brion Vibber + */ + +if (!defined('STATUSNET')) { exit(1); } + +class ForceGroupPlugin extends Plugin +{ + /** + * Members of these groups will have all their posts mirrored into + * the group even if they don't explicitly mention it. + * + * List by local nickname. + */ + public $post = array(); + + /** + * New user registrations will automatically join these groups on + * registration. They're not prevented from leaving, however. + * + * List by local nickname. + */ + public $join = array(); + + /** + * If poster is in one of the forced groups, make sure their notice + * gets saved into that group even if not explicitly mentioned. + * + * @param Notice $notice + * @return boolean event hook return + */ + function onStartNoticeDistribute($notice) + { + $profile = $notice->getProfile(); + foreach ($this->post as $nickname) { + $group = User_group::getForNickname($nickname); + if ($group && $profile->isMember($group)) { + $notice->addToGroupInbox($group); + } + } + return true; + } + + function onEndUserRegister($profile, $user) + { + $profile = $user->getProfile(); + foreach ($this->join as $nickname) { + $group = User_group::getForNickname($nickname); + if ($group && !$profile->isMember($group)) { + try { + if (Event::handle('StartJoinGroup', array($group, $user))) { + Group_member::join($group->id, $user->id); + Event::handle('EndJoinGroup', array($group, $user)); + } + } catch (Exception $e) { + throw new ServerException(sprintf(_('Could not join user %1$s to group %2$s.'), + $user->nickname, $group->nickname)); + } + } + } + } +} -- cgit v1.2.3-54-g00ecf