function highcharttable_admin_configure_form in HighchartTable 7
Menu callback for admin configuration settings.
1 string reference to 'highcharttable_admin_configure_form'
- highcharttable_menu in ./
highcharttable.module - Implements hook_menu().
File
- ./
highcharttable.admin.inc, line 13 - highcharttable.admin.inc
Code
function highcharttable_admin_configure_form($form, &$form_state) {
$page = filter_input(INPUT_GET, 'destination');
// Retain tree-hierarchy in values, prevent the form from being flattened.
$form['#tree'] = TRUE;
// Use array_values to make sure keys are numeric and start at 0.
$decorations = array_values(variable_get('highcharttable_decorations', array()));
if (!isset($form_state['num-decorations'])) {
$form_state['num-decorations'] = max(0, count($decorations));
}
$form['decorations'] = array(
'#type' => 'fieldset',
'#collapsible' => FALSE,
'#title' => t('Chart decorations on this site'),
// The following id refers to the #ajax wrappers below.
'#prefix' => '<div id="decorations-wrapper">',
'#suffix' => '</div>',
);
$form['decorations']['#attached']['css'][] = drupal_get_path('module', 'highcharttable') . '/css/highcharttable.admin.css';
for ($i = 0; $i < $form_state['num-decorations']; $i++) {
$decoration_params = $decorations[$i]['decoration-params'];
$form['decorations'][$i] = array(
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => !empty($page) && !_highcharttable_path_matches_decoration($page, $decorations[$i]),
'#title' => t('Chart decoration #@no', array(
'@no' => $i + 1,
)),
);
$form['decorations'][$i]['decoration-params'] = array(
'#type' => 'markup',
'#prefix' => '<div class="decoration-params">',
'#suffix' => '</div>',
);
$form['decorations'][$i]['decoration-params']['chart-type'] = array(
'#type' => 'select',
'#title' => t('Chart type'),
'#options' => array(
'column' => t('Column (Bar)'),
'line' => t('Line'),
'spline' => t('Spline (smoothed line)'),
'area' => t('Area'),
'pie' => t('Pie'),
),
'#default_value' => isset($decoration_params['chart-type']) ? $decoration_params['chart-type'] : 'column',
'#description' => t('The type of chart to appear above the table.'),
);
$form['decorations'][$i]['decoration-params']['subtitle'] = array(
'#type' => 'textfield',
'#size' => 30,
'#title' => t('Chart subtitle'),
// Note that Highcharts JS accepts very few HTML tags.
'#default_value' => isset($decoration_params['subtitle']) ? filter_xss_admin($decoration_params['subtitle']) : '',
'#description' => t('You may use the <b><b>bold</b></b> and <i><i>italic</i></i> tags. The <em>subtitle</em> appears above the chart. The <em>title</em> is taken from the table caption, if present.'),
);
$form['decorations'][$i]['decoration-params']['legend'] = array(
'#type' => 'select',
'#title' => t('Legend style'),
'#options' => array(
'' => t('No legend'),
'horizontal' => t('Items shown horizontally'),
'vertical' => t('Items shown vertically'),
),
'#default_value' => isset($decoration_params['legend']) ? $decoration_params['legend'] : 'horizontal',
'#description' => t("The chart's legend style."),
);
$form['decorations'][$i]['decoration-params']['color-1'] = array(
'#type' => 'textfield',
'#size' => 30,
'#title' => t('Colour 1'),
'#default_value' => isset($decoration_params['color-1']) ? $decoration_params['color-1'] : '',
'#description' => t('Color of the first series. You may use a #RGB code, like <em>#ffb6c1</em> or one of the <a target="colornames" href="@url">standard color names</a>, like <em>lightpink</em>. <br/>Leave blank to use the HighchartTable presets.', array(
'@url' => url('http://www.w3schools.com/tags/ref_colornames.asp'),
)),
);
$form['decorations'][$i]['decoration-params']['color-2'] = array(
'#type' => 'textfield',
'#size' => 30,
'#title' => t('Colour 2'),
'#default_value' => isset($decoration_params['color-2']) ? $decoration_params['color-2'] : '',
'#description' => t('Color of the second series, if present.'),
);
$form['decorations'][$i]['decoration-params']['color-3'] = array(
'#type' => 'textfield',
'#size' => 30,
'#title' => t('Colour 3'),
'#default_value' => isset($decoration_params['color-3']) ? $decoration_params['color-3'] : '',
'#description' => t('Color of the third series, if present.'),
);
$form['decorations'][$i]['decoration-params']['xaxis'] = array(
'#type' => 'textfield',
'#size' => 3,
'#title' => t('Column to use as the primary (horizontal) axis'),
'#default_value' => isset($decoration_params['xaxis']) ? (int) $decoration_params['xaxis'] : 1,
'#description' => t('The leftmost column is column 1.<br/>For this feature to work you must select the patched variant of the HighchartTable library (bottom of this page).'),
);
$form['decorations'][$i]['decoration-params']['formatter'] = array(
'#type' => 'select',
'#title' => t('Vertical axis label formatter'),
'#options' => array(
'' => t('Highcharts default'),
'highcharttableDollarFormatter' => t('prepend $'),
'highcharttableEuroFormatter' => t('prepend €'),
'highcharttablePoundFormatter' => t('prepend £'),
'highcharttableNumberFormatter1Decimal' => t('1 decimal'),
'highcharttableNumberFormatter2Decimals' => t('2 decimals'),
'highcharttableNumberFormatter3Decimals' => t('3 decimals'),
'highcharttableDollarFormatter2Decimals' => t('$ + 2 decimals'),
'highcharttableEuroFormatter2Decimals' => t('€ + 2 decimals'),
'highcharttablePoundFormatter2Decimals' => t('£ + 2 decimals'),
'highcharttablePercentFormatter' => t('Percentage (append %)'),
),
'#default_value' => isset($decoration_params['formatter']) ? $decoration_params['formatter'] : '',
'#description' => t('Does not apply to Pie charts.'),
// This works fine when chart-type widget is 'radios', not when 'select'.
'#states' => array(
'invisible' => array(
"input[name='decorations[{$i}][decoration-params][chart-type]'" => array(
'value' => 'pie',
),
),
),
);
$form['decorations'][$i]['decoration-params']['suppress-invalid-series'] = array(
'#type' => 'select',
'#title' => t('Invalid data'),
'#options' => array(
0 => t('Do not suppress'),
1 => t('Suppress columns with 1 or more invalid cells'),
2 => t('Suppress columns with no valid cells'),
),
'#default_value' => isset($decoration_params['suppress-invalid-series']) ? $decoration_params['suppress-invalid-series'] : 2,
'#description' => t('Does not apply to the horizontal axis column.'),
);
$form['decorations'][$i]['decoration-params']['height'] = array(
'#type' => 'textfield',
'#size' => 5,
'#title' => t('Height'),
'#field_suffix' => ' ' . t('px'),
'#default_value' => isset($decoration_params['height']) ? $decoration_params['height'] : '',
'#description' => t('The height of the chart in pixels.'),
);
$form['decorations'][$i]['decoration-params']['swap-axes'] = array(
'#type' => 'checkbox',
'#title' => t('Swap axes'),
'#default_value' => isset($decoration_params['swap-axes']) ? $decoration_params['swap-axes'] : FALSE,
'#description' => t('Invert horizontal and vertical axes. Does not apply to Pie charts.<br/><strong>Example:</strong> ticking this box for a <em>Column</em> chart will transform it into a horizontal bar chart.'),
// This works fine when chart-type widget is 'radios', not when 'select'.
'#states' => array(
'invisible' => array(
"input[name='decorations[{$i}][decoration-params][chart-type]'" => array(
'value' => 'pie',
),
),
),
);
$form['decorations'][$i]['decoration-params']['labels'] = array(
'#type' => 'checkbox',
'#title' => t('Superimpose data labels'),
'#default_value' => isset($decoration_params['labels']) ? $decoration_params['labels'] : FALSE,
'#description' => t('Tick to display the value of each data point.'),
);
$form['decorations'][$i]['pages-and-selector'] = array(
'#type' => 'markup',
'#prefix' => '<div class="pages-and-selector">',
'#suffix' => '</div>',
);
$pages_and_selector = $decorations[$i]['pages-and-selector'];
$form['decorations'][$i]['pages-and-selector']['include-pages'] = array(
'#type' => 'textarea',
'#rows' => 2,
'#title' => t('Pages containing tables to be adorned with the above chart decoration'),
'#default_value' => isset($pages_and_selector['include-pages']) ? $pages_and_selector['include-pages'] : '',
'#description' => t('Enter relative paths, one per line. Do not start with a slash. You may use path aliases. <em><front></em> means the front page. The asterisk <em>*</em> is the wildcard character, while a leading tilde <em>~</em> is the exclusion character. So <em>~admin/*</em> denotes all pages that do <em>not</em> have a path starting with <em>admin/</em>.<br/>Blank out this field to remove the entire chart decoration.'),
);
$form['decorations'][$i]['pages-and-selector']['table-selector'] = array(
'#type' => 'textfield',
'#size' => 32,
'#title' => t('CSS-selector for tables targeted'),
'#default_value' => isset($pages_and_selector['table-selector']) ? $pages_and_selector['table-selector'] : '',
'#description' => t('If you have only one table on each of the pages mentioned on the left, then you can leave this empty. If you have more and wish to decorate a subset, then target individual tables using a CSS/jQuery selector.<br/><strong>Example:</strong> <em>table:eq(1)</em> targets the 2nd table on the page only.'),
);
$form['decorations'][$i]['pages-and-selector']['hide-table'] = array(
'#type' => 'checkbox',
'#title' => t('Hide table'),
'#default_value' => isset($pages_and_selector['hide-table']) ? $pages_and_selector['hide-table'] : FALSE,
'#description' => t('Tick to hide the table that the chart was generated from.'),
);
}
$form['decorations']['add-another'] = array(
'#type' => 'submit',
'#value' => empty($form_state['num-decorations']) ? t('Add chart decoration') : t('Add another chart decoration'),
'#weight' => 1,
'#submit' => array(
'_highcharttable_add_decoration_submit',
),
'#ajax' => array(
'callback' => '_highcharttable_decoration_js',
'wrapper' => 'decorations-wrapper',
// 'fade', 'none' or 'slide'.
'effect' => 'fade',
// 'fast', 'slow' or number of millisec.
'speed' => 'slow',
),
);
if ($form_state['num-decorations'] > 0) {
$form['decorations']['remove'] = array(
'#type' => 'submit',
'#value' => t('Remove last decoration'),
'#weight' => 2,
'#submit' => array(
'_highcharttable_remove_decoration_submit',
),
'#ajax' => array(
'callback' => '_highcharttable_decoration_js',
'wrapper' => 'decorations-wrapper',
// 'fade', 'none' or 'slide'.
'effect' => 'fade',
// 'fast', 'slow' or number of millisec.
'speed' => 'fast',
),
);
}
$global_settings = variable_get('highcharttable_global_settings', array());
$form['global-settings'] = array(
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#title' => t('Global settings'),
);
$form['global-settings']['use-patched-library'] = array(
'#type' => 'checkbox',
'#title' => t('Use the patched variant of the HighchartTable library'),
'#default_value' => isset($global_settings['use-patched-library']) ? $global_settings['use-patched-library'] : TRUE,
'#description' => t('The patched variant comes included with the module. It does not need to be downloaded. However you do need to have the Highcharts JS library on your system.'),
);
$form['global-settings']['animation'] = array(
'#type' => 'select',
'#title' => t('Animation'),
'#options' => array(
'' => t('Highcharts default'),
'fast' => t('Faster'),
'slow' => t('Slower'),
'off' => t('Off'),
),
'#default_value' => isset($global_settings['animation']) ? $global_settings['animation'] : '',
'#description' => t('If you want to generate PDFs select <em>Off</em>.'),
);
$form['global-settings']['contextual-links'] = array(
'#type' => 'radios',
'#title' => t('Contextual links to insert, configure and delete charts'),
'#options' => array(
'' => t('Links visible to privileged users through the cogwheel symbol when hovered'),
'plain' => t('Plain links, always visible to privileged users'),
'off' => t('Off, no contextual links'),
),
'#default_value' => isset($global_settings['contextual-links']) ? $global_settings['contextual-links'] : '',
'#description' => t('The first two options allow users with the <em>Add and configure chart decorations</em> permission to insert a chart above a table through a single click.'),
);
$form['global-settings']['contextual-links-exclude-pages'] = array(
'#type' => 'textarea',
'#rows' => 6,
'#title' => t('Pages that must <em>not</em> display the contextual links mentioned above'),
'#default_value' => isset($global_settings['contextual-links-exclude-pages']) ? $global_settings['contextual-links-exclude-pages'] : HIGHCHARTTABLE_CONTEXTUAL_LINKS_EXCLUDE_PAGES,
'#description' => t('Enter relative paths, one per line. Do not start with a slash. You may use path aliases. The asterisk <em>*</em> is the wildcard character, while a leading tilde <em>~</em> is the exclusion character. So <em>~admin/*</em> denotes all pages that do <em>not</em> have a path starting with <em>admin/</em>.'),
'#states' => array(
'invisible' => array(
'input[name="global-settings[contextual-links]"' => array(
'value' => 'off',
),
),
),
);
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save configuration'),
);
//$form['#submit'][] = 'highcharttable_admin_configure_form_submit';
$form['#theme'] = 'system_settings_form';
return $form;
}