class UserController in Profile 8
Provides the profile UI for users.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\profile\Controller\UserController
Expanded class hierarchy of UserController
File
- src/
Controller/ UserController.php, line 15
Namespace
Drupal\profile\ControllerView source
class UserController extends ControllerBase {
/**
* Builds a page title for the given profile type.
*
* @param \Drupal\profile\Entity\ProfileTypeInterface $profile_type
* The profile type.
*
* @return string
* The page title.
*/
public function title(ProfileTypeInterface $profile_type) {
return $profile_type
->getDisplayLabel() ?: $profile_type
->label();
}
/**
* Builds the add/edit page for "single" profile types.
*
* @param \Drupal\user\UserInterface $user
* The user account.
* @param \Drupal\profile\Entity\ProfileTypeInterface $profile_type
* The profile type.
*
* @return array
* The response.
*/
public function singlePage(UserInterface $user, ProfileTypeInterface $profile_type) {
/** @var \Drupal\profile\ProfileStorageInterface $profile_storage */
$profile_storage = $this
->entityTypeManager()
->getStorage('profile');
$profile = $profile_storage
->loadByUser($user, $profile_type
->id());
if ($profile) {
return $this
->editForm($profile);
}
else {
return $this
->addForm($user, $profile_type);
}
}
/**
* Builds the listing page for "multiple" profile types.
*
* @param \Drupal\user\UserInterface $user
* The user account.
* @param \Drupal\profile\Entity\ProfileTypeInterface $profile_type
* The profile type.
*
* @return array
* The response.
*/
public function multiplePage(UserInterface $user, ProfileTypeInterface $profile_type) {
$build = [];
$build['profiles'] = [
'#type' => 'view',
'#name' => 'profiles',
'#display_id' => 'user_page',
'#arguments' => [
$user
->id(),
$profile_type
->id(),
1,
],
'#embed' => TRUE,
];
return $build;
}
/**
* Builds the profile add form.
*
* @param \Drupal\user\UserInterface $user
* The user account.
* @param \Drupal\profile\Entity\ProfileTypeInterface $profile_type
* The profile type.
*
* @return array
* The response.
*/
public function addForm(UserInterface $user, ProfileTypeInterface $profile_type) {
$profile = $this
->entityTypeManager()
->getStorage('profile')
->create([
'uid' => $user
->id(),
'type' => $profile_type
->id(),
]);
return $this
->entityFormBuilder()
->getForm($profile, 'add');
}
/**
* Builds the edit form.
*
* @param \Drupal\profile\Entity\ProfileInterface $profile
* The profile.
*
* @return array
* The response.
*/
public function editForm(ProfileInterface $profile) {
return $this
->entityFormBuilder()
->getForm($profile, 'edit');
}
/**
* Checks access for the single/multiple pages.
*
* @param \Drupal\user\UserInterface $user
* The user account.
* @param \Drupal\profile\Entity\ProfileTypeInterface $profile_type
* The profile type.
* @param \Drupal\Core\Session\AccountInterface $account
* The currently logged in account.
*
* @return \Drupal\Core\Access\AccessResultInterface
* The access result.
*/
public function checkAccess(UserInterface $user, ProfileTypeInterface $profile_type, AccountInterface $account) {
$user_access = $user
->access('view', $account, TRUE);
if (!$user_access
->isAllowed()) {
// The account does not have access to the user's canonical page
// ("/user/{user}"), don't allow access to any sub-pages either.
return $user_access;
}
$access_control_handler = $this
->entityTypeManager()
->getAccessControlHandler('profile');
$profile_storage = $this
->entityTypeManager()
->getStorage('profile');
$profile_stub = $profile_storage
->create([
'type' => $profile_type
->id(),
'uid' => $user
->id(),
]);
$operation = $profile_type
->allowsMultiple() ? 'view' : 'update';
$result = $access_control_handler
->access($profile_stub, $operation, $account, TRUE);
return $result;
}
/**
* Checks access for the profile add form.
*
* @param \Drupal\user\UserInterface $user
* The user account.
* @param \Drupal\profile\Entity\ProfileTypeInterface $profile_type
* The profile type.
* @param \Drupal\Core\Session\AccountInterface $account
* The currently logged in account.
*
* @return \Drupal\Core\Access\AccessResultInterface
* The access result.
*/
public function checkCreateAccess(UserInterface $user, ProfileTypeInterface $profile_type, AccountInterface $account) {
$user_access = $user
->access('view', $account, TRUE);
if (!$user_access
->isAllowed()) {
// The account does not have access to the user's canonical page
// ("/user/{user}"), don't allow access to any sub-pages either.
return $user_access;
}
$access_control_handler = $this
->entityTypeManager()
->getAccessControlHandler('profile');
/** @var \Drupal\Core\Access\AccessResult $result */
$result = $access_control_handler
->createAccess($profile_type
->id(), $account, [
'profile_owner' => $user,
], TRUE);
if ($result
->isAllowed()) {
// There is no create any/own permission, confirm that the account is
// either an administrator, or they're creating a profile for themselves.
$admin_permission = $this
->entityTypeManager()
->getDefinition('profile')
->getAdminPermission();
$owner_result = AccessResult::allowedIfHasPermission($account, $admin_permission)
->orIf(AccessResult::allowedIf($account
->id() == $user
->id()))
->cachePerUser();
$result = $result
->andIf($owner_result);
}
return $result;
}
}
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:: |
public static | function |
Instantiates a new instance of this class. Overrides ContainerInjectionInterface:: |
40 |
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. | |
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. | |
UserController:: |
public | function | Builds the profile add form. | |
UserController:: |
public | function | Checks access for the single/multiple pages. | |
UserController:: |
public | function | Checks access for the profile add form. | |
UserController:: |
public | function | Builds the edit form. | |
UserController:: |
public | function | Builds the listing page for "multiple" profile types. | |
UserController:: |
public | function | Builds the add/edit page for "single" profile types. | |
UserController:: |
public | function | Builds a page title for the given profile type. |