forked from GNUsocial/gnu-social
add events for subscribing to people and joining groups
This commit is contained in:
parent
23599da91e
commit
430bd69312
32
EVENTS.txt
32
EVENTS.txt
@ -655,3 +655,35 @@ StartUnblockProfile: when we're about to unblock
|
||||
EndUnblockProfile: when an unblock has succeeded
|
||||
- $user: the person doing the unblock
|
||||
- $profile: the person unblocked, can be remote
|
||||
|
||||
StartSubscribe: when a subscription is starting
|
||||
- $user: the person subscribing
|
||||
- $other: the person being subscribed to
|
||||
|
||||
EndSubscribe: when a subscription is finished
|
||||
- $user: the person subscribing
|
||||
- $other: the person being subscribed to
|
||||
|
||||
StartUnsubscribe: when an unsubscribe is starting
|
||||
- $user: the person unsubscribing
|
||||
- $other: the person being unsubscribed from
|
||||
|
||||
EndUnsubscribe: when an unsubscribe is done
|
||||
- $user: the person unsubscribing
|
||||
- $other: the person being unsubscribed to
|
||||
|
||||
StartJoinGroup: when a user is joining a group
|
||||
- $group: the group being joined
|
||||
- $user: the user joining
|
||||
|
||||
EndJoinGroup: when a user finishes joining a group
|
||||
- $group: the group being joined
|
||||
- $user: the user joining
|
||||
|
||||
StartLeaveGroup: when a user is leaving a group
|
||||
- $group: the group being left
|
||||
- $user: the user leaving
|
||||
|
||||
EndLeaveGroup: when a user has left a group
|
||||
- $group: the group being left
|
||||
- $user: the user leaving
|
||||
|
@ -115,16 +115,12 @@ class JoingroupAction extends Action
|
||||
|
||||
$cur = common_current_user();
|
||||
|
||||
$member = new Group_member();
|
||||
|
||||
$member->group_id = $this->group->id;
|
||||
$member->profile_id = $cur->id;
|
||||
$member->created = common_sql_now();
|
||||
|
||||
$result = $member->insert();
|
||||
|
||||
if (!$result) {
|
||||
common_log_db_error($member, 'INSERT', __FILE__);
|
||||
try {
|
||||
if (Event::handle('StartJoinGroup', array($this->group, $cur))) {
|
||||
Group_member::join($this->group->id, $cur->id);
|
||||
Event::handle('EndJoinGroup', array($this->group, $cur));
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$this->serverError(sprintf(_('Could not join user %1$s to group %2$s.'),
|
||||
$cur->nickname, $this->group->nickname));
|
||||
}
|
||||
|
@ -110,22 +110,15 @@ class LeavegroupAction extends Action
|
||||
|
||||
$cur = common_current_user();
|
||||
|
||||
$member = new Group_member();
|
||||
|
||||
$member->group_id = $this->group->id;
|
||||
$member->profile_id = $cur->id;
|
||||
|
||||
if (!$member->find(true)) {
|
||||
$this->serverError(_('Could not find membership record.'));
|
||||
return;
|
||||
}
|
||||
|
||||
$result = $member->delete();
|
||||
|
||||
if (!$result) {
|
||||
common_log_db_error($member, 'DELETE', __FILE__);
|
||||
try {
|
||||
if (Event::handle('StartLeaveGroup', array($this->group, $cur))) {
|
||||
Group_member::leave($this->group->id, $cur->id);
|
||||
Event::handle('EndLeaveGroup', array($this->group, $cur));
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$this->serverError(sprintf(_('Could not remove user %1$s from group %2$s.'),
|
||||
$cur->nickname, $this->group->nickname));
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->boolean('ajax')) {
|
||||
|
@ -25,4 +25,41 @@ class Group_member extends Memcached_DataObject
|
||||
{
|
||||
return Memcached_DataObject::pkeyGet('Group_member', $kv);
|
||||
}
|
||||
|
||||
static function join($group_id, $profile_id)
|
||||
{
|
||||
$member = new Group_member();
|
||||
|
||||
$member->group_id = $group_id;
|
||||
$member->profile_id = $profile_id;
|
||||
$member->created = common_sql_now();
|
||||
|
||||
$result = $member->insert();
|
||||
|
||||
if (!$result) {
|
||||
common_log_db_error($member, 'INSERT', __FILE__);
|
||||
throw new Exception(_("Group join failed."));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static function leave($group_id, $profile_id)
|
||||
{
|
||||
$member = Group_member::pkeyGet(array('group_id' => $group_id,
|
||||
'profile_id' => $profile_id));
|
||||
|
||||
if (empty($member)) {
|
||||
throw new Exception(_("Not part of group."));
|
||||
}
|
||||
|
||||
$result = $member->delete();
|
||||
|
||||
if (!$result) {
|
||||
common_log_db_error($member, 'INSERT', __FILE__);
|
||||
throw new Exception(_("Group leave failed."));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -222,18 +222,15 @@ class JoinCommand extends Command
|
||||
return;
|
||||
}
|
||||
|
||||
$member = new Group_member();
|
||||
|
||||
$member->group_id = $group->id;
|
||||
$member->profile_id = $cur->id;
|
||||
$member->created = common_sql_now();
|
||||
|
||||
$result = $member->insert();
|
||||
if (!$result) {
|
||||
common_log_db_error($member, 'INSERT', __FILE__);
|
||||
$channel->error($cur, sprintf(_('Could not join user %s to group %s'),
|
||||
$cur->nickname, $group->nickname));
|
||||
return;
|
||||
try {
|
||||
if (Event::handle('StartJoinGroup', array($group, $cur))) {
|
||||
Group_member::join($group->id, $cur->id);
|
||||
Event::handle('EndJoinGroup', array($group, $cur));
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$channel->error($cur, sprintf(_('Could not join user %s to group %s'),
|
||||
$cur->nickname, $group->nickname));
|
||||
return;
|
||||
}
|
||||
|
||||
$channel->output($cur, sprintf(_('%s joined group %s'),
|
||||
@ -269,21 +266,15 @@ class DropCommand extends Command
|
||||
return;
|
||||
}
|
||||
|
||||
$member = new Group_member();
|
||||
|
||||
$member->group_id = $group->id;
|
||||
$member->profile_id = $cur->id;
|
||||
|
||||
if (!$member->find(true)) {
|
||||
$channel->error($cur,_('Could not find membership record.'));
|
||||
return;
|
||||
}
|
||||
$result = $member->delete();
|
||||
if (!$result) {
|
||||
common_log_db_error($member, 'INSERT', __FILE__);
|
||||
$channel->error($cur, sprintf(_('Could not remove user %s to group %s'),
|
||||
$cur->nickname, $group->nickname));
|
||||
return;
|
||||
try {
|
||||
if (Event::handle('StartLeaveGroup', array($group, $cur))) {
|
||||
Group_member::leave($group->id, $cur->id);
|
||||
Event::handle('EndLeaveGroup', array($group, $cur));
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$channel->error($cur, sprintf(_('Could not remove user %s to group %s'),
|
||||
$cur->nickname, $group->nickname));
|
||||
return;
|
||||
}
|
||||
|
||||
$channel->output($cur, sprintf(_('%s left group %s'),
|
||||
|
90
lib/subs.php
90
lib/subs.php
@ -56,35 +56,44 @@ function subs_subscribe_to($user, $other)
|
||||
return _('User has blocked you.');
|
||||
}
|
||||
|
||||
if (!$user->subscribeTo($other)) {
|
||||
return _('Could not subscribe.');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (Event::handle('StartSubscribe', array($user, $other))) {
|
||||
|
||||
subs_notify($other, $user);
|
||||
if (!$user->subscribeTo($other)) {
|
||||
return _('Could not subscribe.');
|
||||
return;
|
||||
}
|
||||
|
||||
$cache = common_memcache();
|
||||
subs_notify($other, $user);
|
||||
|
||||
if ($cache) {
|
||||
$cache->delete(common_cache_key('user:notices_with_friends:' . $user->id));
|
||||
}
|
||||
$cache = common_memcache();
|
||||
|
||||
$profile = $user->getProfile();
|
||||
if ($cache) {
|
||||
$cache->delete(common_cache_key('user:notices_with_friends:' . $user->id));
|
||||
}
|
||||
|
||||
$profile->blowSubscriptionsCount();
|
||||
$other->blowSubscribersCount();
|
||||
$profile = $user->getProfile();
|
||||
|
||||
if ($other->autosubscribe && !$other->isSubscribed($user) && !$user->hasBlocked($other)) {
|
||||
if (!$other->subscribeTo($user)) {
|
||||
return _('Could not subscribe other to you.');
|
||||
$profile->blowSubscriptionsCount();
|
||||
$other->blowSubscribersCount();
|
||||
|
||||
if ($other->autosubscribe && !$other->isSubscribed($user) && !$user->hasBlocked($other)) {
|
||||
if (!$other->subscribeTo($user)) {
|
||||
return _('Could not subscribe other to you.');
|
||||
}
|
||||
$cache = common_memcache();
|
||||
|
||||
if ($cache) {
|
||||
$cache->delete(common_cache_key('user:notices_with_friends:' . $other->id));
|
||||
}
|
||||
|
||||
subs_notify($user, $other);
|
||||
}
|
||||
|
||||
Event::handle('EndSubscribe', array($user, $other));
|
||||
}
|
||||
$cache = common_memcache();
|
||||
|
||||
if ($cache) {
|
||||
$cache->delete(common_cache_key('user:notices_with_friends:' . $other->id));
|
||||
}
|
||||
|
||||
subs_notify($user, $other);
|
||||
} catch (Exception $e) {
|
||||
return $e->getMessage();
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -133,28 +142,37 @@ function subs_unsubscribe_to($user, $other)
|
||||
return _('Couldn\'t delete self-subscription.');
|
||||
}
|
||||
|
||||
$sub = DB_DataObject::factory('subscription');
|
||||
try {
|
||||
if (Event::handle('StartUnsubscribe', array($user, $other))) {
|
||||
|
||||
$sub->subscriber = $user->id;
|
||||
$sub->subscribed = $other->id;
|
||||
$sub = DB_DataObject::factory('subscription');
|
||||
|
||||
$sub->find(true);
|
||||
$sub->subscriber = $user->id;
|
||||
$sub->subscribed = $other->id;
|
||||
|
||||
// note we checked for existence above
|
||||
$sub->find(true);
|
||||
|
||||
if (!$sub->delete())
|
||||
return _('Couldn\'t delete subscription.');
|
||||
// note we checked for existence above
|
||||
|
||||
$cache = common_memcache();
|
||||
if (!$sub->delete())
|
||||
return _('Couldn\'t delete subscription.');
|
||||
|
||||
if ($cache) {
|
||||
$cache->delete(common_cache_key('user:notices_with_friends:' . $user->id));
|
||||
}
|
||||
$cache = common_memcache();
|
||||
|
||||
$profile = $user->getProfile();
|
||||
if ($cache) {
|
||||
$cache->delete(common_cache_key('user:notices_with_friends:' . $user->id));
|
||||
}
|
||||
|
||||
$profile->blowSubscriptionsCount();
|
||||
$other->blowSubscribersCount();
|
||||
$profile = $user->getProfile();
|
||||
|
||||
$profile->blowSubscriptionsCount();
|
||||
$other->blowSubscribersCount();
|
||||
|
||||
Event::handle('EndUnsubscribe', array($user, $other));
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
return $e->getMessage();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user