diff --git a/better_formats.admin_settings.inc b/better_formats.admin_settings.inc old mode 100644 new mode 100755 index 39e2c0f..5c95f13 --- a/better_formats.admin_settings.inc +++ b/better_formats.admin_settings.inc @@ -34,3 +34,26 @@ function better_formats_admin_settings_form($form, &$form_state) { return system_settings_form($form); } + +/** + * FAPI form builder for default entity formats. + * + * @see better_formats_menu() + */ +function better_formats_default_settings_form($form, &$form_state, $entity) { + $settings = variable_get('better_formats_default_' . $entity, array()); + $settings = isset($settings['better_formats']) ? $settings['better_formats'] : array(); + $form['better_formats'] = better_formats_format_table($settings); + $form['#entity'] = $entity; + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Save configuration') + ); + return $form; +} + +function better_formats_default_settings_form_submit($form, &$form_state) { + variable_set('better_formats_default_' . $form['#entity'], array('better_formats' => $form_state['values']['better_formats'])); + drupal_set_message(t('The configuration options have been saved.')); + $form_state['redirect'] = 'admin/config/content/formats/settings'; +} \ No newline at end of file diff --git a/better_formats.module b/better_formats.module old mode 100644 new mode 100755 index c49969e..ecff1e0 --- a/better_formats.module +++ b/better_formats.module @@ -1,10 +1,23 @@ array( + 'render element' => 'form', + 'file' => 'better_formats.theme.inc' + ) + ); +} + +/** * Implements of hook_perm(). */ function better_formats_permission() { @@ -35,7 +48,7 @@ function better_formats_permission() { * Implements hook_menu(). */ function better_formats_menu() { - $items = array(); + $items = array(); $items['admin/config/content/formats/settings'] = array( 'title' => 'Settings', 'description' => 'Manage input formats', @@ -46,8 +59,21 @@ function better_formats_menu() { 'weight' => 3, 'file' => 'better_formats.admin_settings.inc', ); + $entities = entity_get_info(); + foreach (array_keys($entities) as $entity) { + $items['admin/config/content/formats/settings/defaults/' . $entity] = array( + 'title' => $entity . ' default', + 'description' => 'Set the default formats for the ' . $entity . ' format', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('better_formats_default_settings_form', $entity), + 'access arguments' => array('administer filters'), + 'type' => MENU_LOCAL_ACTION, + 'weight' => 3, + 'file' => 'better_formats.admin_settings.inc', + ); + } /* - $items['admin/config/content/formats/defaults'] = array( + $items['admin/config/content/formats/defaults'] = array( 'title' => 'Defaults', 'description' => 'Manage input formats', 'page callback' => 'drupal_get_form', @@ -56,8 +82,8 @@ function better_formats_menu() { 'type' => MENU_LOCAL_TASK, 'weight' => 2, 'file' => 'better_formats.admin_defaults.inc', - ); - */ + ); + */ return $items; } @@ -109,12 +135,18 @@ function better_formats_element_info_alter(&$type) { function better_formats_filter_process_format($element) { global $user; + $instances = field_info_instances($element['#entity_type'], $element['#bundle']); + + $settings = (isset($instances[$element['#field_name']]['settings']['better_formats']) && $instances[$element['#field_name']]['settings']['better_formats']['override']) ? + $instances[$element['#field_name']]['settings']['better_formats'] : + variable_get('better_formats_default_' . $element['#entity_type'], array()); + $show_selection = TRUE; if (isset($element['#entity_type'])) { - $show_selection = user_access('show format selection for ' . $element['#entity_type']); + $show_selection = user_access('show format selection for ' . $element['#entity_type']); } - $show_tips = user_access('show format tips'); - $show_tips_link = user_access('show more format tips link'); + $show_tips = user_access('show format tips'); + $show_tips_link = user_access('show more format tips link'); // Ensure that children appear as subkeys of this element. $element['#tree'] = TRUE; @@ -177,12 +209,21 @@ function better_formats_filter_process_format($element) { // Get a list of formats that the current user has access to. $formats = filter_formats($user); $options = array(); + + // Set our weights on our formats + foreach ($formats as &$format) { + $format->weight = isset($settings['formats'][$format->format]) ? $settings['formats'][$format->format]['weight'] : $format->weight; + } + uasort($formats, '_better_formats_sort'); + foreach ($formats as $format) { // If not showing selection remove all formats except default. if ($format->format !== $element['#format'] && !$show_selection) { continue; } - $options[$format->format] = $format->name; + if (!isset($settings['formats'][$format->format]) || !$settings['formats'][$format->format]['disable']) { + $options[$format->format] = $format->name; + } if ($show_tips) { $element['format']['guidelines'][$format->format] = array( '#theme' => 'filter_guidelines', @@ -263,6 +304,13 @@ function better_formats_filter_process_format($element) { } /** + * Sort our formats by weight + */ +function _better_formats_sort($a, $b) { + return $a->weight > $b->weight; +} + +/** * Implements hook_form_FORM_ID_alter(). */ function better_formats_form_field_ui_field_edit_form_alter(&$form, &$form_state, $form_id) { @@ -271,7 +319,51 @@ function better_formats_form_field_ui_field_edit_form_alter(&$form, &$form_state if ($text_processing == 1 && variable_get('better_formats_per_field_core', 0)) { // Add a submit handler to save default values on empty fields. $form['#submit'][] = 'better_formats_form_field_ui_edit_form_submit'; + $settings = isset($form['#instance']['settings']['better_formats']) ? $form['#instance']['settings']['better_formats'] : array(); + $form['instance']['settings'] += better_formats_format_table($settings); + $form['instance']['settings']['better_formats']['override'] = array( + '#type' => 'checkbox', + '#title' => t('Override default formats'), + '#default_value' => isset($settings['override']) ? $settings['override'] : 0, + ); + + } +} + +/** + * Helper function to generate our draggable table form for format lists + * + * @param $defaults + * A keyed array of the default values for the form + */ +function better_formats_format_table($defaults) { + + $formats = filter_formats(); + $form = array(); + $form['better_formats'] = array( + '#tree' => TRUE, + '#type' => 'fieldset', + '#title' => t('Input Formats'), + '#theme' => 'better_formats_filter_table' + ); + foreach ($formats as $key => $format) { + + $form['better_formats']['formats'][$key]['name'] = array('#markup' => $format->name); + $form['better_formats']['formats'][$key]['weight'] = array( + '#type' => 'weight', + '#default_value' => isset($defaults['formats'][$key]) ? $defaults['formats'][$key]['weight'] : 0, + '#delta' => 50, + ); + + $form['better_formats']['formats'][$key]['disable'] = array( + '#type' => 'checkbox', + '#default_value' => isset($defaults['formats'][$key]) ? $defaults['formats'][$key]['disable'] : 0, + ); + + $form['better_formats']['formats'][$key]['#weight'] = isset($defaults['formats'][$key]) ? $defaults['formats'][$key]['weight'] : 0; } + + return $form; } /**