You are here

function contentanalysis_analysis_form in Content Analysis 7

Same name and namespace in other branches
  1. 8 contentanalysis.module \contentanalysis_analysis_form()
  2. 6 contentanalysis.module \contentanalysis_analysis_form()

Provides common Content Analysis form fields

  • creates checkboxes of installed analyzers
  • requests additional fields from analyzer modules for analyzer definitions declaring "form elements callback"
  • initializes Drupal.settings for AJAX calls
  • formats fields according to the requested interface

Parameters

$form_state: standard form_state generated by form_api

$analysis: contentanalysis formatted analysis array

$node: Node object of the node being analyzed

$mode: The style of form to return, options are [admin|node-edit|block]

Return value

form_api formatted array

2 calls to contentanalysis_analysis_form()
contentanalysis_form_alter in ./contentanalysis.module
Implements hook_form_alter().
contentanalysis_page_analyzer_form in ./contentanalysis.module
Provides content analysis admin form
1 string reference to 'contentanalysis_analysis_form'
contentanalysis_block in ./contentanalysis.module

File

./contentanalysis.module, line 224

Code

function contentanalysis_analysis_form($form_state, $analysis = array(), $node = array(), $mode = 'admin') {

  // check the number of calls
  drupal_add_js(drupal_get_path('module', 'contentanalysis') . '/contentanalysis.js');
  ctools_include('ajax');

  // Module  include the dependence it needs for ajax.
  ctools_include('modal');
  ctools_modal_add_js();
  ctools_add_js('ajax-responder');
  $fields = array();
  drupal_add_css(drupal_get_path('module', 'contentanalysis') . '/contentanalysis.css');
  $display = variable_get('contentanalysis_display', array(
    'sections',
    'main',
  ));
  $analyzers = contentanalysis_analyzer_info();
  $analyzer_modules = array();
  foreach ($analyzers as $aid => $analyzer) {
    if ($analyzer['module']) {
      $analyzer_modules[$aid] = array(
        'aid' => $aid,
        'module' => $analyzer['module'],
      );
    }
  }

  // generate code to secure form
  if (!isset($_SESSION['contentanalysis']) || !isset($_SESSION['contentanalysis']['code']) || !($code = $_SESSION['contentanalysis']['code'])) {
    $code = md5(rand());
    $_SESSION['contentanalysis']['code'] = $code;
  }
  $report_style = variable_get('contentanalysis_node_report_display', 'both');
  $display_inline = 1;
  $display_dialog = 1;
  if ($report_style == 'dialog') {
    $display_inline = 0;
  }
  elseif ($report_style == 'inline') {
    $display_dialog = 0;
  }

  // Hack protecting settings on multiple calls.
  static $js_added;

  // Get current node language.
  $language = ($lang = entity_language('node', $node)) ? $lang : "und";
  if (!$js_added) {
    drupal_add_js(array(
      'contentanalysis' => array(
        'analyze_callback' => variable_get('contentanalysis_host', '') . base_path() . 'admin/contentanalysis/analyze_js',
        'base_path' => base_path(),
        'path_to_module' => base_path() . drupal_get_path('module', 'contentanalysis'),
        'nid' => isset($node->nid) ? $node->nid : -1,
        'node_type' => isset($node->type) ? $node->type : -1,
        'display_sections' => isset($display['sections']) && $display['sections'] ? 1 : 0,
        'display_main' => isset($display['main']) && $display['main'] ? 1 : 0,
        'analyze_on_start' => variable_get('contentanalysis_analyze_on_start', '0'),
        'analyzer_modules' => $analyzer_modules,
        'code' => $code,
        'display_dialog' => $display_dialog,
        'display_inline' => $display_inline,
        'language' => $language,
      ),
    ), 'setting');
    $js_added = TRUE;
  }
  $fields['analyzers'] = contentanalysis_get_analyzer_form_element($analysis, $analyzers);
  foreach ($analyzers as $aid => $analyzer) {
    if (isset($analyzer['form elements callback']) && $analyzer['form elements callback']) {
      $e = call_user_func($analyzer['form elements callback'], $form_state, $analysis, $node);
      if (is_array($e)) {
        $fs = array(
          '#type' => 'fieldset',
          '#title' => check_plain($analyzer['title'] . ' ' . t('analyzer options')),
          '#tree' => TRUE,
        );
        $fields[$aid] = array_merge($fs, $e);
      }
    }
  }
  if ($mode == 'node-edit') {
    $form = $fields;
    $report_style = variable_get('contentanalysis_node_report_display', 'both');
    if ($report_style == 'both') {
      $form['clickme'] = array(
        '#type' => 'markup',
        '#markup' => '<div id="contentanalysis-buttons">' . ($output = ctools_ajax_text_button(t('Analyze content'), 'admin/contentanalysis/ajax/analysis', t('Content Analysis'), 'contentanalysis-button', 'ctools-use-modal') . '</div>'),
      );
    }
    elseif ($report_style == 'dialog') {
      $form['clickme'] = array(
        '#type' => 'markup',
        '#markup' => '<div id="contentanalysis-buttons">' . ($output = ctools_ajax_text_button(t('Analyze content'), 'admin/contentanalysis/ajax/analysis_only', t('Content Analysis'), 'contentanalysis-button', 'ctools-use-modal') . '</div>'),
      );
    }
    elseif ($report_style == 'inline') {
      $form['clickme'] = array(
        '#type' => 'markup',
        '#markup' => '<div id="contentanalysis-buttons">' . l(t('Analyze content'), base_path() . 'admin/contentanalysis/analyze_js', array(
          'attributes' => array(
            'id' => 'contentanalysis-ininline-analysis-button',
            'class' => "contentanalysis-analyze-content contentanalysis-button",
            "onclick" => "contentanalysis_inline_analysis(); return (false);",
          ),
        )) . '</div>',
      );
    }
    else {
      $v = '<div id="contentanalysis-buttons">';
      $v .= t('Analyze content') . ': ';
      $v .= ctools_ajax_text_button(t('Full reports'), 'admin/contentanalysis/ajax/analysis', t('Content Analysis'), 'contentanalysis-button', 'ctools-use-modal');
      $v .= ' ';
      $v .= ctools_ajax_text_button(t('Main report'), 'admin/contentanalysis/ajax/analysis_only', t('Content Analysis'), 'contentanalysis-button', 'ctools-use-modal');
      $v .= ' ';
      $v .= '<a href="#" id="contentanalysis-ininline-analysis-button" class="contentanalysis-analyze-content contentanalysis-button" onclick="contentanalysis_inline_analysis(); return (false);">' . t('Inline reports') . '</a>';

      //$v .= l(t('Inline recommendations'), '#', array('attributes' => array('class' => "contentanalysis-analyze-content", "onclick" => "contentanalysis_inline_analysis(); return (false);")));
      $v .= '</div>';
      $form['clickme'] = array(
        '#type' => 'markup',
        '#markup' => $v,
      );
    }
  }
  elseif ($mode == 'admin') {
    $form = $fields;
    $form['clickme'] = array(
      '#type' => 'markup',
      '#markup' => '<div>' . ctools_ajax_text_button(t('Analyze content'), 'admin/contentanalysis/ajax/analysis', t('Content Analysis'), 'contentanalysis-button', 'ctools-use-modal') . '</div>',
    );
  }
  else {
    $form['clickme'] = array(
      '#type' => 'markup',
      '#markup' => '<div>' . ctools_ajax_text_button(t('Analyze content'), 'admin/contentanalysis/ajax/analysis', t('Content Analysis'), 'contentanalysis-button', 'ctools-use-modal') . '</div>',
    );
    $form['contentanalysis_options'] = array(
      '#title' => t('options'),
      '#type' => 'fieldset',
      '#collapsible' => TRUE,
      '#collapsed' => TRUE,
    );
    $form['contentanalysis_options'] = array_merge($form['contentanalysis_options'], $fields);
  }
  return $form;
}