array('id' => 'charts_color', 'class' => ' clear-block'), '#collapsible' => TRUE, '#type' => 'fieldset', '#title' => t('Color'), ); // Load some color palettes $schemes = _charts_color_palette(); if (empty($settings['#color_palette'])) { $settings['#color_palette'] = '0,0,0,0,0,0,0,0'; } $form['color']['scheme'] = array( '#type' => 'select', '#title' => t('Color set'), '#options' => $schemes, '#default_value' => $settings['#color_palette'], ); // Add palette fields. Since all $color_palette = explode(',', $settings['#color_palette']); $names = array( t('Color %number', array('%number' => 1)), t('Color %number', array('%number' => 2)), t('Color %number', array('%number' => 3)), t('Color %number', array('%number' => 4)), t('Color %number', array('%number' => 5)), t('Color %number', array('%number' => 6)), t('Color %number', array('%number' => 7)), t('Color %number', array('%number' => 8)), ); $form['color']['palette'] = array( '#prefix' => '
', '#suffix' => '
', '#tree' => TRUE, ); foreach ($names as $color => $value) { $form['color']['palette']['color'. $color] = array( '#type' => 'textfield', '#title' => $value, '#default_value' => empty($color_palette[$color]) ? '336699' : $color_palette[$color], '#size' => 8, ); $color_palette['color'. $color] = $color_palette[$color]; unset($color_palette[$color]); } $form['color']['farbtastic'] = array( '#prefix' => '
', '#sufix' => '
', ); // Add the necessary JS data into the page drupal_add_js(array('charts_color' => array('reference' => $color_palette)), 'setting'); } /** * List all preset color palette */ function _charts_color_palette() { return array( '' => t('Custom'), '#ff0000,#00cc00,#0066b3,#ff8000,#ffcc00,#330099,#990099,#ccff00' => t('Primary'), '#ff6600,#009999,#1919b3,#ffb200,#ffff00,#660099,#e60066,#33ff00' => t('Secondary'), // 'ff0000,00cc00,0066b3,ff8000,ffcc00,330099,990099,ccff00' => t('Primary'), // 'ff6600,009999,1919b3,ffb200,ffff00,660099,e60066,33ff00' => t('Secondary'), ); } /** * Generate a generic chart example * * @param $data * Array (optional). Chart data, following the Charts Schema * @return * HTML. The generic Chart example */ function _charts_example($data = array()) { if (empty($data)) { // This will hold the example chart // Since the chart is an example, we should provide // and example data. $data[] = array( '#legend' => 'Profit', array('#value' => 35, '#label' => t('Jan')), array('#value' => 25, '#label' => t('Feb')), array('#value' => 75, '#label' => t('Mar')), array('#value' => 50, '#label' => t('Apr')), array('#value' => 23, '#label' => t('May')), array('#value' => 12, '#label' => t('Jun')), ); $data[] = array( '#legend' => 'Revenue', 10, 20, 55, 72, 45, 50 ); $data['#title'] = 'Testing Chart'; } return charts_chart($data); } /** * Invoke a hook in all enabled modules that implement it. * * Its copy of module_invoke_all() * @see module_invoke_all() */ function _charts_module_invoke_all() { $args = func_get_args(); $hook = $args[0]; unset($args[0]); $return = array(); foreach (module_implements($hook) as $module) { $function = $module .'_'. $hook; $result = call_user_func_array($function, $args); if (isset($result) && is_array($result)) { $return += $result; } else if (isset($result)) { $return[] = $result; } } return $return; } /** * Module settings page. Users can set the default layout * of their charts. * * @ingroup form */ function _charts_settings($form_state) { // Get the previously saved data from Data Base $settings = variable_get('charts_settings', array()); $form['chart_example'] = array( '#value' => _charts_example(), ); $charts_info = module_invoke_all('charts_info', 'list'); foreach ($charts_info as $chart_code => $chart) { $chart_names[$chart_code]= $chart['name']; } asort($chart_names); $form['plugin'] = array( '#default_value' => empty($settings['#plugin']) ? '' : $settings['#plugin'], '#options' => $chart_names, '#type' => 'select', '#title' => t('Chart plugin'), ); if (!empty($settings['#plugin'])) { asort($charts_info[$settings['#plugin']]['types']); } $form['type'] = array( '#default_value' => empty($settings['#type']) ? '' : $settings['#type'], '#options' => isset($settings['#plugin']) ? $charts_info[$settings['#plugin']]['types'] : array(), '#type' => 'select', '#title' => t('Chart type'), ); $form['width'] = array( '#default_value' => empty($settings['#width']) ? 400 : $settings['#width'], '#description' => t('The chart width, in pixels'), '#size' => 8, '#type' => 'textfield', '#title' => t('Width'), ); $form['height'] = array( '#default_value' => empty($settings['#height']) ? 200 : $settings['#height'], '#description' => t('The chart height, in pixels'), '#size' => 8, '#type' => 'textfield', '#title' => t('Height'), ); _charts_color_form($form, $form_state, $settings); $form['submit'] = array( '#type' => 'submit', '#value' => t('Save settings'), ); return $form; } /** * Module settings page. Users can set the default layout * of their charts. * * @ingroup form */ function _charts_settings_submit(&$form, &$form_state) { $settings = $form_state['values']; // Discart all form values non related to charts unset($settings['submit']); unset($settings['form_id']); unset($settings['form_build_id']); unset($settings['form_token']); unset($settings['op']); // Add a '#' in all field names, as they will be used like a // Form API field attributes foreach ($settings as $index => $value) { $settings["#$index"] = $value; unset($settings[$index]); } // Save the Color palette. Firts, filter the data, cluster the results // into a single string. Finally, unset all field values, since they // are useless $settings['#color_palette'] = implode(',', $settings['#palette']); unset($settings['#palette']); unset($settings['#scheme']); // Save the data into database variable_set('charts_settings', $settings); } /** * Theme color form. * * @ingroup @themeable */ function theme__charts_settings($form) { // Preview $output = '
'; // The rest of the form $output .= drupal_render($form); // Add Farbtastic color picker JS drupal_add_css('misc/farbtastic/farbtastic.css', 'module', 'all', FALSE); drupal_add_js('misc/farbtastic/farbtastic.js'); drupal_add_js(drupal_get_path('module', 'charts') .'/charts_color.js'); // Add the necessary CSS drupal_add_css(drupal_get_path('module', 'charts') .'/charts_color.css'); // Put everything inside given DIV. Its necessary for JS code return $output; }