Index: voting_actions.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/voting_actions/voting_actions.module,v retrieving revision 1.15.2.1 diff -u -r1.15.2.1 voting_actions.module --- voting_actions.module 17 Apr 2007 21:59:36 -0000 1.15.2.1 +++ voting_actions.module 20 Nov 2007 15:59:54 -0000 @@ -1,10 +1,12 @@ "; $content = votingapi_load_content($content_id, $content_type); - if ($content == NULL) { + if ($content_type != 'node' || $content == NULL) { return; } $context = array( @@ -101,7 +104,8 @@ // Other helper functions build the actions cache from the database. function voting_actions_process_results($context) { - if (($data = cache_get('voting_actions_cache')) == FALSE) { +//print "inside votingAPIProcessResult
"; +if (($data = cache_get('voting_actions_cache')) == FALSE) { $action_sets = voting_actions_get_sets(); } elseif (($action_sets = unserialize($data->data)) == FALSE) { @@ -109,10 +113,10 @@ } if (is_array($action_sets)) { foreach ($action_sets as $action_set) { - if (!empty($action_set['status'])) { + if (!empty($action_set['status']) && $action_set['status'] == VOTING_ACTIONS_STATE_ENABLED) { $actions = array(); - if (_voting_actions_process_set($context, $action_set, $actions) == TRUE) { - actions_do($actions, $content); + if (_voting_actions_process_set($context, $action_set, $actions) === TRUE) { + actions_do($actions, $context['content']); } } } @@ -124,6 +128,7 @@ * Internal functions used to evaluate sets of actions, and individual conditions. */ function _voting_actions_process_set($context = array(), $action_set = array(), &$actions) { +//print "inside votingAPIProcessSet
"; // a little safety code to catch malformed sets. $action_set += _voting_actions_populate_set_defaults(); @@ -156,23 +161,23 @@ if ($set_result == TRUE) { // Now check sub-actions. - foreach ($action_set['subsets'] as $subset) { + foreach ($action_set['sets'] as $subset) { // check the required flag of the subset. if it is, evaluate it. if ($subset['required'] == TRUE) { $set_result = $set_result && _voting_actions_process_set($context, $subset, $actions); - if ($set_result == FALSE) { + if ($set_result === FALSE) { return FALSE; } } } - if ($set_result == TRUE) { + if ($set_result === TRUE) { // It's still true after executing required subsets. Add the actions, then process optional subsets. foreach ($action_set['actions'] as $action) { $actions[] = $action; } - foreach ($action_set['subsets'] as $subset) { + foreach ($action_set['sets'] as $subset) { // now handle the non-required subsets if ($subset['required'] == FALSE) { _voting_actions_process_set($context, $subset, $actions); @@ -185,12 +190,17 @@ } function _voting_actions_process_condition($condition = array(), $context = array()) { +//print "inside VotingActionProcessCondition
"; $condition_cache = voting_actions_get_conditions(); if ($condition_definition = $condition_cache[$condition['name']]) { $function = $condition_definition['eval_handler']; +//print $function; if (function_exists($function)) { return $function($context, $condition); } + else{ + print "Function Does not Exists?
"; + } } return FALSE; @@ -288,7 +298,7 @@ } $set['status'] = voting_actions_get_status($set['name']); - $set['subsets'] = _voting_actions_load_sets_from_db($vasid); + $set['sets'] = _voting_actions_load_sets_from_db($set['vasid']); $sets[$set['name']] = $set; } @@ -305,9 +315,7 @@ db_query($sql, $vasid, $set['name'], $set['parent'], $set['source'], $set['description'], $set['condition_mask'], $set['required'], $set['weight']); - - voting_actions_set_status($set['name'], $set['status']); - + if (is_array($set['conditions'])) { foreach ($set['conditions'] as $condition) { $condition['vasid'] = $vasid; @@ -320,13 +328,6 @@ db_query("INSERT INTO {voting_actions_action} (vasid, aid) VALUES (%d, '%s')", $vasid, $action); } } - - if (is_array($set['sets'])) { - foreach ($set['sets'] as $sname => $subset) { - $subset['parent_name'] = $name; - _voting_actions_insert_set($subset); - } - } } function _voting_actions_insert_condition($condition) { @@ -350,17 +351,23 @@ $set['source'], $set['description'], $set['condition_mask'], $set['required'], $set['weight'], $set['vasid']); - voting_actions_set_status($set['name'], $set['status']); - if (is_array($set['conditions'])) { + // First we'll loop through and delete any that are + // in the db but not in the new version of the set. + $current_sets = array(); + $current_sets['replacements'][] = $set['vasid']; foreach ($set['conditions'] as $condition) { if (isset($condition['vacid'])) { - if (!empty($condition['deleted'])) { - db_query("DELETE FROM {voting_actions_condition} WHERE vacid = %d", $set['vacid']); - } - else { - _voting_actions_update_condition($condition); - } + $current_sets['wildcards'][] = '%d'; + $current_sets['replacements'][] = $condition['vacid']; + } + } + db_query("DELETE FROM {voting_actions_condition} WHERE vasid = %d AND vacid NOT IN (". implode(',', $current_sets['wildcards']) .")", $current_sets['replacements']); + + foreach ($set['conditions'] as $condition) { + $condition['vasid'] = $set['vasid']; + if (isset($condition['vacid'])) { + _voting_actions_update_condition($condition); } else { _voting_actions_insert_condition($condition); @@ -374,24 +381,7 @@ db_query("DELETE FROM {voting_actions_action} WHERE vasid = %d", $set['vasid']); if (is_array($set['actions'])) { foreach ($set['actions'] as $action) { - db_query("INSERT INTO {voting_actions_action} (parent_name, aid) VALUES ('%s', %d)", $name, $set['vasid']); - } - } - - if (is_array($set['sets'])) { - foreach ($set['sets'] as $subset) { - if (isset($subset['vasid'])) { - _voting_actions_update_set($subset); - } - else { - _voting_actions_insert_set($subset); - } - } - } - - if (is_array($set['deleted_sets'])) { - foreach ($set['deleted_sets'] as $subset) { - _voting_actions_delete_set($subset); + db_query("INSERT INTO {voting_actions_action} (vasid, aid) VALUES (%d, '%s')", $set['vasid'], $action); } } } @@ -415,7 +405,6 @@ db_query("DELETE FROM {voting_actions_condition} WHERE vasid = %d", $set['vasid']); db_query("DELETE FROM {voting_actions_action} WHERE vasid = %d", $set['vasid']); db_query("DELETE FROM {voting_actions_set} WHERE vasid = %d", $set['vasid']); - db_query("DELETE FROM {voting_actions_status} WHERE name = %d", $set['name']); } function _voting_actions_validate_set($set) { @@ -454,17 +443,17 @@ function _voting_actions_validate_condition($condition) { $errors = array(); if (!is_array($condition)) { - $errors[] = "The condition is not an array!"; + $errors[] = t("The condition is not an array!"); return $errors; } if (!isset($condition['eval_handler'])) { - $errors[] = "The condition has no handler."; + $errors[] = t("The condition has no handler."); } if (!function_exists($condition['eval_handler'])) { $handler = $condition['eval_handler']; - $errors[] = "The condition has an invalid handler ($eval_handler)."; + $errors[] = t("The condition has an invalid handler (@handler).", array('@handler' => $eval_handler)); } return $errors; @@ -478,6 +467,6 @@ 'weight' => 0, 'conditions' => array(), 'actions' => array(), - 'subsets' => array(), + 'sets' => array(), ); } \ No newline at end of file Index: voting_actions.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/voting_actions/voting_actions.inc,v retrieving revision 1.7.2.1 diff -u -r1.7.2.1 voting_actions.inc --- voting_actions.inc 17 Apr 2007 21:59:36 -0000 1.7.2.1 +++ voting_actions.inc 20 Nov 2007 15:59:36 -0000 @@ -1,11 +1,13 @@ t('Individual vote'), + 'name' => t('Any individual vote'), 'description' => t('Return true if any item in the collection of cast votes matches these criteria.'), 'eval_handler' => 'voting_actions_individual_vote_handler', 'edit_handler' => 'voting_actions_vote_form', @@ -19,7 +21,7 @@ ); $condition['vote_result'] = array( - 'name' => t('Vote result'), + 'name' => t('Any vote result'), 'description' => t('Return true if a vote result matches these criteria.'), 'eval_handler' => 'voting_actions_vote_result_handler', 'edit_handler' => 'voting_actions_vote_result_form', @@ -45,10 +47,10 @@ function _voting_actions_string_operators() { return array( '==' => t('Is'), + '!=' => t('Is not'), 'contains' => t('Contains'), 'excludes' => t('Does not contain'), 'starts' => t('Stars with'), - 'ends' => t('Ends with'), ); } @@ -98,8 +100,13 @@ } function voting_actions_all_votes_handler($context, $condition) { +$i=0; +//foreach ($context['votes'] as $vote){ +//$i++; +//} +//print "
votes:".$i; foreach ($context['votes'] as $vote) { - if (!empty($condition['data']['value_type'])) { +if (!empty($condition['data']['value_type'])) { if ($condition['data']['value_type'] != $vote->value_type) { continue; } @@ -109,14 +116,18 @@ continue; } } - if (_voting_actions_compare($vote->value, $condition['data']['operator'], $condition['data']['value']) == FALSE) { - return FALSE; + $i+=$vote->value; } - } - return TRUE; + if (_voting_actions_compare($i, $condition['data']['operator'], $condition['data']['value']) == FALSE) { + return FALSE; + } + return TRUE; } function voting_actions_vote_form($values = array()) { + if ($values === NULL) { + $values = array(); + } $values += array( 'value_type' => '', 'tag' => '', @@ -126,13 +137,13 @@ $form['value_type'] = array( '#type' => 'select', - '#options' => _voting_actions_table_values('value_type', 'vote', array('' => t('(Ignore)'), 'percent' => t('Percent'), 'points' => t('Points'))), + '#options' => _voting_actions_table_values('value_type', 'vote', array('' => t('--'), 'percent' => t('Percent'), 'points' => t('Points'))), '#default_value' => $values['value_type'], ); $form['tag'] = array( '#type' => 'select', - '#options' => _voting_actions_table_values('tag', 'vote', array('' => t('(Ignore)'), 'percent' => t('Vote'))), + '#options' => _voting_actions_table_values('tag', 'vote', array('' => t('--'), 'vote' => t('Vote'))), '#default_value' => $values['tag'], ); @@ -145,6 +156,7 @@ $form['value'] = array( '#type' => 'textfield', '#default_value' => $values['value'], + '#size' => 5, ); return $form; } @@ -176,7 +188,10 @@ return TRUE; } -function voting_actions_vote_results_form($values = array()) { +function voting_actions_vote_result_form($values = array()) { + if ($values === NULL) { + $values = array(); + } $values += array( 'value_type' => '', 'tag' => '', @@ -187,19 +202,19 @@ $form['value_type'] = array( '#type' => 'select', - '#options' => _voting_actions_table_values('value_type', 'cache', array('' => t('(Ignore)'), 'percent' => t('Percent'), 'points' => t('Points'))), + '#options' => _voting_actions_table_values('value_type', 'cache', array('' => t('--'), 'percent' => t('Percent'), 'points' => t('Points'))), '#default_value' => $values['value_type'], ); $form['tag'] = array( '#type' => 'select', - '#options' => _voting_actions_table_values('tag', 'cache', array('' => t('(Ignore)'), 'percent' => t('Vote'))), + '#options' => _voting_actions_table_values('tag', 'cache', array('' => t('--'), 'vote' => t('Vote'))), '#default_value' => $values['tag'], ); $form['function'] = array( '#type' => 'select', - '#options' => _voting_actions_table_values('function', 'cache', array('' => t('(Ignore)'), 'average' => t('Average'), 'count' => t('Count'))), + '#options' => _voting_actions_table_values('function', 'cache', array('' => t('--'), 'average' => t('Average'), 'count' => t('Count'))), '#default_value' => $values['function'], ); @@ -212,6 +227,7 @@ $form['value'] = array( '#type' => 'textfield', '#default_value' => $values['value'], + '#size' => 5, ); return $form; } @@ -219,12 +235,45 @@ // Returns true if a specific property of the content object matches the criteria. function voting_actions_content_property_handler($context, $condition) { - if (!empty($condition['data']['property']) && !empty($context['contet']->$condition['data']['property'])) { - return _voting_actions_compare($context['content']->$condition['data']['property'], $condition['data']['operator'], $condition['data']['value']); + if (($prop = $condition['data']['property']) && ($content = $context['content'])) { + return _voting_actions_compare($content->$prop, $condition['data']['operator'], $condition['data']['value']); } return FALSE; } +function voting_actions_content_property_form($values = array()) { + if ($values === NULL) { + $values = array(); + } + $values += array( + 'property' => '', + 'operator' => '', + 'value' => '', + ); + + $form['property'] = array( + '#prefix' => '$node->', + '#type' => 'textfield', + '#default_value' => $values['property'], + '#size' => 10, + ); + + $options = array_merge(_voting_actions_string_operators(), _voting_actions_number_operators()); + + $form['operator'] = array( + '#type' => 'select', + '#options' => $options, + '#default_value' => $values['operator'], + ); + + $form['value'] = array( + '#type' => 'textfield', + '#default_value' => $values['value'], + '#size' => 5, + ); + return $form; +} + // Returns true if the author's content has the specified permission. function voting_actions_content_author_perm_handler($context, $condition) { if (!empty($context['content']->uid)) { @@ -234,6 +283,16 @@ return FALSE; } +function voting_actions_content_author_perm_form($values = array()) { + $perms = module_invoke_all('perm'); + $form['perm'] = array( + '#type' => 'select', + '#options' => $perms, + '#default_value' => $values['perm'], + ); + return $form; +} + function _voting_actions_table_values($field = 'tag', $table = 'vote', $force = array()) { static $cached; if (!isset($cached[$table][$field])) { @@ -259,6 +318,7 @@ return ($left != $right); break; case "<": + //print "in less
"; return ($left < $right); break; case "<=": @@ -268,6 +328,7 @@ return ($left >= $right); break; case ">": + //print "in greater
"."left".$left."right".$right; return ($left > $right); break; case "contains": @@ -276,13 +337,25 @@ return (isset($tmp[$right])); } else { + return (strrpos($left, $right) !== FALSE); } break; case "excludes": + if (is_array($left)) { + $tmp = array_flip($left); + return (!isset($tmp[$right])); + } + else { + return (strrpos($left, $right) === FALSE); + } break; case "starts": - break; - case "ends": + if (is_array($left)) { + return ($tmp[0] == $right); + } + else { + return (strrpos($left, $right) === 0); + } break; } return $default;