You are here

function likebtn_get_count in Like Button 7

Same name and namespace in other branches
  1. 8.2 likebtn.module \likebtn_get_count()

Get likes and dislikes count for the node.

1 call to likebtn_get_count()
likebtn_likes_page in ./likebtn.likes.inc
Generate the likes page.

File

./likebtn.module, line 1427
Implements the LikeBtn module.

Code

function likebtn_get_count($entity, $entity_type) {
  list($entity_id, $entity_revision_id, $bundle) = entity_extract_ids($entity_type, $entity);
  try {
    $query = db_select('votingapi_vote', 'vv')
      ->fields('vv')
      ->condition('vv.entity_type', $entity_type)
      ->condition('vv.entity_id', $entity_id)
      ->condition('vv.value_type', 'points')
      ->condition('vv.tag', LIKEBTN_VOTING_TAG)
      ->orderBy('vv.vote_source', 'ASC');
    $votingapi_results = $query
      ->execute();
  } catch (Exception $e) {
  }

  // Display a table with like counts per button.
  $rows = array();

  // Like and dislike rows has been found.
  $records_by_source = array();
  while (1) {
    $record = $votingapi_results
      ->fetchAssoc();

    // Records with likes and dislikes go one after another.
    if (!count($records_by_source) || $record['vote_source'] == $records_by_source[count($records_by_source) - 1]['vote_source']) {

      // Do nothing.
    }
    elseif (count($records_by_source)) {
      $first_record = $records_by_source[0];
      $second_record = array(
        'value' => 0,
      );
      if (!empty($records_by_source[1])) {
        $second_record = $records_by_source[1];
      }
      if ($first_record['value'] >= 0 && $second_record['value'] <= 0) {
        $likes = $first_record['value'];
        $dislikes = abs($second_record['value']);
      }
      else {
        $likes = $second_record['value'];
        $dislikes = abs($first_record['value']);
      }
      $likes_minus_dislikes = $likes - $dislikes;
      $rows[] = array(
        'button' => _likebtn_get_name($first_record['vote_source']),
        'likes' => $likes,
        'dislikes' => $dislikes,
        'likes_minus_dislikes' => $likes_minus_dislikes,
      );
      $records_by_source = array();
    }
    $records_by_source[] = $record;
    if (!$record) {
      break;
    }
  }
  return $rows;
}