? 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( - '
' . drupal_render($element[$flag_name]) . '
', - $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