diff --git a/core/modules/node/lib/Drupal/node/Controller/NodeController.php b/core/modules/node/lib/Drupal/node/Controller/NodeController.php index fc2a5d2..3589894 100644 --- a/core/modules/node/lib/Drupal/node/Controller/NodeController.php +++ b/core/modules/node/lib/Drupal/node/Controller/NodeController.php @@ -9,7 +9,6 @@ use Drupal\Component\Utility\String; use Drupal\Core\Controller\ControllerBase; -use Drupal\Core\Entity\EntityInterface; use Drupal\node\NodeTypeInterface; use Drupal\node\NodeInterface; @@ -19,19 +18,63 @@ class NodeController extends ControllerBase { /** - * @todo Remove node_add_page(). + * Displays add content links for available content types. + * + * Redirects to node/add/[type] if only one content type is available. + * + * @return array + * A render array for a list of the node types that can be added; however, + * if there is only one node type defined for the site, the function + * redirects to the node add page for that one node type and does not return + * at all. + * + * @see node_menu() */ public function addPage() { - module_load_include('pages.inc', 'node'); - return node_add_page(); + $content = array(); + + // Only use node types the user has access to. + foreach ($this->entityManager()->getStorageController('node_type')->loadMultiple() as $type) { + if ($this->entityManager()->getAccessController('node')->createAccess($type->type)) { + $content[$type->type] = $type; + } + } + + // Bypass the node/add listing if only one content type is available. + if (count($content) == 1) { + $type = array_shift($content); + return $this->redirect('node_add', array('node_type' => $type->type)); + } + + return array( + '#theme' => 'node_add_list', + '#content' => $content, + ); } /** - * @todo Remove node_add(). + * Provides the node submission form. + * + * @param \Drupal\node\NodeTypeInterface $node_type + * The node type entity for the node. + * + * @return array + * A node submission form. */ - public function add(EntityInterface $node_type) { - module_load_include('pages.inc', 'node'); - return node_add($node_type); + public function add(NodeTypeInterface $node_type) { + $account = $this->currentUser(); + $langcode = $this->moduleHandler()->invoke('language', 'get_default_langcode', array('node', $node_type->type)); + + $node = $this->entityManager()->getStorageController('node')->create(array( + 'uid' => $account->id(), + 'name' => $account->getUsername() ?: '', + 'type' => $node_type->type, + 'langcode' => $langcode ? $langcode : $this->languageManager()->getLanguage()->id, + )); + + $form = $this->entityManager()->getForm($node); + + return $form; } /** @@ -145,7 +188,7 @@ protected function buildPage(NodeInterface $node) { * The page title. */ public function addPageTitle(NodeTypeInterface $node_type) { - return $this->t('Create @name', array('@name' => $node_type->type)); + return $this->t('Create @name', array('@name' => $node_type->name)); } } diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php b/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php index 5941176..2d71c21 100644 --- a/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php +++ b/core/modules/node/lib/Drupal/node/Plugin/views/area/ListingEmpty.php @@ -7,7 +7,9 @@ namespace Drupal\node\Plugin\views\area; +use Drupal\Core\Access\AccessManager; use Drupal\views\Plugin\views\area\AreaPluginBase; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Defines an area plugin to display a node/add link. @@ -19,19 +21,57 @@ class ListingEmpty extends AreaPluginBase { /** - * Implements \Drupal\views\Plugin\views\area\AreaPluginBase::render(). + * The access manager. + * + * @var \Drupal\Core\Access\AccessManager + */ + protected $accessManager; + + /** + * Constructs a new ListingEmpty. + * + * @param array $configuration + * A configuration array containing information about the plugin instance. + * @param string $plugin_id + * The plugin ID for the plugin instance. + * @param array $plugin_definition + * The plugin implementation definition. + * @param \Drupal\Core\Access\AccessManager $access_manager + * The access manager. + */ + public function __construct(array $configuration, $plugin_id, array $plugin_definition, AccessManager $access_manager) { + parent::__construct($configuration, $plugin_id, $plugin_definition); + + $this->accessManager = $access_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) { + return new static( + $configuration, + $plugin_id, + $plugin_definition, + $container->get('access_manager') + ); + } + + /** + * {@inheritdoc} */ public function render($empty = FALSE) { + $account = \Drupal::currentUser(); if (!$empty || !empty($this->options['empty'])) { $element = array( '#theme' => 'links', '#links' => array( array( 'href' => 'node/add', - 'title' => t('Add new content') - ) - ) , - '#access' => _node_add_access() + 'title' => $this->t('Add new content'), + ), + ), + '#access' => $this->accessManager->checkNamedRoute('node.add_page', array(), $account), ); return $element; } diff --git a/core/modules/node/node.module b/core/modules/node/node.module index a850c8a..8d1b07c 100644 --- a/core/modules/node/node.module +++ b/core/modules/node/node.module @@ -959,21 +959,6 @@ function _node_revision_access(EntityInterface $node, $op = 'view', $account = N } /** - * Access callback: Checks whether the user has permission to add a node. - * - * @return - * TRUE if the user has add permission, otherwise FALSE. - * - * @see node_menu() - * - * @deprecated - * Use \Drupal::service('access_manager')->checkNamedRoute('node.add_page'); - */ -function _node_add_access() { - return \Drupal::service('access_manager')->checkNamedRoute('node.add_page', array(), \Drupal::currentUser()); -} - -/** * Implements hook_menu(). */ function node_menu() { diff --git a/core/modules/node/node.pages.inc b/core/modules/node/node.pages.inc index 42eb2c5..ad96476 100644 --- a/core/modules/node/node.pages.inc +++ b/core/modules/node/node.pages.inc @@ -14,37 +14,6 @@ use Drupal\node\NodeInterface; /** - * Page callback: Displays add content links for available content types. - * - * Redirects to node/add/[type] if only one content type is available. - * - * @return array - * A render array for a list of the node types that can be added; however, if - * there is only one node type defined for the site, the function redirects - * to the node add page for that one node type and does not return at all. - * - * @see node_menu() - * - * @deprecated Use \Drupal\node\Controller\NodeController::addPage() - */ -function node_add_page() { - $content = array(); - // Only use node types the user has access to. - $access_controller = Drupal::entityManager()->getAccessController('node'); - foreach (node_type_get_types() as $type) { - if ($access_controller->createAccess($type->type)) { - $content[$type->type] = $type; - } - } - // Bypass the node/add listing if only one content type is available. - if (count($content) == 1) { - $type = array_shift($content); - return new RedirectResponse(url('node/add/' . $type->type, array('absolute' => TRUE))); - } - return array('#theme' => 'node_add_list', '#content' => $content); -} - -/** * Returns HTML for a list of available node types for node creation. * * @param $variables @@ -72,34 +41,6 @@ function theme_node_add_list($variables) { return $output; } - -/** - * Page callback: Provides the node submission form. - * - * @param $node_type - * The node type object for the submitted node. - * - * @return array - * A node submission form. - * - * @see node_menu() - * - * @deprecated Use \Drupal\node\Controller\NodeController::add() - */ -function node_add($node_type) { - $user = \Drupal::currentUser(); - - $type = $node_type->type; - $langcode = module_invoke('language', 'get_default_langcode', 'node', $type); - $node = entity_create('node', array( - 'uid' => $user->id(), - 'name' => $user->getUsername(), - 'type' => $type, - 'langcode' => $langcode ? $langcode : language_default()->id, - )); - return \Drupal::entityManager()->getForm($node); -} - /** * Generates a node preview. *