Index: rules_forms/rules_forms.admin.inc
===================================================================
--- rules_forms/rules_forms.admin.inc	(revision 0)
+++ rules_forms/rules_forms.admin.inc	(revision 0)
@@ -0,0 +1,44 @@
+<?php
+// $Id$
+
+
+/**
+ * @file
+ * Implements forms events management screen.
+ */
+ 
+/**
+ * Defines the forms events settings form
+ */
+function rules_forms_admin_events(&$form_state) {
+  $form = array();
+  // TODO: load $form_ids from whole site
+  $form_ids = array('story_node_form');
+  
+  $form['form_events'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Form IDs that will provide events'),
+    '#default_value' => variable_get('rules_forms_events', array()),
+    '#options' => drupal_map_assoc($form_ids),
+    '#description' => t('Check form IDs that will fire events for usage with Rules.'),
+  );
+  $form['enable_form_id_message'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Enable form ID hint message'),
+    '#default_value' => variable_get('rules_forms_display_id', 0),
+    '#description' => t('If checked, there will be a message on each form to indicate the form ID. Only visible for Rules admins.'),
+  );
+  $form['submit'] = array('#type' => 'submit', '#value' => t('Save'));
+  return $form;
+}
+
+/**
+ * Submit handler
+ */
+function rules_forms_admin_events_submit($form_id, $form_values) {
+  $form_events = $form_values['values']['form_events'];
+  variable_set('rules_forms_events', $form_events);
+  $form_id_msg = $form_values['values']['enable_form_id_message'];
+  variable_set('rules_forms_display_id', $form_id_msg);
+  drupal_set_message(t('The settings have been saved.'));
+}
\ No newline at end of file
Index: rules_forms/rules_forms.rules.inc
===================================================================
--- rules_forms/rules_forms.rules.inc	(revision 0)
+++ rules_forms/rules_forms.rules.inc	(revision 0)
@@ -0,0 +1,83 @@
+<?php
+// $Id$
+
+
+/**
+ * @file
+ * Rules integration to provide form support
+ *
+ * @addtogroup rules
+ * @{
+ */
+
+/**
+ * Implementation of hook_rules_event_info().
+ */
+function rules_forms_rules_event_info() {
+  $form_events = variable_get('rules_forms_events', array());
+  $events = array();
+  foreach ($form_events as $form_id => $value) {
+    $events[$form_id .'_form_built'] = array(
+      'label' => t('@form is being built', array('@form' => $form_id)),
+      'module' => 'Forms',
+      'arguments' => rules_forms_events_arguments(t('form built')),
+    );
+  }
+  return $events;
+}
+
+/**
+ * Returns some arguments suitable for hook form alter.
+ */
+function rules_forms_events_arguments($form_label) {
+  return array(
+    'form' => array(
+      'type' => 'form',
+      'label' => $form_label,
+    ),
+    'form_state' => array(
+      'type' => 'form_state',
+      'label' => $form_label .' state',
+    ),
+    'form_id' => array(
+      'type' => 'string',
+      'label' => t('Form ID'),
+    ),
+  ) + rules_events_global_user_argument();
+}
+
+/**
+ * Implementation of hook_rules_data_type_info().
+ */
+function rules_forms_rules_data_type_info() {
+  return array(
+    'form' => array(
+      'label' => t('form'),
+      'class' => 'rules_data_type_form',
+      'savable' => FALSE,
+      'identifiable' => FALSE,
+      'module' => 'Forms',
+    ),
+    'form_state' => array(
+      'label' => t('form_state'),
+      'class' => 'rules_data_type_form_state',
+      'savable' => FALSE,
+      'identifiable' => FALSE,
+      'module' => 'Forms',
+    ),
+  );
+}
+
+/**
+ * Defines the form data type.
+ */
+class rules_data_type_form extends rules_data_type {}
+
+/**
+ * Defines the form_state data type.
+ */
+class rules_data_type_form_state extends rules_data_type {}
+
+/**
+ * @}
+ */
\ No newline at end of file
Index: rules_forms/rules_forms.module
===================================================================
--- rules_forms/rules_forms.module	(revision 0)
+++ rules_forms/rules_forms.module	(revision 0)
@@ -0,0 +1,54 @@
+<?php
+// $Id$
+
+
+/**
+ * @file
+ * Rules forms module.
+ */
+
+// Defines paths of the admin interface
+define('RULES_ADMIN_FORMS_PATH', RULES_ADMIN_PATH .'/forms');
+
+
+/**
+ * Implementation of hook_help().
+ */
+function rules_forms_help($path, $arg) {
+  if ($path === RULES_ADMIN_FORMS_PATH) {
+    return '<p>'. t('Overview of all forms on the site that can be enabled to trigger form events.') .'</p>';
+  }
+}
+
+/**
+ * Implementation of hook_menu().
+ */
+function rules_forms_menu() {
+  $items = array();
+  $items[RULES_ADMIN_FORMS_PATH] = array(
+    'title' => 'Form events',
+    'description' => 'Configure Rules forms events.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('rules_forms_admin_events'),
+    'access arguments' => array('administer rules'),
+    'type' => MENU_NORMAL_ITEM,
+    'weight' => 6,
+    'file' => 'rules_forms.admin.inc',
+  );
+  return $items;
+}
+
+/**
+ * Implementation of hook_form_alter().
+ */
+function rules_forms_form_alter($form, &$form_state, $form_id) {
+  $form_events = variable_get('rules_forms_events', array());
+  // Fire event if form is enabled
+  if (in_array($form_id, $form_events)) {
+    rules_invoke_event($form_id .'_form_built', $form, $form_state, $form_id);
+  }
+  // Display form ID message if enabled for Rules admins
+  if (user_access('administer rules') && variable_get('rules_forms_display_id', 0)) {
+    drupal_set_message(t('Form ID: %id', array('%id' => $form_id)));
+  }
+}
\ No newline at end of file
Index: rules_forms/rules_forms.info
===================================================================
--- rules_forms/rules_forms.info	(revision 0)
+++ rules_forms/rules_forms.info	(revision 0)
@@ -0,0 +1,6 @@
+; $Id$
+name = Rules Forms support
+description = Provides events, conditions and actions for forms.
+dependencies[] = rules
+package = Rules
+core = 6.x
\ No newline at end of file
