protected function body()
{
if (!$this->userHasPrivileges(User::groupsJoinPrivate, User::groupsJoinPublic, User::groupsRequest)) {
return false;
}
if (!$this->isInputValid(array('id' => 'isIndex'))) {
return false;
}
$groupId = $this->getParams('id');
/**
* @var $group \Group
*/
$group = Repositories::findEntity(Repositories::Group, $groupId);
// Calculate privileges of the user
$user = User::instance();
$canJoinPrivate = User::instance()->hasPrivileges(User::groupsJoinPrivate);
$groupIsPrivate = $group->getType() == \Group::TYPE_PRIVATE;
$hasSufficientPrivileges = $groupIsPrivate && ($canJoinPrivate || $user->hasPrivileges(User::groupsRequest)) || !$groupIsPrivate && $user->hasPrivileges(User::groupsJoinPublic);
if (!$hasSufficientPrivileges) {
return $this->death(StringID::InsufficientPrivileges);
}
$status = $canJoinPrivate || !$groupIsPrivate ? \Subscription::STATUS_SUBSCRIBED : \Subscription::STATUS_REQUESTED;
// Put into database
$subscription = new \Subscription();
$subscription->setGroup($group);
$subscription->setUser(User::instance()->getEntity());
$subscription->setStatus($status);
Repositories::persistAndFlush($subscription);
return true;
}