class MultipleRegistrationController in Multiple Registration 8
Same name and namespace in other branches
- 8.2 src/Controller/MultipleRegistrationController.php \Drupal\multiple_registration\Controller\MultipleRegistrationController
- 3.x src/Controller/MultipleRegistrationController.php \Drupal\multiple_registration\Controller\MultipleRegistrationController
Class MultipleRegistrationController.
@package Drupal\multiple_registration\Controller
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\multiple_registration\Controller\MultipleRegistrationController
Expanded class hierarchy of MultipleRegistrationController
4 files declare their use of MultipleRegistrationController
- CommonSettingsPageForm.php in src/
Form/ CommonSettingsPageForm.php - CreateRegistrationPageForm.php in src/
Form/ CreateRegistrationPageForm.php - DeleteRegistrationPageForm.php in src/
Form/ DeleteRegistrationPageForm.php - multiple_registration.module in ./
multiple_registration.module - Contains multiple_registration.module.
1 string reference to 'MultipleRegistrationController'
1 service uses MultipleRegistrationController
File
- src/
Controller/ MultipleRegistrationController.php, line 26
Namespace
Drupal\multiple_registration\ControllerView source
class MultipleRegistrationController extends ControllerBase {
const MULTIPLE_REGISTRATION_SIGNUP_PATH_PATTERN = '/user/register/';
const MULTIPLE_REGISTRATION_GENERAL_REGISTRATION_ID = 'authenticated';
public $regPagesConfig;
protected $availableUserRolesService;
protected $aliasManager;
protected $routeMatch;
/**
* MultipleRegistrationController constructor.
*
* @param \Drupal\multiple_registration\AvailableUserRolesService $availableUserRolesService
* AvailableUserRoles Service.
* @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory
* Config factory.
* @param \Drupal\Core\Path\AliasManager $aliasManager
* Alias manager.
* @param \Drupal\Core\Routing\CurrentRouteMatch $routeMatch
* RouteMatch service.
*/
public function __construct(AvailableUserRolesService $availableUserRolesService, ConfigFactoryInterface $configFactory, AliasManager $aliasManager, CurrentRouteMatch $routeMatch) {
$this->regPagesConfig = $configFactory
->getEditable('multiple_registration.create_registration_page_form_config');
$this->availableUserRolesService = $availableUserRolesService;
$this->aliasManager = $aliasManager;
$this->routeMatch = $routeMatch;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('multiple_registration.service'), $container
->get('config.factory'), $container
->get('path.alias_manager'), $container
->get('current_route_match'));
}
/**
* Checks access for register page.
*
* @param \Drupal\Core\Session\AccountInterface $account
* Run access checks for this account.
*
* @return \Drupal\Core\Access\AccessResult
* Returns access result.
*/
public function access(AccountInterface $account) {
$registerAccessCheck = new RegisterAccessCheck();
return AccessResult::allowedIf($account
->hasPermission('administer multiple_registration') || $registerAccessCheck
->access($account)
->isAllowed());
}
/**
* Page with registration pages list.
*
* @return array
* Returns index.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
public function index() {
$regPages = $this->availableUserRolesService
->getRegistrationPages();
if ($regPages) {
foreach ($regPages as $rid => $role) {
$row = [];
$row[] = $role['role_name'];
$path_alias = $this->aliasManager
->getAliasByPath($role['url']);
$row[] = $path_alias;
$isHiddenLabel = $role['hidden'] == 1 ? $this
->t("Yes") : $this
->t('No');
$row[] = $isHiddenLabel;
$edit_url = Url::fromRoute("multiple_registration.create_registration_page_form", [
'rid' => $rid,
], [
'attributes' => [
'class' => 'use-ajax',
'data-accepts' => 'application/vnd.drupal-modal',
'data-dialog-type' => 'modal',
'data-dialog-options' => '{"width": "50%"}',
],
]);
$row[] = Link::fromTextAndUrl($this
->t('Edit'), $edit_url);
$remove_url = Url::fromRoute("multiple_registration.delete_registration_page_form", [
'rid' => $rid,
], [
'attributes' => [
'class' => 'use-ajax',
'data-accepts' => 'application/vnd.drupal-modal',
'data-dialog-type' => 'modal',
'data-dialog-options' => '{"width": "50%"}',
],
]);
$row[] = Link::fromTextAndUrl($this
->t('Remove'), $remove_url);
$rows[] = [
'data' => $row,
];
}
$header = [
$this
->t('Role'),
$this
->t('Registration page path'),
$this
->t('Hidden'),
[
'data' => $this
->t('Operations'),
'colspan' => 2,
],
];
$output = [
'#theme' => 'table',
'#header' => $header,
'#rows' => $rows,
'#attributes' => [
'id' => 'user-roles-reg-pages',
],
'#attached' => [
'library' => [
'core/drupal.dialog.ajax',
],
],
];
}
else {
$add_reg_pages_link = Link::fromTextAndUrl($this
->t('here'), Url::fromRoute('entity.user_role.collection'));
$output = [
'#markup' => $this
->t('There are no additional registration pages created yet. You can add new pages %here', [
'%here' => $add_reg_pages_link,
]),
];
}
$common_settings_url = Url::fromRoute("multiple_registration.common_settings_page_form", [], [
'attributes' => [
'class' => 'use-ajax',
'data-accepts' => 'application/vnd.drupal-modal',
'data-dialog-type' => 'modal',
'data-dialog-options' => '{"width": "50%"}',
],
]);
$output['#suffix'] = '<p>' . Link::fromTextAndUrl($this
->t('Common settings'), $common_settings_url)
->toString() . '</p>';
$output['#suffix'] .= '<p>' . Link::fromTextAndUrl($this
->t('Go to Roles managing page'), Url::fromRoute('entity.user_role.collection'))
->toString() . '</p>';
return $output;
}
/**
* Get AliasStorage object.
*
* @return \Drupal\Core\Path\AliasStorage
* Returns Path object.
*/
public function getRegisterAliasStorage() {
// Prepare database table.
$connection = Database::getConnection();
// Create Path object.
return new AliasStorage($connection, $this
->moduleHandler());
}
/**
* Adds alias for registration page.
*
* @param string $source
* Source string.
* @param string $alias
* Path alias string.
*
* @throws \Exception
*/
public function addRegisterPageAlias($source, $alias) {
$aliasStorage = $this
->getRegisterAliasStorage();
$conditions = [
'source' => $source,
];
// Checks if alias exists for url.
$existsAliases = $aliasStorage
->load($conditions);
$pid = NULL;
if (isset($existsAliases['pid'])) {
$pid = $existsAliases['pid'];
}
$aliasStorage
->save($source, $alias, LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid);
}
/**
* Removes registration page alias for role.
*
* @param int $rid
* Role ID.
*/
public function removeRegisterPageAlias($rid) {
$aliasStorage = $this
->getRegisterAliasStorage();
$pages_config = $this->regPagesConfig;
$conditions = [
'source' => $pages_config
->get('multiple_registration_url_' . $rid),
];
$aliasStorage
->delete($conditions);
}
/**
* Removes registration page for role.
*
* @param int $rid
* Role ID.
*/
public function removeRegisterPage($rid) {
$pages_config = $this->regPagesConfig;
if ($pages_config
->get('multiple_registration_url_' . $rid)) {
$this
->removeRegisterPageAlias($rid);
$pages_config
->clear('multiple_registration_path_' . $rid)
->clear('multiple_registration_url_' . $rid)
->save();
drupal_set_message($this
->t('Registration page has been removed.'));
}
else {
drupal_set_message($this
->t('Registration page has not been removed. There are no pages for this role.'), 'error');
}
}
/**
* Check is field available for role.
*
* @param array $fieldRoles
* Array with assigned roles for the fields.
*
* @return bool
* Returns access result.
*/
public static function checkFieldAccess(array $fieldRoles) {
$routeMatch = \Drupal::routeMatch();
$roles = [];
switch ($routeMatch
->getRouteName()) {
// Role page registration.
case 'multiple_registration.role_registration_page':
$roles = [
$routeMatch
->getParameter('rid'),
];
break;
// Default registration.
case 'user.register':
$roles = [
self::MULTIPLE_REGISTRATION_GENERAL_REGISTRATION_ID,
];
break;
// User edit page.
case 'entity.user.edit_form':
$roles = $routeMatch
->getParameter('user')
->getRoles();
if (!static::useRegistrationPage($roles)) {
// Fall back to 'General registered users' if user does not have any
// special role.
$roles = [
self::MULTIPLE_REGISTRATION_GENERAL_REGISTRATION_ID,
];
}
break;
}
$extractKeys = array_intersect($roles, $fieldRoles);
if (!empty($extractKeys)) {
return TRUE;
}
else {
return FALSE;
}
}
/**
* Gets the title for registration page.
*/
public function getRegisterPageTitle(RouteMatchInterface $route) {
$role = $route
->getRawParameter('rid');
$roles = user_role_names();
if (isset($roles[$role])) {
return $this
->t('Create new @role account', [
'@role' => $roles[$role],
]);
}
else {
return $this
->t('Role @role not found, you can use default registration page.', [
'@role' => ucfirst($role),
]);
}
}
/**
* Checks whether there're special registration pages for any of given roles.
*
* @param array $roles
* Array of role IDs.
*
* @return bool
* Whether there is a special registration form available for at least one
* of given roles.
*/
protected static function useRegistrationPage(array $roles) {
$pages_config = \Drupal::configFactory()
->get('multiple_registration.create_registration_page_form_config');
foreach ($roles as $rid) {
if ($pages_config
->get('multiple_registration_url_' . $rid)) {
return TRUE;
}
}
return FALSE;
}
}
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:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
MultipleRegistrationController:: |
protected | property | ||
MultipleRegistrationController:: |
protected | property | ||
MultipleRegistrationController:: |
public | property | ||
MultipleRegistrationController:: |
protected | property | ||
MultipleRegistrationController:: |
public | function | Checks access for register page. | |
MultipleRegistrationController:: |
public | function | Adds alias for registration page. | |
MultipleRegistrationController:: |
public static | function | Check is field available for role. | |
MultipleRegistrationController:: |
public static | function |
Instantiates a new instance of this class. Overrides ControllerBase:: |
|
MultipleRegistrationController:: |
public | function | Get AliasStorage object. | |
MultipleRegistrationController:: |
public | function | Gets the title for registration page. | |
MultipleRegistrationController:: |
public | function | Page with registration pages list. | |
MultipleRegistrationController:: |
constant | |||
MultipleRegistrationController:: |
constant | |||
MultipleRegistrationController:: |
public | function | Removes registration page for role. | |
MultipleRegistrationController:: |
public | function | Removes registration page alias for role. | |
MultipleRegistrationController:: |
protected static | function | Checks whether there're special registration pages for any of given roles. | |
MultipleRegistrationController:: |
public | function | MultipleRegistrationController constructor. | |
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. | |
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. |