'Collapsiblock', 'description' => 'Configuration for collapsible blocks', 'page callback' => 'drupal_get_form', 'page arguments' => array('collapsiblock_admin_settings'), 'access arguments' => array('administer site configuration'), ); return $items; } /** * Admin settings. */ function collapsiblock_admin_settings($form, &$form_state) { $form = array(); $form['collapsiblock_help'] = array( '#type' => 'item', '#value' => t('Change selectors from Themes configuration.', array('!url' => url('admin/appearance/settings'))), ); $form['collapsiblock_default_state'] = array( '#type' => 'radios', '#title' => t('Default block collapse behavior'), '#options' => array(1 => t('None.'), 2 => t('Collapsible, expanded by default.'), 3 => t('Collapsible, collapsed by default.'), 4 => t('Collapsible, collapsed all the time.')), '#default_value' => variable_get('collapsiblock_default_state', 1), ); $form['collapsiblock_slide_type'] = array( '#type' => 'radios', '#title' => t('Default animation type'), '#options' => array(1 => t('Slide'), 2 => t('Fade and slide')), '#description' => t('Slide is the Drupal default while Fade and slide adds a nice fade effect.'), '#default_value' => variable_get('collapsiblock_slide_type', 1), ); $form['collapsiblock_slide_speed'] = array( '#type' => 'select', '#title' => t('Animation speed'), '#options' => drupal_map_assoc(array('50', '100', '200', '300', '400', '500', '700', '1000', '1300')), '#description' => t('The animation speed in milliseconds.'), '#default_value' => variable_get('collapsiblock_slide_speed', 200), ); $form = system_settings_form($form); return $form; } /** * Load needed files. */ function collapsiblock_load() { // ERROR: return statement not found in hook_load // TODO: Name the variable $xx_missing_xx which was missing in the old function signature. static $loaded = FALSE; if (!$loaded) { global $theme; $current_theme = $theme ? $theme : variable_get('theme_default', 'garland'); $collapsiblock_path = drupal_get_path('module', 'collapsiblock'); $theme_settings = variable_get(str_replace('/', '_', 'theme_' . $current_theme . '_settings'),array()); $theme_settings = array_merge(collapsiblock_default_settings(), $theme_settings, array()); drupal_add_js(drupal_get_path('module', 'collapsiblock') . '/collapsiblock.js',array('type'=>'file','scope'=>'footer','every_page'=>'TRUE')); //drupal_add_js(drupal_get_path('module', 'jstools') . '/jquery.cookie.js'); drupal_add_js(array( 'collapsiblock' => array( 'blocks' => variable_get('collapsiblock_settings', array()), 'default_state' => variable_get('collapsiblock_default_state', 1), 'slide_type' => variable_get('collapsiblock_slide_type', 1), 'slide_speed' => variable_get('collapsiblock_slide_speed', 200), 'block_title' => $theme_settings['collapsiblock_title'], 'block' => $theme_settings['collapsiblock_block'], 'block_content' => $theme_settings['collapsiblock_content'], )), array('type' => 'setting' , 'scope' => JS_DEFAULT)); drupal_add_css($collapsiblock_path . '/collapsiblock.css'); $loaded = TRUE; } } /** * Default theme's settings */ function collapsiblock_default_settings() { $defaults = array( 'collapsiblock_block' => 'div.block', 'collapsiblock_content' => 'div.content', 'collapsiblock_title' => ':header:first', ); return $defaults; } /** * Implements hook_form_alter(). */ function collapsiblock_form_alter(&$form, $form_state, $form_id) { if ($form_id == 'system_theme_settings') { $settings = variable_get($form['var']['#value'],array()); $settings = array_merge(collapsiblock_default_settings(), $settings, array()); $form['collapsiblock'] = array( '#type' => 'fieldset', '#title' => t('Collapsiblock selectors'), '#description' => t("Force CSS selector if collapsiblock doesn't work out of the box"), '#weight' => 0, '#attributes' => array('id' => 'collapsiblock_form'), ); $form['collapsiblock']['collapsiblock_block'] = array( '#type' => 'textfield', '#title' => t('Block'), '#default_value' => $settings['collapsiblock_block'], ); $form['collapsiblock']['collapsiblock_title'] = array( '#type' => 'textfield', '#title' => t('Title'), '#default_value' => $settings['collapsiblock_title'], ); $form['collapsiblock']['collapsiblock_content'] = array( '#type' => 'textfield', '#title' => t('Block content'), '#default_value' => $settings['collapsiblock_content'], ); } if ($form_id == 'block_admin_configure') { $settings = variable_get('collapsiblock_settings', array()); $form['#submit'][] = 'collapsiblock_submit'; $form['collapsiblock'] = array( '#type' => 'fieldset', '#title' => t('Collapsible'), '#collapsible' => TRUE, '#weight' => -5 ); $form['collapsiblock']['collapse_type'] = array( '#type' => 'radios', '#title' => t('Block collapse behavior'), '#options' => array(1 => t('None.'), 2 => t('Collapsible, expanded by default.'), 3 => t('Collapsible, collapsed by default.'), 4 => t('Collapsible, collapsed all the time.')), '#default_value' => $settings['block-' . $form['module']['#value'] . '-' . $form['delta']['#value']] ? $settings['block-' . $form['module']['#value'] . '-' . $form['delta']['#value']] : variable_get('collapsiblock_default_state', 1), ); } } /** * Form submission handler for block_admin_configure(). * * @see block_admin_configure() * @see collapsiblock_form_alter() */ function collapsiblock_submit($form, &$form_state) { $settings = variable_get('collapsiblock_settings', array()); $settings['block-' . $form_state['values']['module'] . '-' . $form_state['values']['delta']] = $form_state['values']['collapse_type']; variable_set('collapsiblock_settings', $settings); }