class AssetReorderController in farmOS 2.x
Returns responses for asset drag and drop routes.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, RedirectDestinationTrait, StringTranslationTrait
- class \Drupal\farm_ui_location\Controller\AssetReorderController implements AssetReorderControllerInterface
Expanded class hierarchy of AssetReorderController
File
- modules/
core/ ui/ location/ src/ Controller/ AssetReorderController.php, line 16
Namespace
Drupal\farm_ui_location\ControllerView source
class AssetReorderController extends ControllerBase implements AssetReorderControllerInterface {
/**
* The asset location service.
*
* @var \Drupal\farm_location\AssetLocationInterface
*/
protected $assetLocation;
/**
* The controller constructor.
*
* @param \Drupal\farm_location\AssetLocationInterface $asset_location
* The asset location service.
*/
public function __construct(AssetLocationInterface $asset_location) {
$this->assetLocation = $asset_location;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('asset.location'));
}
/**
* Check access.
*/
public function access(AccountInterface $account, AssetInterface $asset = NULL) {
// If the asset is not a location, forbid access.
if (!$this->assetLocation
->isLocation($asset)) {
return AccessResult::forbidden();
}
// Allow access if the asset has child locations.
return AccessResult::allowedIf(!empty($this
->getLocations($asset)));
}
/**
* Generate the page title.
*
* @param \Drupal\asset\Entity\AssetInterface|null $asset
* Optionally specify the parent asset that this page is being built for.
*
* @return string
* Returns the translated page title.
*/
public function getTitle(AssetInterface $asset = NULL) {
if (!empty($asset)) {
return $this
->t('Locations in %location', [
'%location' => $asset
->label(),
]);
}
return $this
->t('Locations');
}
/**
* Builds the response.
*
* @param \Drupal\asset\Entity\AssetInterface|null $asset
* Optionally specify the parent asset, to only build a sub-tree. If
* omitted, all assets will be included.
*
* @return array
* Returns a build array.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
* @throws \Drupal\Core\Entity\EntityMalformedException
*/
public function build(AssetInterface $asset = NULL) {
$build['content'] = [
'#type' => 'html_tag',
'#tag' => 'div',
'#attributes' => [
'class' => [
'locations-tree',
],
],
];
$build['toggle_drag_and_drop'] = [
'#type' => 'link',
'#title' => $this
->t('Toggle drag and drop'),
'#url' => Url::fromUserInput('#'),
'#attributes' => [
'class' => [
'locations-tree-toggle',
'button',
'button--secondary',
],
],
];
$build['save'] = [
'#type' => 'link',
'#title' => $this
->t('Save'),
'#url' => Url::fromRoute('<none>'),
'#attributes' => [
'class' => [
'locations-tree-save',
'button',
'button--primary',
],
],
];
$build['reset'] = [
'#type' => 'link',
'#title' => $this
->t('Reset'),
'#url' => Url::fromRoute('<none>'),
'#attributes' => [
'class' => [
'locations-tree-reset',
'button',
'button--danger',
],
],
];
$build['#attached']['library'][] = 'farm_ui_location/locations-drag-and-drop';
$tree = [
[
'uuid' => !empty($asset) ? $asset
->uuid() : '',
'text' => !empty($asset) ? $asset
->label() : $this
->t('All locations'),
'children' => !empty($asset) ? $this
->buildTree($asset) : $this
->buildTree(),
'type' => !empty($asset) ? $asset
->bundle() : '',
'url' => !empty($asset) ? $asset
->toUrl('canonical', [
'absolute' => TRUE,
])
->toString() : '/locations',
],
];
$build['#attached']['drupalSettings']['asset_tree'] = $tree;
$build['#attached']['drupalSettings']['asset_parent'] = !empty($asset) ? $asset
->uuid() : '';
$build['#attached']['drupalSettings']['asset_parent_type'] = !empty($asset) ? $asset
->bundle() : '';
return $build;
}
/**
* Build the asset tree.
*
* @param \Drupal\asset\Entity\AssetInterface|null $asset
* Optionally specify the parent asset, to only build a sub-tree. If
* omitted, all assets will be included.
*
* @return array
* Returns the asset tree for use in Drupal JS settings.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
protected function buildTree(AssetInterface $asset = NULL) {
$locations = $this
->getLocations($asset);
$tree = [];
if ($locations) {
foreach ($locations as $location) {
$element = [
'uuid' => $location
->uuid(),
'text' => $location
->label(),
'children' => $this
->buildTree($location),
'type' => $location
->bundle(),
'url' => $location
->toUrl('canonical', [
'absolute' => TRUE,
])
->toString(),
];
$element['original_parent'] = $asset ? $asset
->uuid() : '';
$element['original_type'] = $asset ? $asset
->bundle() : '';
$tree[] = $element;
}
}
return $tree;
}
/**
* Gets location assets.
*
* @param \Drupal\asset\Entity\AssetInterface|null $asset
* Optionally provide a parent asset to only retrieve its direct children.
*
* @return \Drupal\asset\Entity\AssetInterface[]
* An array of location assets.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
protected function getLocations(AssetInterface $asset = NULL) {
// Query unarchived location assets.
$storage = $this
->entityTypeManager()
->getStorage('asset');
$query = $storage
->getQuery()
->accessCheck(TRUE)
->condition('is_location', TRUE)
->condition('status', 'archived', '!=')
->sort('name');
// Limit to a specific parent or no parent.
if ($asset) {
$query
->condition('parent', $asset
->id());
}
else {
$query
->condition('parent', NULL, 'IS NULL');
}
// Query and return assets.
$asset_ids = $query
->execute();
if (empty($asset_ids)) {
return [];
}
/** @var \Drupal\asset\Entity\AssetInterface[] $assets */
$assets = $storage
->loadMultiple($asset_ids);
return $assets;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AssetReorderController:: |
protected | property | The asset location service. | |
AssetReorderController:: |
public | function |
Check access. Overrides AssetReorderControllerInterface:: |
|
AssetReorderController:: |
public | function |
Builds the response. Overrides AssetReorderControllerInterface:: |
|
AssetReorderController:: |
protected | function | Build the asset tree. | |
AssetReorderController:: |
public static | function |
Instantiates a new instance of this class. Overrides ControllerBase:: |
|
AssetReorderController:: |
protected | function | Gets location assets. | |
AssetReorderController:: |
public | function | Generate the page title. | |
AssetReorderController:: |
public | function | The controller constructor. | |
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. | |
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. |