public static function rebuildRating($doc_id) { $db = JFactory::getDbo(); $params = self::getParams(null, $doc_id); $onlyCalculateLastRating = $params->get('only_calculate_last_rating', 0); if ($onlyCalculateLastRating == 1) { $query = $db->getQuery(true); $query->select('r.id, r.doc_id, r.score'); $query->select('cm.approved AS comment_approved'); $query->from('#__judownload_rating AS r'); $query->join('LEFT', '#__judownload_comments AS cm ON cm.rating_id = r.id'); $query->where('r.`created` = (SELECT MAX(created) FROM `#__judownload_rating` AS r2 WHERE r2.doc_id = r.doc_id AND r2.user_id = r.user_id AND r.user_id > 0)'); $query->where('r.doc_id = ' . $doc_id); $query->group('r.created, r.doc_id, r.user_id'); } else { $query = $db->getQuery(true); $query->select('r.id, r.doc_id, r.score'); $query->select('cm.approved AS comment_approved'); $query->from('#__judownload_rating AS r'); $query->join('LEFT', '#__judownload_comments AS cm ON cm.rating_id = r.id'); $query->where('r.doc_id = ' . $doc_id); } $db->setQuery($query); $ratings = $db->loadObjectList(); if ($ratings) { $totalScore = 0; $totalVotes = 0; if (JFile::exists(JPATH_SITE . '/components/com_judownload/fields/multirating/multirating.class.php')) { require_once JPATH_SITE . '/components/com_judownload/fields/multirating/multirating.class.php'; } foreach ($ratings as $rating) { if (self::hasMultiRating()) { $ratingScore = JUDownloadMultiRating::rebuildRating($rating); } else { $ratingScore = $rating->score; } if ($rating->comment_approved !== 0) { $totalScore += $ratingScore; $totalVotes++; } } if ($onlyCalculateLastRating == 1) { $avgScore = $totalScore / $totalVotes; $query = $db->getQuery(true); $query->update('#__judownload_documents'); $query->set('rating = ' . $avgScore); $query->set('total_votes = ' . $totalVotes); $query->where('id = ' . $doc_id); } else { $query = $db->getQuery(true); $query->update('#__judownload_documents'); $query->set('rating = (SELECT AVG(score) FROM #__judownload_rating WHERE doc_id=' . $doc_id . ')'); $query->set('total_votes = ' . $totalVotes); $query->where('id = ' . $doc_id); } $db->setQuery($query); $db->execute(); return false; } }