Index: jquery.rating.js =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/fivestar/jquery.rating.js,v retrieving revision 1.2.2.32 diff -u -r1.2.2.32 jquery.rating.js --- jquery.rating.js 14 Jan 2008 02:53:13 -0000 1.2.2.32 +++ jquery.rating.js 12 Mar 2008 07:31:35 -0000 @@ -198,6 +198,7 @@ }, vote: { id: $("vote id", data).text(), + tag: $("vote tag", data).text(), type: $("vote type", data).text(), value: $("vote value", data).text() }, @@ -272,13 +273,14 @@ * voteResult.result.summary.user The textual description of the user's current vote. * voteResult.vote.id The id of the item the vote was placed on (such as the nid) * voteResult.vote.type The type of the item the vote was placed on (such as 'node') + * voteResult.vote.tag The multi-axis tag the vote was placed on (such as 'vote') * voteResult.vote.average The average of the new vote saved * voteResult.display.stars The type of star display we're using. Either 'average', 'user', or 'combo'. * voteResult.display.text The type of text display we're using. Either 'average', 'user', or 'combo'. */ function fivestarDefaultResult(voteResult) { // Update the summary text. - $('div.fivestar-summary-'+voteResult.vote.id).html(voteResult.result.summary[voteResult.display.text]); + $('div.fivestar-summary-'+voteResult.vote.id+'-'+voteResult.vote.tag).html(voteResult.result.summary[voteResult.display.text]); // If this is a combo display, update the average star display. if (voteResult.display.stars == 'combo') { $('div.fivestar-form-'+voteResult.vote.id).each(function() { Index: fivestar.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/fivestar/fivestar.module,v retrieving revision 1.2.2.73 diff -u -r1.2.2.73 fivestar.module --- fivestar.module 10 Mar 2008 06:24:07 -0000 1.2.2.73 +++ fivestar.module 12 Mar 2008 07:31:34 -0000 @@ -511,6 +511,8 @@ /** * Callback function for fivestar/vote path * @param type + * @param tag + * Mulit-axis tag to allow multiple votes per node. 'vote' is the most common. * A content-type to log the vote to. 'node' is the most common. * @param cid * A content id to log the vote to. This would be a node ID, a comment ID, etc. @@ -553,6 +555,7 @@ $output .= ''. $value .''; $output .= ''. $type .''; $output .= ''. $cid .''; + $output .= ''. $tag .''; $output .= ''; drupal_set_header("Content-Type: text/xml"); @@ -716,7 +719,7 @@ case 'below_static': $stars = variable_get('fivestar_stars_'. $node->type, 5); $node->content['fivestar_widget'] = array( - '#value' => fivestar_static('node', $node->nid, $node->type), + '#value' => fivestar_static('node', $node->nid, $tag, $node->type), '#weight' => $position == 'above_static' ? -10 : 50, ); break; @@ -751,8 +754,8 @@ } } -function fivestar_widget_form($node) { - return drupal_get_form('fivestar_form_node_'. $node->nid, 'node', $node->nid); +function fivestar_widget_form($node, $tag = 'vote') { + return drupal_get_form('fivestar_form_node_'. $node->nid .'_'. $tag, 'node', $node->nid, $tag); } /** @@ -763,7 +766,7 @@ function fivestar_forms() { $args = func_get_args(); if (strpos($args[0][0], 'fivestar_form') !== FALSE) { - if ($args[0][0] == 'fivestar_form_'. $args[0][1] .'_'. $args[0][2]) { + if ($args[0][0] == 'fivestar_form_'. $args[0][1] .'_'. $args[0][2] .'_'. $args[0][3]) { $forms[$args[0][0]] = array('callback' => 'fivestar_form'); return $forms; } @@ -775,7 +778,7 @@ * Note that this is not an implementation of hook_form(). We should probably * change the function to reflect that. */ -function fivestar_form($content_type, $content_id) { +function fivestar_form($content_type, $content_id, $tag) { global $user; if ($content_type == 'node') { @@ -787,10 +790,10 @@ } } - $current_avg = votingapi_get_voting_result($content_type, $content_id, 'percent', 'vote', 'average'); - $current_count = votingapi_get_voting_result($content_type, $content_id, 'percent', 'vote', 'count'); + $current_avg = votingapi_get_voting_result($content_type, $content_id, 'percent', $tag, 'average'); + $current_count = votingapi_get_voting_result($content_type, $content_id, 'percent', $tag, 'count'); if ($user->uid) { - $user_vote = votingapi_get_vote($content_type, $content_id, 'percent', 'vote', $user->uid); + $user_vote = votingapi_get_vote($content_type, $content_id, 'percent', $tag, $user->uid); } else { // If the user is anonymous, we never bother loading their existing votes. @@ -810,6 +813,7 @@ 'allow_clear' => variable_get('fivestar_unvote_'. $node->type, FALSE), 'style' => variable_get('fivestar_style_'. $node->type, 'average'), 'text' => variable_get('fivestar_text_'. $node->type, 'combo'), + 'tag' => $tag, 'content_type' => $content_type, 'content_id' => $content_id, 'autosubmit' => TRUE, @@ -821,12 +825,12 @@ return fivestar_custom_widget($values, $settings); } -function fivestar_static($content_type, $content_id, $node_type = NULL) { +function fivestar_static($content_type, $content_id, $tag = 'vote', $node_type = NULL) { global $user; - $current_avg = votingapi_get_voting_result($content_type, $content_id, 'percent', 'vote', 'average'); - $current_count = votingapi_get_voting_result($content_type, $content_id, 'percent', 'vote', 'count'); - $user_vote = $user->uid ? votingapi_get_vote($content_type, $content_id, 'percent', 'vote', $user->uid) : 0; + $current_avg = votingapi_get_voting_result($content_type, $content_id, 'percent', $tag, 'average'); + $current_count = votingapi_get_voting_result($content_type, $content_id, 'percent', $tag, 'count'); + $user_vote = $user->uid ? votingapi_get_vote($content_type, $content_id, 'percent', $tag, $user->uid) : 0; if ($content_type == 'node') { // Content type should always be passed to avoid this node load. @@ -890,7 +894,7 @@ $count_value = $current_count->value; } - $star_display = theme('fivestar_static', $star_value, $stars); + $star_display = theme('fivestar_static', $star_value, $stars, $tag); $text_display = $text_display == 'none' ? NULL : theme('fivestar_summary', $user_value, $average_value, $count_value, $stars); return theme('fivestar_static_element', $star_display, $title, $text_display); @@ -926,12 +930,13 @@ '#vote_count' => $values['count'], '#vote_average' => $values['average'], '#auto_submit' => isset($settings['autosubmit']) ? $settings['autosubmit'] : TRUE, - '#auto_submit_path' => 'fivestar/vote/'. $settings['content_type'] .'/'. $settings['content_id'], + '#auto_submit_path' => 'fivestar/vote/'. $settings['tag'] .'/'. $settings['content_type'] .'/'. $settings['content_id'], '#allow_clear' => $settings['allow_clear'], '#content_id' => $settings['content_id'], '#required' => isset($settings['required']) ? $settings['required'] : FALSE, '#labels_enable' => isset($settings['labels_enable']) ? $settings['labels_enable'] : TRUE, '#labels' => isset($settings['labels']) ? $settings['labels'] : NULL, + '#tag' => $settings['tag'], ); $form['destination'] = array( @@ -986,7 +991,7 @@ $form['vote']['#default_value'] = $values['user']; $form['vote']['#attributes']['class'] .= ' fivestar-combo-stars'; $form['#attributes']['class'] .= ' fivestar-combo-stars'; - $static_average = theme('fivestar_static', $values['average'], $settings['stars']); + $static_average = theme('fivestar_static', $values['average'], $settings['stars'], $settings['tag']); $form['average'] = array( '#type' => 'markup', '#value' => theme('fivestar_static_element', $static_average, $settings['title'] !== FALSE ? t('Average') : NULL), @@ -1015,9 +1020,9 @@ * Submit handler for the above form (non-javascript version). */ function fivestar_form_submit($form_id, $form_values) { - if ($form_id == 'fivestar_form_'. $form_values['content_type'] .'_'. $form_values['content_id']) { + if ($form_id == 'fivestar_form_'. $form_values['content_type'] .'_'. $form_values['content_id'] .'_'. $form_values['vote']['#tag']) { // Cast the vote. - _fivestar_cast_vote($form_values['content_type'], $form_values['content_id'], $form_values['vote']); + _fivestar_cast_vote($form_values['content_type'], $form_values['content_id'], $form_values['vote'], $form_values['vote']['#tag']); votingapi_recalculate_results($form_values['content_type'], $form_values['content_id']); // Set a message that the vote was received. @@ -1092,7 +1097,7 @@ $output .= drupal_render($form); // Only print out the summary if text is being displayed or using rollover text. if ($form['#parameters'][2]['text'] != 'none' || !empty($form['#parameters'][2]['labels'])) { - $output .= '
'. $description .'
'; + $output .= '
'. $description .'
'; } $output .= ''; return $output; @@ -1106,16 +1111,18 @@ * The desired rating to display out of 100 (i.e. 80 is 4 out of 5 stars) * @param $stars * The total number of stars this rating is out of + * @param $tag + * Allows multiple ratings per node * @return * A themed HTML string representing the star widget * */ -function theme_fivestar_static($rating, $stars = 5) { +function theme_fivestar_static($rating, $stars = 5, $tag = 'vote') { // Add necessary CSS. fivestar_add_css(); $output = ''; - $output .= '
'; + $output .= '
'; $numeric_rating = $rating/(100/$stars); for ($n=1; $n <= $stars; $n++) { $star_value = ceil((100/$stars) * $n);