Form builder for spambot_user_spam_admin_form form.

1 string reference to 'spambot_user_spam_admin_form'
spambot_user_spam in ./spambot.pages.inc
Page callback for 'user/%user/spambot' path.

File

./spambot.pages.inc, line 24

Code

function spambot_user_spam_admin_form($form, &$form_state, $account) {
    $key = variable_get('spambot_sfs_api_key', FALSE);
    $comments_enabled = module_exists('comment');
    $node_count = db_select('node', 'n')->fields('n', array(
        'nid',
    ))
        ->condition('uid', $account->uid)
        ->countQuery()
        ->execute()
        ->fetchField();
    $status = t('This account has @n nodes.', array(
        '@n' => $node_count,
    ));
    if ($comments_enabled) {
        $comment_count = db_select('comment', 'c')->fields('c', array(
            'cid',
        ))
            ->condition('uid', $account->uid)
            ->countQuery()
            ->execute()
            ->fetchField();
        $status = t('This account has @n nodes and @c comments.', array(
            '@n' => $node_count,
            '@c' => $comment_count,
        ));
    }
    $form['check'] = array(
        '#type' => 'submit',
        '#value' => t('Check if this account matches a known spammer'),
    );
    $form['action'] = array(
        '#type' => 'fieldset',
        '#title' => t('Take action against this account'),
        '#collapsible' => TRUE,
        '#description' => $status,
    );
    $form['action']['content_action'] = array(
        '#type' => 'select',
        '#title' => t('Action to take'),
        '#description' => t('Please select what action to take with nodes and comments.'),
        '#options' => array(
            SPAMBOT_ACTION_NONE => t('None'),
            SPAMBOT_CONTENT_ACTION_UNPUBLISH => t('Unpublish nodes and comments by this account'),
            SPAMBOT_CONTENT_ACTION_DELETE => t('Delete nodes and comments by this account'),
        ),
        '#default_value' => SPAMBOT_CONTENT_ACTION_UNPUBLISH,
    );
    $form['action']['report'] = array(
        '#type' => 'fieldset',
        '#title' => t('Report this account to www.stopforumspam.com'),
        '#tree' => TRUE,
        '#collapsible' => TRUE,
    );
    // Fetch a list of reportable nodes.
    $form['action']['report']['nids'] = array();
    $result = db_select('node_spambot', 'ns')->fields('ns', array(
        'nid',
        'hostname',
    ))
        ->condition('ns.uid', $account->uid)
        ->orderBy('ns.nid', 'DESC')
        ->range(0, 20)
        ->execute();
    $nid_hostnames = array();
    foreach ($result as $record) {
        $nid_hostnames[$record->nid] = $record->hostname;
    }
    foreach ($nid_hostnames as $nid => $hostname) {
        if ($node = node_load($nid)) {
            $title = truncate_utf8(check_plain($node->title), 128, TRUE, TRUE);
            $form['action']['report']['nids'][$nid] = array(
                '#type' => 'checkbox',
                '#title' => l($title, "node/{$nid}", array(
                    'attributes' => array(
                        'title' => $title,
                    ),
                )) . ' ' . t('(node, ip=@ip)', array(
                    '@ip' => $hostname,
                )),
                '#disabled' => !$key,
            );
        }
    }
    // Fetch a list of reportable comments.
    if ($comments_enabled) {
        $form['action']['report']['cids'] = array();
        $result = db_select('comment')->fields('comment', array(
            'cid',
        ))
            ->condition('uid', $account->uid)
            ->orderBy('cid', 'DESC')
            ->range(0, 20)
            ->execute();
        $cids = array();
        foreach ($result as $record) {
            $cids[$record->cid] = $record->cid;
        }
        foreach ($cids as $cid) {
            if ($comment = comment_load($cid)) {
                $subject = truncate_utf8(check_plain($comment->subject), 128, TRUE, TRUE);
                $form['action']['report']['cids'][$cid] = array(
                    '#type' => 'checkbox',
                    '#title' => l($subject, "node/{$comment->nid}", array(
                        'fragment' => "comment-{$comment->cid}",
                        'attributes' => array(
                            'title' => $subject,
                        ),
                    )) . ' ' . t('(comment, ip=@ip)', array(
                        '@ip' => $comment->hostname,
                    )),
                    '#disabled' => !$key,
                );
            }
        }
    }
    if ($key) {
        $comment_cids = $comments_enabled ? count($form['action']['report']['cids']) : 0;
        $evidence_count = count($form['action']['report']['nids']) + $comment_cids;
        $form['action']['report']['#description'] = $evidence_count ? t('Select one or more posts below to report them to www.stopforumspam.com.') : t('This account cannot be reported because no evidence or IP address is available.');
    }
    else {
        $form['action']['report']['#description'] = t('An API key from <a href="http://www.stopforumspam.com">www.stopforumspam.com</a> must <a href="!admin-url">be configured</a> to report spammers.', array(
            '!admin-url' => url('admin/config/system/spambot'),
        ));
    }
    $form['action']['block_user'] = array(
        '#type' => 'checkbox',
        '#title' => t('Block this account'),
        '#default_value' => TRUE,
    );
    $form['action']['delete_user'] = array(
        '#type' => 'checkbox',
        '#title' => t('Delete this account'),
        '#default_value' => FALSE,
    );
    $form['action']['action'] = array(
        '#type' => 'submit',
        '#value' => t('Take action'),
    );
    $form['uid'] = array(
        '#type' => 'value',
        '#value' => $account->uid,
    );
    $form['#validate'][] = 'spambot_user_spam_admin_form_validate';
    $form['#submit'][] = 'spambot_user_spam_admin_form_submit';
    return $form;
}