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_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.