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

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.