root-8.x-1.x-dev/src/RootEditContent.php
src/RootEditContent.php
<?php
namespace Drupal\root;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\Theme\ThemeManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Service to handle content form overrides.
*/
class RootEditContent implements ContainerInjectionInterface {
use StringTranslationTrait;
/**
* The current user object.
*
* @var \Drupal\Core\Session\AccountInterface
*/
protected $currentUser;
/**
* The module handler service.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected $moduleHandler;
/**
* The current route match.
*
* @var \Drupal\Core\Routing\RouteMatchInterface
*/
protected $routeMatch;
/**
* The theme manager.
*
* @var \Drupal\Core\Theme\ThemeManagerInterface
*/
protected $themeManager;
/**
* Root constructor.
*
* @param \Drupal\Core\Session\AccountInterface $current_user
* The current user.
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler.
* @param \Drupal\Core\Routing\RouteMatchInterface $route_match
* The current route match.
* @param \Drupal\Core\Theme\ThemeManagerInterface $theme_manager
* The theme manager.
*/
public function __construct(AccountInterface $current_user, ModuleHandlerInterface $module_handler, RouteMatchInterface $route_match, ThemeManagerInterface $theme_manager) {
$this->currentUser = $current_user;
$this->moduleHandler = $module_handler;
$this->routeMatch = $route_match;
$this->themeManager = $theme_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('current_user'),
$container->get('module_handler'),
$container->get('current_route_match'),
$container->get('theme.manager'),
);
}
/**
* Check if we´re on a content edit form.
*
* @param array $form
* An associative array containing the structure of the form.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The current state of the form.
* @param string $form_id
* The form id.
*/
public function isContentForm(array $form = NULL, FormStateInterface $form_state = NULL, $form_id = '') {
$is_content_form = FALSE;
// Get route name.
$route_name = $this->routeMatch->getRouteName();
// Routes to include.
$route_names = [
'node.add',
'entity.node.content_translation_add',
'entity.node.content_translation_edit',
'quick_node_clone.node.quick_clone',
'entity.node.edit_form',
];
$additional_routes = $this->moduleHandler->invokeAll('root_content_form_routes');
$route_names = array_merge($additional_routes, $route_names);
$this->moduleHandler->alter('root_content_form_routes', $route_names);
$this->themeManager->alter('root_content_form_routes', $route_names);
if (
in_array($route_name, $route_names, TRUE) ||
($form_state && ($form_state->getBuildInfo()['base_form_id'] ?? NULL) === 'node_form') ||
($route_name === 'entity.group_content.create_form' && strpos($form_id, 'group_node') === FALSE)
) {
$is_content_form = TRUE;
}
// Forms to exclude.
// If media library widget, don't use new content edit form.
// root_preprocess_html is not triggered here, so checking
// the form id is enough.
$form_ids_to_ignore = [
'media_library_add_form_',
'views_form_media_library_widget_',
'views_exposed_form',
'date_recur_modular_sierra_occurrences_modal',
'date_recur_modular_sierra_modal',
];
foreach ($form_ids_to_ignore as $form_id_to_ignore) {
if ($form_id && strpos($form_id, $form_id_to_ignore) !== FALSE) {
$is_content_form = FALSE;
}
}
return $is_content_form;
}
}
