Guest User

Untitled

a guest
Oct 23rd, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. diff --git a/app/addons/discussion/func.php b/app/addons/discussion/func.php
  2. index a6256ef..948e0c9 100644
  3. --- a/app/addons/discussion/func.php
  4. +++ b/app/addons/discussion/func.php
  5. @@ -267,7 +267,7 @@ function fn_get_discussion($object_id, $object_type, $get_posts = false, $params
  6.  
  7. list($cache[$_cache_key]['posts'], $cache[$_cache_key]['search']) = fn_get_discussion_posts($params, Registry::get('addons.discussion.' . $discussion_object_types[$cache[$_cache_key]['object_type']] . '_posts_per_page'));
  8.  
  9. - $cache[$_cache_key]['average_rating'] = fn_get_average_rating($cache[$_cache_key]);
  10. + $cache[$_cache_key]['average_rating'] = fn_discussion_get_average_object_rating($object_id, $object_type);
  11. }
  12.  
  13. $saved_post_data = fn_restore_post_data('post_data');
  14. @@ -847,6 +847,46 @@ function fn_get_discussion_rating($rating_value)
  15. return $cache[$rating_value];
  16. }
  17.  
  18. +/**
  19. + * Returns average rating of an object taking into account:
  20. + * - whether the object is shared or not
  21. + * - reviews setting: Communication and Rating or just Rating
  22. + * - discussion posts status - active
  23. + *
  24. + * @param $object_id
  25. + * @param $object_type
  26. + *
  27. + * @return mixed
  28. + */
  29. +function fn_discussion_get_average_object_rating($object_id, $object_type)
  30. +{
  31. + if ($object_type === DISCUSSION_OBJECT_TYPE_PRODUCT) {
  32. + $share_status = Registry::get('addons.discussion.product_share_discussion');
  33. + } elseif ($object_type === DISCUSSION_OBJECT_TYPE_PAGE) {
  34. + $share_status = Registry::get('addons.discussion.page_share_discussion');
  35. + } else {
  36. + $share_status = null;
  37. + }
  38. +
  39. + $rating = db_get_field(
  40. + 'SELECT AVG (dr.rating_value) FROM ?:discussion_rating AS dr'
  41. + . ' LEFT JOIN ?:discussion_posts AS dp ON dp.post_id = dr.post_id'
  42. + . ' LEFT JOIN ?:discussion AS d ON d.thread_id = dp.thread_id'
  43. + . ' WHERE d.object_id = ?i AND d.object_type = ?s AND type IN ( ?a ) ?p'
  44. + . ' AND dp.status = ?s AND dr.rating_value > ?i',
  45. + $object_id,
  46. + $object_type,
  47. + array(DISCUSSION_REVIEW_COMMUNICATION_AND_RATING, DISCUSSION_REVIEW_RATING),
  48. + $share_status === 'Y' ? '' : fn_get_discussion_company_condition('d.company_id'),
  49. + DISCUSSION_POST_STATUS_ACTIVE,
  50. + 0
  51. + );
  52. +
  53. + $rating = number_format($rating, 2);
  54. +
  55. + return intval($rating) == $rating ? intval($rating) : $rating;
  56. +}
  57. +
  58. //
  59. // Get thread average rating
  60. //
Add Comment
Please, Sign In to add comment