Пример #1
0
 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;
     }
 }