Error message

You are browsing documentation for drupal 7.x, which is not supported anymore. Read the updated version of this page for drupal 11.x (the latest version).

function node_admin_nodes

Form builder: Builds the node administration overview.

See also

node_admin_nodes_submit()

node_admin_nodes_validate()

node_filter_form()

node_filter_form_submit()

node_multiple_delete_confirm()

node_multiple_delete_confirm_submit()

Related topics

Form builder functions
Functions that build an abstract representation of a HTML form.
1 call to node_admin_nodes()
node_admin_content in modules/node/node.admin.inc
Page callback: Form constructor for the content administration form.

File

modules/node/node.admin.inc, line 427

Code

function node_admin_nodes () {
 $admin_access = user_access ('administer nodes');
 // Build the 'Update options' form.
 $form['options'] = array(
 '#type' => 'fieldset',
 '#title' => t ('Update options'),
 '#attributes' => array(
 'class' => array(
 'container-inline',
 ),
 ),
 '#access' => $admin_access,
 );
 $options = array();
 foreach (module_invoke_all ('node_operations') as $operation => $array) {
 $options[$operation] = $array['label'];
 }
 $form['options']['operation'] = array(
 '#type' => 'select',
 '#title' => t ('Operation'),
 '#title_display' => 'invisible',
 '#options' => $options,
 '#default_value' => 'approve',
 );
 $form['options']['submit'] = array(
 '#type' => 'submit',
 '#value' => t ('Update'),
 '#validate' => array(
 'node_admin_nodes_validate',
 ),
 '#submit' => array(
 'node_admin_nodes_submit',
 ),
 );
 // Enable language column if translation module is enabled or if we have any
 // node with language.
 $multilanguage = module_exists ('translation') || db_query_range ("SELECT 1 FROM {node} WHERE language <> :language", 0, 1, array(
 ':language' => LANGUAGE_NONE ,
 ))->fetchField ();
 // Build the sortable table header.
 $header = array(
 'title' => array(
 'data' => t ('Title'),
 'field' => 'n.title',
 ),
 'type' => array(
 'data' => t ('Type'),
 'field' => 'n.type',
 ),
 'author' => t ('Author'),
 'status' => array(
 'data' => t ('Status'),
 'field' => 'n.status',
 ),
 'changed' => array(
 'data' => t ('Updated'),
 'field' => 'n.changed',
 'sort' => 'desc',
 ),
 );
 if ($multilanguage) {
 $header['language'] = array(
 'data' => t ('Language'),
 'field' => 'n.language',
 );
 }
 $header['operations'] = array(
 'data' => t ('Operations'),
 );
 $query = db_select ('node', 'n')->extend ('PagerDefault')
 ->extend ('TableSort');
 $query->addTag ('node_admin_filter');
 node_build_filter_query ($query);
 if (!user_access ('bypass node access')) {
 // If the user is able to view their own unpublished nodes, allow them
 // to see these in addition to published nodes. Check that they actually
 // have some unpublished nodes to view before adding the condition.
 if (user_access ('view own unpublished content') && $own_unpublished = db_query ('SELECT nid FROM {node} WHERE uid = :uid AND status = :status', array(
 ':uid' => $GLOBALS['user']->uid,
 ':status' => 0,
 ))
 ->fetchCol ()) {
 $query->condition (db_or ()->condition ('n.status', 1)
 ->condition ('n.nid', $own_unpublished, 'IN'));
 }
 else {
 // If not, restrict the query to published nodes.
 $query->condition ('n.status', 1);
 }
 }
 $nids = $query->fields ('n', array(
 'nid',
 ))
 ->limit (50)
 ->orderByHeader ($header)
 ->addTag ('node_access')
 ->execute ()
 ->fetchCol ();
 $nodes = node_load_multiple ($nids);
 // Prepare the list of nodes.
 $languages = language_list ();
 $destination = drupal_get_destination ();
 $options = array();
 foreach ($nodes as $node) {
 $langcode = entity_language ('node', $node);
 $uri = entity_uri ('node', $node);
 if ($langcode != LANGUAGE_NONE  && isset($languages[$langcode])) {
 $uri['options']['language'] = $languages[$langcode];
 }
 $options[$node->nid] = array(
 'title' => array(
 'data' => array(
 '#type' => 'link',
 '#title' => $node->title ,
 '#href' => $uri['path'],
 '#options' => $uri['options'],
 '#suffix' => ' ' . theme ('mark', array(
 'type' => node_mark ($node->nid, $node->changed ),
 )),
 ),
 ),
 'type' => check_plain (node_type_get_name ($node)),
 'author' => theme ('username', array(
 'account' => $node,
 )),
 'status' => $node->status ? t ('published') : t ('not published'),
 'changed' => format_date ($node->changed , 'short'),
 );
 if ($multilanguage) {
 if ($langcode == LANGUAGE_NONE  || isset($languages[$langcode])) {
 $options[$node->nid]['language'] = $langcode == LANGUAGE_NONE  ? t ('Language neutral') : t ($languages[$langcode]->name );
 }
 else {
 $options[$node->nid]['language'] = t ('Undefined language (@langcode)', array(
 '@langcode' => $langcode,
 ));
 }
 }
 // Build a list of all the accessible operations for the current node.
 $operations = array();
 if (node_access ('update', $node)) {
 $operations['edit'] = array(
 'title' => t ('edit'),
 'href' => 'node/' . $node->nid . '/edit',
 'query' => $destination,
 );
 }
 if (node_access ('delete', $node)) {
 $operations['delete'] = array(
 'title' => t ('delete'),
 'href' => 'node/' . $node->nid . '/delete',
 'query' => $destination,
 );
 }
 $options[$node->nid]['operations'] = array();
 if (count ($operations) > 1) {
 // Render an unordered list of operations links.
 $options[$node->nid]['operations'] = array(
 'data' => array(
 '#theme' => 'links__node_operations',
 '#links' => $operations,
 '#attributes' => array(
 'class' => array(
 'links',
 'inline',
 ),
 ),
 ),
 );
 }
 elseif (!empty($operations)) {
 // Render the first and only operation as a link.
 $link = reset ($operations);
 $options[$node->nid]['operations'] = array(
 'data' => array(
 '#type' => 'link',
 '#title' => $link['title'],
 '#href' => $link['href'],
 '#options' => array(
 'query' => $link['query'],
 ),
 ),
 );
 }
 }
 // Only use a tableselect when the current user is able to perform any
 // operations.
 if ($admin_access) {
 $form['nodes'] = array(
 '#type' => 'tableselect',
 '#header' => $header,
 '#options' => $options,
 '#empty' => t ('No content available.'),
 );
 }
 else {
 $form['nodes'] = array(
 '#theme' => 'table',
 '#header' => $header,
 '#rows' => $options,
 '#empty' => t ('No content available.'),
 );
 }
 $form['pager'] = array(
 '#markup' => theme ('pager'),
 );
 return $form;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.