? flag_rules_flag_as_argument_4.patch
Index: flag.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flag/Attic/flag.module,v
retrieving revision 1.11.2.70
diff -u -p -r1.11.2.70 flag.module
--- flag.module	17 Mar 2009 02:07:34 -0000	1.11.2.70
+++ flag.module	18 Mar 2009 08:18:25 -0000
@@ -608,9 +608,6 @@ function flag_theme() {
     'flag_admin_page' => array(
       'arguments' => array('flags' => NULL, 'default_flags' => NULL),
     ),
-    'flag_rules_radios' => array(
-      'arguments' => array(),
-    ),
   );
 }
 
Index: includes/flag.rules.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flag/includes/Attic/flag.rules.inc,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 flag.rules.inc
--- includes/flag.rules.inc	14 Mar 2009 06:06:14 -0000	1.1.2.1
+++ includes/flag.rules.inc	18 Mar 2009 08:18:25 -0000
@@ -17,8 +17,7 @@ function flag_rules_data_type_info() {
       'class' => 'flag_rules_data_type',
       'savable' => TRUE,
       'identifiable' => TRUE,
-      'use_input_form' => TRUE,
-      'module' => 'Node',
+      'module' => 'Flag',
     ),
   );
 }
@@ -43,35 +42,6 @@ class flag_rules_data_type extends rules
     $flag = &$this->get();
     return $flag->name;
   }
-
-  /**
-   * Returns radios for selecting a flag of the type given in 
-   * $info['flag_type'].
-   */
-  function get_default_input_form($info, $value) {
-    $options = _flag_rules_flags_options(isset($info['flag_type']) ? $info['flag_type'] : NULL);
-    $form = array(
-      '#type' => 'radios',
-      '#title' => $info['label'],
-      '#options' => $options,
-      '#required' => TRUE,
-      '#disabled' => !$options,
-      '#default_value' =>  isset($value) ? $value : NULL,
-      '#theme' => 'flag_rules_radios',
-      '#printed' => TRUE, //don't use the elements type theme function
-    );
-    if (!$options) {
-      $form['#description'] = t('Error: There is no suiting flag available.');
-    }
-    return $form;
-  }
-
-  function check_value($info, $value) {
-    if ($flag = flag_get_flag($value)) {
-      return $flag;
-    }
-    rules_log(t('The flag %name does not exist any more.', array('%name' => $value)));
-  }
 }
 
 /**
@@ -153,13 +123,24 @@ function flag_rules_action_info() {
       ),
       'module' => 'Flag',
     ),
+    'flag_rules_action_load_flag' => array(
+      'label' => t('Load a flag'),
+      'new variables' => array(
+        'flag' => array(
+          'type' => 'flag',
+          'label' => t('Loaded flag'),
+        ),        
+      ),
+      'eval input' => array('flag_name'),      
+      'module' => 'Flag',
+    ),
   );
   foreach (flag_get_types() as $type) {
     $args = array(
       'flag' => array(
         'type' => 'flag',
         'label' => t('Flag'),
-        'flag_type' => $type,
+        'description' => t('The flag in which the action will take place.'),    
       ),
     );
     $flag = flag_create_handler($type);
@@ -203,14 +184,20 @@ function flag_rules_action_info() {
  * Base action implementation: Flag.
  */
 function flag_rules_action_flag($flag, $object, $flagging_user, $settings) {
-  $flag->flag('flag', $flag->get_content_id($object), $flagging_user, !$settings['permission_check']);
+  // Make sure the flag is of the same type as the object.
+  if ($flag->content_type == $settings['#argument map']['object']) {
+    $flag->flag('flag', $flag->get_content_id($object), $flagging_user, !$settings['permission_check']);
+  }
 }
 
 /**
  * Base action implementation: Unflag.
  */
 function flag_rules_action_unflag($flag, $object, $flagging_user, $settings) {
-  $flag->flag('unflag', $flag->get_content_id($object), $flagging_user, !$settings['permission_check']);
+  // Make sure the flag is of the same type as the object.
+  if ($flag->content_type == $settings['#argument map']['object']) {  
+    $flag->flag('unflag', $flag->get_content_id($object), $flagging_user, !$settings['permission_check']);
+  }
 }
 
 /**
@@ -228,6 +215,17 @@ function flag_rules_action_trim($flag, $
 }
 
 /**
+ * Base action implementation: Load flag.
+ */
+function flag_rules_action_load_flag($settings) {
+  $flags = flag_get_flags();
+  // If the flag exists then return it as a new argument.
+  if (!empty($flags[$settings['flag_name']])) {
+    return array('flag' => $flags[$settings['flag_name']]);
+  }  
+}
+
+/**
  * Implementation of hook_rules_condition_info().
  */
 function flag_rules_condition_info() {
@@ -237,7 +235,7 @@ function flag_rules_condition_info() {
       'flag' => array(
         'type' => 'flag',
         'label' => t('Flag'),
-        'flag_type' => $type,
+        'description' => t('The flag in which the condition will take place.'),    
       ),
     );
     $flag = flag_create_handler($type);
Index: includes/flag.rules_forms.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flag/includes/Attic/flag.rules_forms.inc,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 flag.rules_forms.inc
--- includes/flag.rules_forms.inc	14 Mar 2009 06:06:14 -0000	1.1.2.1
+++ includes/flag.rules_forms.inc	18 Mar 2009 08:18:26 -0000
@@ -10,6 +10,20 @@
  * Actions forms.
  ******************************************************************************/
 
+/**
+ * Form configuration; Load flag action.
+ */
+function flag_rules_action_load_flag_form($settings, &$form, &$form_state) {
+  $settings += array('flag_name' => '');
+  $form['settings']['flag_name'] = array(
+    '#title' => t('Flag name'),
+    '#description' => t('Enter the achine-name for the flag that should be loaded. It may be up to 32 characters long and my only contain lowercase letters, underscores, and numbers.'),
+    '#type' => 'textfield',
+    '#default_value' => $settings['flag_name'],
+    '#required' => TRUE,  
+  );
+}
+
 function flag_rules_action_flag_form($settings, &$form, &$form_state) {
   $settings += array('permission_check' => FALSE);
   $form['settings']['permission_check'] = array(
@@ -20,8 +34,7 @@ function flag_rules_action_flag_form($se
 }
 
 function flag_rules_action_flag_label($settings, $argument_labels, $element) {
-  $flag = rules_get_element_variable($element, 'flag');
-  return t('Flag @object, under "@flag-title"', $argument_labels + array('@flag-title' => $flag->get_title()));
+  return t('Flag @object', $argument_labels);
 }
 
 function flag_rules_action_unflag_form($settings, &$form, &$form_state) {
@@ -34,8 +47,7 @@ function flag_rules_action_unflag_form($
 }
 
 function flag_rules_action_unflag_label($settings, $argument_labels, $element) {
-  $flag = rules_get_element_variable($element, 'flag');
-  return t('Unflag @object, under "@flag-title"', $argument_labels + array('@flag-title' => $flag->get_title()));
+  return t('Unflag @object', $argument_labels);
 }
 
 function flag_rules_action_trim_form($settings, &$form, &$form_state) {
@@ -45,7 +57,7 @@ function flag_rules_action_trim_form($se
 
 function flag_rules_action_trim_label($settings, $argument_labels, $element) {
   $flag = rules_get_element_variable($element, 'flag');
-  return t('Trim "@flag-title" at @size', array('@flag-title' => $flag->get_title(), '@size' => $settings['cutoff_size']));
+  return t('Trim flag at @size', array('@size' => $settings['cutoff_size']));
 }
 
 function flag_rules_action_trim_help() {
@@ -84,45 +96,9 @@ function flag_rules_condition_threshold_
 
 function flag_rules_condition_threshold_label($settings, $argument_labels, $element) {
   $flag = rules_get_element_variable($element, 'flag');
-  return t('Flagging count !op @number, for @object, under "@flag-title"', array('@flag-title' => $flag->get_title(), '!op' => $settings['operator'], '@number' => $settings['number']) + $argument_labels);
+  return t('Flagging count !op @number, for @object', array('!op' => $settings['operator'], '@number' => $settings['number']) + $argument_labels);
 }
 
 function flag_rules_condition_flagged_label($settings, $argument_labels, $element) {
-  $flag = rules_get_element_variable($element, 'flag');
-  return t('Flag "@flag-title" is flagged, for @object', array('@flag-title' => $flag->get_title()) + $argument_labels);
-}
-
-/*******************************************************************************
- * Form utilities for the default input form of flags.
- ******************************************************************************/
-
-function theme_flag_rules_radios($element) {
-  
-  if (!empty($element['#disabled'])) {
-    drupal_set_message($element['#description'], 'error');
-  }
-
-  $headers = array(t('Flag:'), t('The flag type'), t('Is the flag global?'));
-  $rows = array();
-  foreach (element_children($element) as $flag_name) {
-    $flag = flag_get_flag($flag_name);
-    $rows[] = array(
-      '<div class="flag-radio">' . drupal_render($element[$flag_name]) . '</div>',
-      $flag->content_type,
-      $flag->global ? t('Yes') : t('No'),
-    );
-  }
-  return theme('table', $headers, $rows);
-}
-
-function _flag_rules_flags_options($flag_type = NULL) {
-  $flags = flag_get_flags();
-  $options = array();
-  foreach ($flags as $flag) {
-    if (!isset($flag_type) || $flag->content_type == $flag_type) {
-      $options[$flag->name] = $flag->get_title();
-    }
-  }
-  return $options;
-}
-
+  return t('@object is flagged', $argument_labels);
+}
\ No newline at end of file
