$value) { $temp .= "$key|$value\n"; } $default = $temp; $form['block_class_styles_presets'] = array( '#type' => 'textarea', '#title' => t('Style definitions'), '#description' => t('Enter class/style presets one per line like this: css-class|Style Name. You may combine multiple classes in one style by separating classes with a space, e.g. some-class another-class|Combo Style'), '#default_value' => $default, '#rows' => 10, '#resizable' => TRUE, ); $suggestions = array(); foreach ($presets as $css => $style) { $hooks = _block_class_styles_theme_hook_suggestion($style); foreach ($hooks as &$hook) { $hook = str_replace('_', '-', $hook) . '.tpl.php'; } $suggestions[] = $style . " (" . implode(', ', $hooks) . ")"; } if ($suggestions) { $form['suggestions'] = array( '#type' => 'fieldset', '#title' => t('Template suggestions list'), '#collapsible' => TRUE, '#collapsed' => TRUE, 0 => array( '#theme' => 'item_list', '#items' => $suggestions, '#prefix' => '

', ), ); } $options = array(NULL => t('- system default -')); foreach (filter_formats() as $format) { $options[$format->format] = $format->name; } $form['block_class_styles_title_format'] = array( '#type' => 'select', '#title' => t('Block titles format'), '#description' => t('In Drupal core, custom block titles must be plain text. You may override this by selecting a global format for block titles. This affects the title you enter when editing a block, not the titles automatically generated by modules.'), '#default_value' => variable_get('block_class_styles_title_format', BLOCK_CLASS_STYLES_TITLE_FORMAT), '#options' => $options, ); $form['form_text_overrides'] = array( '#type' => 'fieldset', '#title' => t('Block Edit Form Settings'), '#collapsible' => FALSE, ); // @todo Find a way to make this work; it is incompatible with the storage mechanism of block_class //$form['block_class_styles_allow_multiple'] = array( // '#type' => 'checkboxes', // '#title' => t('Single or Multiple?'), // '#options' => array(TRUE => t('Allow more than one style definition per block?')), // '#default_value' => variable_get('block_class_styles_allow_multiple', BLOCK_CLASS_STYLES_ALLOW_MULTIPLE), //); $form['form_text_overrides']['block_class_styles_fs_title'] = array( '#type' => 'textfield', '#title' => t('Fieldset title'), '#required' => TRUE, '#default_value' => variable_get('block_class_styles_fs_title', BLOCK_CLASS_STYLES_FS_TITLE), ); $form['form_text_overrides']['block_class_styles_fs_description'] = array( '#type' => 'textarea', '#rows' => 2, '#title' => t('Fieldset instructions'), '#default_value' => variable_get('block_class_styles_fs_description', BLOCK_CLASS_STYLES_FS_DESCRIPTION), ); $form['form_text_overrides']['block_class_styles_form_collapsed'] = array( '#type' => 'checkbox', '#title' => t('Check to open the %title fieldset by default', array( '%title' => variable_get('block_class_styles_fs_title', BLOCK_CLASS_STYLES_FS_TITLE), )), '#default_value' => variable_get('block_class_styles_form_collapsed', FALSE), ); $form['form_text_overrides']['block_class_styles_form_weight'] = array( '#type' => 'weight', '#title' => t('Position in form'), '#description' => t('To position the fieldset higher in the form, choose a lower number.'), '#default_value' => variable_get('block_class_styles_form_weight', 0), '#delta' => 20, //the range is from -1 * delta through delta ); $form['form_text_overrides']['block_class_styles_title'] = array( '#type' => 'textfield', '#required' => TRUE, '#title' => t('%title select list title', array( '%title' => variable_get('block_class_styles_fs_title', BLOCK_CLASS_STYLES_FS_TITLE), )), '#default_value' => variable_get('block_class_styles_title', BLOCK_CLASS_STYLES_TITLE), ); $form['form_text_overrides']['block_class_styles_description'] = array( '#type' => 'textarea', '#rows' => 2, '#title' => t('%title select list description', array( '%title' => variable_get('block_class_styles_fs_title', BLOCK_CLASS_STYLES_FS_TITLE), )), '#description' => t('Optional text to appear below the selector on the block edit pages.'), '#default_value' => variable_get('block_class_styles_description', BLOCK_CLASS_STYLES_DESCRIPTION), ); $default = variable_get('block_class_styles_hidden', array()); $default = array_keys(array_diff_key($presets, $default)); $form['form_text_overrides']['block_class_styles_hidden'] = array( '#type' => 'checkboxes', '#title' => t("%title select list options", array( '%title' => variable_get('block_class_styles_fs_title', BLOCK_CLASS_STYLES_FS_TITLE), )), '#description' => t('Uncheck any style you wish to be hidden on block edit forms'), '#options' => $presets, '#default_value' => $default, ); //$form['form_text_overrides']['block_class_styles_hide_classes'] = array( // '#type' => 'checkbox', // '#title' => t('Check this box to hide the CSS class(es) textfield created by the Block Class module.'), // '#default_value' => variable_get('block_class_styles_hide_classes', BLOCK_CLASS_STYLES_HIDE_CLASSES), //); $form['#validate'][] = 'block_class_styles_admin_settings_validate'; return system_settings_form($form); } /** * Form validation handler for block_class_styles_admin_settings_validate(). */ function block_class_styles_admin_settings_validate($form, &$form_state) { $presets = &$form_state['values']['block_class_styles_presets']; $hidden = &$form_state['values']['block_class_styles_hidden']; // Invert our selection because active looks better in the UI, but hidden // stores with less memory. $hidden = array_diff_key(block_class_styles_info(TRUE), array_filter($hidden)); $temp = explode("\n", trim($presets)); if (empty($temp) || empty($temp[0])) { $presets = NULL; return; } $temp3 = array(); foreach ($temp as $value) { if (!strstr($value, '|')) { form_set_error('block_class_styles_presets', t('Separate class and Style Name with a pipe |')); } else { $temp2 = explode('|', trim($value)); $temp3[$temp2[0]] = $temp2[1]; } } $presets = $temp3; $new_presets = array_flip($presets); $old_presets = array_flip(block_class_styles_info()); $diff = array_diff($old_presets, $new_presets); foreach (array_keys($diff) as $style) { if (!array_key_exists($style, $new_presets)) { form_set_error('block_class_styles_presets', t('You cannot change both style name and css definition at the same time. This must be done in two saves. To delete a style, use the checkboxes below the Style Definitions.')); } else { // The admin has changed a css class and we need to update the database // directly. db_update(_block_class_tablename()) ->fields(array('css_class' => $new_presets[$style])) ->condition('css_class', $old_presets[$style]) ->execute(); } } } /** @} */ //end of group block_class_styles1