class SubscriptionController in Organic groups 8
Controller for OG subscription routes.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\og\Controller\SubscriptionController
Expanded class hierarchy of SubscriptionController
1 file declares its use of SubscriptionController
- SubscriptionControllerTest.php in tests/
src/ Unit/ SubscriptionControllerTest.php
File
- src/
Controller/ SubscriptionController.php, line 25
Namespace
Drupal\og\ControllerView source
class SubscriptionController extends ControllerBase {
/**
* OG access service.
*
* @var \Drupal\og\OgAccessInterface
*/
protected $ogAccess;
/**
* The messenger service.
*
* @var \Drupal\Core\Messenger\MessengerInterface
*/
protected $messenger;
/**
* Constructs a SubscriptionController object.
*
* @param \Drupal\og\OgAccessInterface $og_access
* The OG access service.
* @param \Drupal\Core\Messenger\MessengerInterface $messenger
* The messenger service.
*/
public function __construct(OgAccessInterface $og_access, MessengerInterface $messenger) {
$this->ogAccess = $og_access;
$this->messenger = $messenger;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('og.access'), $container
->get('messenger'));
}
/**
* Subscribe a user to group.
*
* @param string $entity_type_id
* The entity type of the group entity.
* @param \Drupal\Core\Entity\EntityInterface $group
* The entity ID of the group entity.
* @param \Drupal\og\OgMembershipTypeInterface $membership_type
* The membership type to be used for creating the membership.
*
* @return mixed
* Redirect user or show access denied if they are not allowed to subscribe,
* otherwise provide a subscribe confirmation form.
*/
public function subscribe($entity_type_id, EntityInterface $group, OgMembershipTypeInterface $membership_type) {
if (!$group instanceof ContentEntityInterface) {
// Not a valid entity.
throw new AccessDeniedHttpException();
}
if (!Og::isGroup($entity_type_id, $group
->bundle())) {
// Not a valid group.
throw new AccessDeniedHttpException();
}
$user = $this
->entityTypeManager()
->getStorage('user')
->load($this
->currentUser()
->id());
if ($user
->isAnonymous()) {
// Anonymous user can't request membership.
$destination = $this
->getDestinationArray();
$user_login_url = Url::fromRoute('user.login', [], $destination)
->toString();
if ($this
->config('user.settings')
->get('register') === UserInterface::REGISTER_ADMINISTRATORS_ONLY) {
$params = [
':login' => $user_login_url,
];
$this->messenger
->addMessage($this
->t('In order to join any group, you must <a href=":login">login</a>. After you have successfully done so, you will need to request membership again.', $params));
}
else {
$user_register_url = Url::fromRoute('user.register', [], $destination)
->toString();
$params = [
':register' => $user_register_url,
':login' => $user_login_url,
];
$this->messenger
->addMessage($this
->t('In order to join any group, you must <a href=":login">login</a> or <a href=":register">register</a> a new account. After you have successfully done so, you will need to request membership again.', $params));
}
return new RedirectResponse(Url::fromRoute('user.page')
->setAbsolute(TRUE)
->toString());
}
$redirect = FALSE;
$message = '';
$params = [
'@user' => $user
->getDisplayName(),
];
// Show the group name only if user has access to it.
$params['@group'] = $group
->access('view', $user) ? $group
->label() : $this
->t('Private group');
if (Og::isMemberBlocked($group, $user)) {
// User is blocked, access denied.
throw new AccessDeniedHttpException();
}
if (Og::isMemberPending($group, $user)) {
// User is pending, return them back.
$message = $this
->t('You already have a pending membership for the the group @group.', $params);
$redirect = TRUE;
}
if (Og::isMember($group, $user)) {
// User is already a member, return them back.
$message = $this
->t('You are already a member of the group @group.', $params);
$redirect = TRUE;
}
if ($redirect) {
$this->messenger
->addMessage($message, 'warning');
return new RedirectResponse($group
->toUrl()
->setAbsolute(TRUE)
->toString());
}
$subscribe = $this->ogAccess
->userAccess($group, 'subscribe');
$subscribe_without_approval = $this->ogAccess
->userAccess($group, 'subscribe without approval');
if (!$subscribe
->isAllowed() && !$subscribe_without_approval
->isAllowed()) {
throw new AccessDeniedHttpException();
}
$membership = Og::createMembership($group, $user, $membership_type
->id());
$form = $this
->entityFormBuilder()
->getForm($membership, 'subscribe');
return $form;
}
/**
* Unsubscribe a user from group.
*
* @param \Drupal\Core\Entity\ContentEntityInterface $group
* The group entity.
*
* @return mixed
* Redirect user or show access denied if they are not allowed to subscribe,
* otherwise provide an un-subscribe confirmation form.
*/
public function unsubscribe(ContentEntityInterface $group) {
$user = $this
->currentUser();
if (!($membership = Og::getMembership($group, $user, OgMembershipInterface::ALL_STATES))) {
// User is not a member.
throw new AccessDeniedHttpException();
}
if ($membership
->getState() == OgMembershipInterface::STATE_BLOCKED) {
// User is a blocked member.
throw new AccessDeniedHttpException();
}
if ($group instanceof EntityOwnerInterface && $group
->getOwnerId() == $user
->id()) {
// The user is the manager of the group.
$this->messenger
->addMessage($this
->t('As the manager of %group, you can not leave the group.', [
'%group' => $group
->label(),
]));
return new RedirectResponse($group
->toUrl()
->setAbsolute()
->toString());
}
$form = $this
->entityFormBuilder()
->getForm($membership, 'unsubscribe');
return $form;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ControllerBase:: |
protected | property | The configuration factory. | |
ControllerBase:: |
protected | property | The current user service. | 1 |
ControllerBase:: |
protected | property | The entity form builder. | |
ControllerBase:: |
protected | property | The entity manager. | |
ControllerBase:: |
protected | property | The entity type manager. | |
ControllerBase:: |
protected | property | The form builder. | 2 |
ControllerBase:: |
protected | property | The key-value storage. | 1 |
ControllerBase:: |
protected | property | The language manager. | 1 |
ControllerBase:: |
protected | property | The module handler. | 2 |
ControllerBase:: |
protected | property | The state service. | |
ControllerBase:: |
protected | function | Returns the requested cache bin. | |
ControllerBase:: |
protected | function | Retrieves a configuration object. | |
ControllerBase:: |
private | function | Returns the service container. | |
ControllerBase:: |
protected | function | Returns the current user. | 1 |
ControllerBase:: |
protected | function | Retrieves the entity form builder. | |
ControllerBase:: |
protected | function | Retrieves the entity manager service. | |
ControllerBase:: |
protected | function | Retrieves the entity type manager. | |
ControllerBase:: |
protected | function | Returns the form builder service. | 2 |
ControllerBase:: |
protected | function | Returns a key/value storage collection. | 1 |
ControllerBase:: |
protected | function | Returns the language manager service. | 1 |
ControllerBase:: |
protected | function | Returns the module handler. | 2 |
ControllerBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
ControllerBase:: |
protected | function | Returns the state storage service. | |
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
SubscriptionController:: |
protected | property |
The messenger service. Overrides MessengerTrait:: |
|
SubscriptionController:: |
protected | property | OG access service. | |
SubscriptionController:: |
public static | function |
Instantiates a new instance of this class. Overrides ControllerBase:: |
|
SubscriptionController:: |
public | function | Subscribe a user to group. | |
SubscriptionController:: |
public | function | Unsubscribe a user from group. | |
SubscriptionController:: |
public | function | Constructs a SubscriptionController object. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |