diff --git a/modules/data.eval.inc b/modules/data.eval.inc index 946cb23..668d850 100644 --- a/modules/data.eval.inc +++ b/modules/data.eval.inc @@ -277,6 +277,20 @@ function rules_condition_data_list_contains($list, $item, $settings, $state) { } /** +* Condition: List has count. +*/ +function rules_condition_list_has_count($list, $value, $op = '==') { + switch ($op) { + case '==': + return count($list) == $value; + case '<'; + return count($list) < $value; + case '>'; + return count($list) > $value; + } +} + +/** * Condition: Data value is empty. */ function rules_condition_data_is_empty($data) { diff --git a/modules/data.rules.inc b/modules/data.rules.inc index 1676976..c53cfe6 100644 --- a/modules/data.rules.inc +++ b/modules/data.rules.inc @@ -475,6 +475,32 @@ function rules_data_condition_info() { 'form_alter' => 'rules_data_list_form_alter', ), ), + 'list_has_count' => array( + 'label' => t('List has count'), + 'parameter' => array( + 'list' => array( + 'type' => 'list', + 'label' => t('List to check'), + 'description' => t('A multi value data element to have its count compared, specified by using a data selector, e.g. "node:author:name".'), + ), + 'value' => array( + 'type' => 'integer', + 'label' => t('Count'), + 'description' => t('The count to compare the data count with.'), + ), + 'op' => array( + 'type' => 'text', + 'label' => t('Operator'), + 'description' => t('The comparison operator.'), + 'optional' => TRUE, + 'default value' => '==', + 'options list' => 'rules_condition_list_has_count_operator_options', + 'restriction' => 'input', + ), + ), + 'group' => t('Data'), + 'base' => 'rules_condition_list_has_count', + ), 'text_matches' => array( 'label' => t('Text comparison'), 'parameter' => array( @@ -612,5 +638,16 @@ function rules_data_selector_options_list(RulesAbstractPlugin $element) { } /** + * Options list callback for condition list_has_count. + */ +function rules_condition_list_has_count_operator_options() { + return array( + '==' => t('equals'), + '<' => t('is lower than'), + '>' => t('is greater than'), + ); +} + +/** * @} */