class LogAutocompleteController in Log entity 2.x
Returns autocomplete responses for log names.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, RedirectDestinationTrait, StringTranslationTrait
- class \Drupal\log\Controller\LogAutocompleteController
Expanded class hierarchy of LogAutocompleteController
File
- src/
Controller/ LogAutocompleteController.php, line 14
Namespace
Drupal\log\ControllerView source
class LogAutocompleteController extends ControllerBase {
/**
* The database service.
*
* @var \Drupal\Core\Database\Connection
*/
protected $database;
/**
* Constructs a LogAutocompleteController object.
*
* @param \Drupal\Core\Database\Connection $database
* A database connection.
*/
public function __construct(Connection $database) {
$this->database = $database;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('database'));
}
/**
* Retrieves suggestions for log name autocompletion.
*
* @param string $log_bundle
* The log bundle name.
* @param \Symfony\Component\HttpFoundation\Request $request
* The current request.
*
* @return \Symfony\Component\HttpFoundation\JsonResponse
* A JSON response containing autocomplete suggestions.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
public function autocomplete(string $log_bundle, Request $request) {
$matches = [];
if ($input = $request->query
->get('q')) {
// A regular database query is used so the results returned can be sorted
// by usage.
$table_mapping = $this
->entityTypeManager()
->getStorage('log')
->getTableMapping();
$query = $this->database
->select($table_mapping
->getDataTable(), 'log_field_data');
$query
->fields('log_field_data', [
'name',
]);
$query
->addExpression('COUNT(name)', 'count');
$query
->condition('type', $log_bundle);
$query
->condition('name', '%' . $this->database
->escapeLike($input) . '%', 'LIKE');
// Because a regular database query is used to sort by the usage of the
// log names, a minimal access control is done here.
// If the user has administer log or can view any log entity from any
// bundle, no further condition is added, if the user can see their own
// entities, the query is restricted by user, otherwise an empty set is
// returned.
switch ($this
->typeOfAccess($log_bundle)) {
case 'none':
return new JsonResponse([]);
case 'own':
$query
->condition('uid', $this
->currentUser()
->id());
break;
case 'any':
default:
}
$query
->groupBy('name');
$query
->orderBy('count', 'DESC');
$query
->orderBy('name', 'ASC');
$matches = $query
->execute()
->fetchCol();
}
return new JsonResponse($matches);
}
/**
* Helper function that returns what filter must be applied to the user query.
*
* @param string $log_bundle
* The log bundle.
*
* @return string
* 'any' => Full access.
* 'own' => Access to own logs.
* 'none' => No access to logs.
*/
protected function typeOfAccess(string $log_bundle) {
$account = $this
->currentUser();
if ($account
->hasPermission('administer log') || $account
->hasPermission('view any ' . $log_bundle . ' log')) {
return 'any';
}
if ($account
->hasPermission('view own ' . $log_bundle . ' log')) {
return 'own';
}
return 'none';
}
}
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 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 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. | |
ControllerBase:: |
protected | function | Returns the state storage service. | |
LogAutocompleteController:: |
protected | property | The database service. | |
LogAutocompleteController:: |
public | function | Retrieves suggestions for log name autocompletion. | |
LogAutocompleteController:: |
public static | function |
Instantiates a new instance of this class. Overrides ControllerBase:: |
|
LogAutocompleteController:: |
protected | function | Helper function that returns what filter must be applied to the user query. | |
LogAutocompleteController:: |
public | function | Constructs a LogAutocompleteController object. | |
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. | 27 |
MessengerTrait:: |
public | function | Gets the messenger. | 27 |
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. | 4 |
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. |