? 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 22:17:32 -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 22:17:33 -0000
@@ -1,25 +1,18 @@
 <?php
-// $Id: filterbynodetype.module,v 1.1 2007/05/13 00:43:59 crell Exp $
+// $Id: filterbynodetype.module,v 1.1.2.1 2007/06/11 05:55:25 crell Exp $
 
 /**
  * Implementation of hook_menu
  */
-function filterbynodetype_menu($may_cache) {
-  $items = array();
-
-   if ($may_cache) {
-      // We can't put this under the existing filters menu, sadly, because the help text added 
-      // by the filters module looks all out of place on our page the.
-      $items[] = array(
-        'path' => '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,58 @@ 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'],
-      );
-      $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.
+          $formats[$element]['#default_value'] = $element;
+          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');
+        $form['body_field']['format']['collapsed'] = 0;
+      }
+      // 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.
     }
   }
 }
