? LICENSE.txt ? drupal6.patch Index: filterbynodetype.info =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/filterbynodetype/filterbynodetype.info,v retrieving revision 1.2 diff -u -p -r1.2 filterbynodetype.info --- filterbynodetype.info 18 Jun 2007 22:53:43 -0000 1.2 +++ filterbynodetype.info 13 Feb 2008 21:31:01 -0000 @@ -1,3 +1,6 @@ -; $Id: filterbynodetype.info,v 1.2 2007/06/18 22:53:43 dww Exp $ +; $Id: filterbynodetype.info,v 1.1.2.1 2007/06/18 23:06:43 dww Exp $ name = Filter By Node Type description = Restrict what input formats are available by node type +package = "Input filters" +dependencies[] = filter +core = 6.x \ No newline at end of file Index: filterbynodetype.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/filterbynodetype/filterbynodetype.module,v retrieving revision 1.1 diff -u -p -r1.1 filterbynodetype.module --- filterbynodetype.module 13 May 2007 00:43:59 -0000 1.1 +++ filterbynodetype.module 13 Feb 2008 21:31:02 -0000 @@ -1,25 +1,18 @@ 'admin/settings/filterbynodetype', - 'title' => t('Input filter node types'), - 'callback' => 'drupal_get_form', - 'callback arguments' => array('filterbynodetype_settings'), - 'weight' => 2, - 'access' => user_access('administer filters'), - ); - } - +function filterbynodetype_menu() { + $items['admin/settings/filterbynodetype'] = array( + 'title' => 'Input filter node types', + 'description' => 'Set input formats on a per-content-type basis.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('filterbynodetype_settings'), + 'access callback' => 'user_access', + 'access arguments' => array('administer filters'), + ); return $items; } @@ -27,35 +20,66 @@ function filterbynodetype_menu($may_cach /** * Implementation of hook_form_alter */ -function filterbynodetype_form_alter($form_id, &$form) { - //dsm($form); +function filterbynodetype_form_alter(&$form, $form_state, $form_id) { if (isset($form['type']) && 'node-form' == $form['#id']) { $type = $form['type']['#value']; - $formats =& $form['body_filter']['format']; + $formats =& $form['body_field']['format']; + $default_value_error = false; // gets title stored on error + $add_node = empty($form['nid']['#value']); foreach (element_children($formats) as $element) { if (! variable_get('filterbynodetype_' . $formats[$element]['#return_value'] . '_' . $type, 1)) { + if ($formats[$element]['#default_value'] == $formats[$element]['#return_value']) { + $default_value_error = $formats[$element]['#title']; + } unset($formats[$element]); } } - - if (2 == count(element_children($formats))) { // 1 format and 1 extra item for the link + $elements = count(element_children($formats)); + if (2 == $elements) { // 1 format and 1 extra item for the link // If there's only one filter left, fold it down to just the description - $formats = $form['body_filter']['format']; - unset($form['body_filter']['format']); - $form['body_filter']['format'][$formats[1]['#title']] = array( - '#type' => 'value', - '#value' => $formats[1]['#default_value'], - ); - $form['body_filter']['format']['guidelines'] = array( - '#title' => t('Formatting guidelines'), - '#value' => $formats[1]['#description'], + $formats = $form['body_field']['format']; + unset($form['body_field']['format']); + $form['body_field']['format'] = array( + '#element_validate' => $formats['#element_validate'], ); - $form['body_filter']['format']['guidelines_link'] = array( - '#value' => $formats[4]['#value'], - ); - } - if (1 == count(element_children($formats))) { // 1 extra item for the link, which means there's no filters left - + // We don't know what the IDs are of the two fields, so we have to iterate to get them. + foreach (element_children($formats) as $element) { + if (isset($formats[$element]['#title'])) { + // This is a filter, so we assign it to the filter set as the only option. + $form['body_field']['format'][$element] = array( + '#type' => 'value', + '#value' => $element, + '#parents' => array('format'), + ); + break; + } + } + if ($default_value_error && !$add_node) { + drupal_set_message(t('!format is not available for this content type. Only !newformat is allowed and was selected.', + array('!format' => $default_value_error, '!newformat' => $formats[$element]['#title']) + ),'error'); + } + } elseif ($elements > 2) { + if ($default_value_error && !$add_node) { + drupal_set_message(t('!format is not available for this content type. Select a different input format.', + array('!format' => $default_value_error) + ),'error'); + } + // automatically select first format + $default_value = null; + foreach (element_children($formats) as $element) { + if (isset($formats[$element]['#title'])) { + // this is a filter, reassign default_value + if (is_null($default_value)) { + $default_value = $formats[$element]['#return_value']; + } + $formats[$element]['#default_value'] = $default_value; + } + } + } else { + drupal_set_message(t('No input format left.')); + // 1 extra item for the link, which means there's no filters left + // Do nothing. The form becomes unsubmittable all on its own. } } }