PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/main/classes/mysql/rating_rules.php

https://gitlab.com/alexprowars/bitrix
PHP | 168 lines | 146 code | 15 blank | 7 comment | 11 complexity | 1c8bbf50b57fc99e1f6c2cc455a79022 MD5 | raw file
  1. <?php
  2. require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/classes/general/rating_rules.php");
  3. IncludeModuleLangFile(__FILE__);
  4. class CRatingRulesMain extends CAllRatingRulesMain
  5. {
  6. public static function err_mess()
  7. {
  8. return "<br>Class: CRatingRulesMain<br>File: ".__FILE__;
  9. }
  10. public static function voteCheck($arConfigs)
  11. {
  12. global $DB;
  13. $err_mess = "File: ".__FILE__."<br>Function: voteCheck<br>Line: ";
  14. $ratingId = CRatings::GetAuthorityRating();
  15. if ($ratingId == 0)
  16. return true;
  17. // 1. UPDATE OLD VOTE (< 90 day)
  18. $strSql = "
  19. UPDATE
  20. b_rating_vote
  21. SET
  22. ACTIVE = 'N',
  23. USER_ID = 0
  24. WHERE
  25. ENTITY_TYPE_ID = 'USER' and CREATED < DATE_SUB(NOW(), INTERVAL ".intval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT'])." DAY)
  26. ";
  27. $DB->Query($strSql, false, $err_mess.__LINE__);
  28. // 2. INSERT NEW VOTE FOR AUTHORITY
  29. $sRatingUser = "";
  30. $sRatingWeightType = COption::GetOptionString("main", "rating_weight_type", "auto");
  31. if ($sRatingWeightType == 'auto')
  32. {
  33. $sRatingAuthrorityWeight = COption::GetOptionString("main", "rating_authority_weight_formula", 'Y');
  34. if ($sRatingAuthrorityWeight == 'Y')
  35. {
  36. $communitySize = COption::GetOptionString("main", "rating_community_size", 1);
  37. $communityAuthority = COption::GetOptionString("main", "rating_community_authority", 1);
  38. $voteWeight = COption::GetOptionString("main", "rating_vote_weight", 1);
  39. $sValue = "($communitySize*(RR.VOTE_WEIGHT/".round($voteWeight, 4).")/".round($communityAuthority).") as VALUE";
  40. $ratingId = CRatings::GetAuthorityRating();
  41. $sRatingUser = "LEFT JOIN b_rating_user RR ON RR.RATING_ID = ".intval($ratingId)." AND RR.ENTITY_ID = RV.USER_ID";
  42. }
  43. else
  44. $sValue = "1 as VALUE";
  45. }
  46. else
  47. {
  48. $ratingId = CRatings::GetAuthorityRating();
  49. $sRatingUser = "LEFT JOIN b_rating_user RR ON RR.RATING_ID = ".intval($ratingId)." AND RR.ENTITY_ID = RV.USER_ID";
  50. $sValue = "RR.VOTE_WEIGHT as VALUE";
  51. }
  52. $strSql = "
  53. INSERT INTO b_rating_vote (RATING_VOTING_ID, VALUE, ACTIVE, CREATED, USER_ID, USER_IP, ENTITY_TYPE_ID, ENTITY_ID, OWNER_ID)
  54. SELECT
  55. 0 as RATING_VOTING_ID,
  56. $sValue,
  57. 'N' as ACTIVE,
  58. ".$DB->GetNowFunction()." as CREATED,
  59. RV.USER_ID,
  60. 'auto' as USER_IP,
  61. 'USER' as ENTITY_TYPE_ID,
  62. RV.OWNER_ID as ENTITY_ID,
  63. RV.OWNER_ID
  64. FROM
  65. b_rating_vote RV
  66. $sRatingUser
  67. LEFT JOIN b_rating_vote RV2 ON RV2.USER_ID = RV.USER_ID AND RV2.ENTITY_TYPE_ID = 'USER' AND RV2.ENTITY_ID = RV.OWNER_ID
  68. WHERE
  69. RV.CREATED > DATE_SUB(NOW(), INTERVAL ".intval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT'])." DAY)
  70. and RV.VALUE > 0 and RV2.VALUE IS NULL and RV.OWNER_ID > 0
  71. GROUP BY RV.USER_ID, RV.OWNER_ID
  72. HAVING
  73. SUM(case
  74. when RV.ENTITY_TYPE_ID = 'FORUM_TOPIC' then ".floatval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_FORUM_TOPIC'])."
  75. when RV.ENTITY_TYPE_ID = 'FORUM_POST' then ".floatval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_FORUM_POST'])."
  76. when RV.ENTITY_TYPE_ID = 'BLOG_POST' then ".floatval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_BLOG_POST'])."
  77. when RV.ENTITY_TYPE_ID = 'BLOG_COMMENT' then ".floatval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_BLOG_COMMENT'])."
  78. else 0 end) >= ".floatval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_RESULT'])."
  79. ";
  80. $DB->Query($strSql, false, $err_mess.__LINE__);
  81. // 3.INSERT NEW VOTING GROUP (FROM STEP 2)
  82. $strSql = "
  83. INSERT INTO b_rating_voting (ENTITY_TYPE_ID, ENTITY_ID, ACTIVE, CREATED, LAST_CALCULATED, TOTAL_VALUE, TOTAL_VOTES, TOTAL_POSITIVE_VOTES, TOTAL_NEGATIVE_VOTES, OWNER_ID)
  84. SELECT
  85. RV.ENTITY_TYPE_ID,
  86. RV.ENTITY_ID,
  87. 'Y' as ACTIVE,
  88. ".$DB->GetNowFunction()." as CREATED,
  89. ".$DB->GetNowFunction()." as LAST_CALCULATED,
  90. SUM(VALUE) as TOTAL_VALUE,
  91. SUM(1) as TOTAL_VOTES,
  92. SUM(case when RV.VALUE > '0' then 1 else 0 end) as TOTAL_POSITIVE_VOTES,
  93. SUM(case when RV.VALUE > '0' then 0 else 1 end) as TOTAL_NEGATIVE_VOTES,
  94. RV.ENTITY_ID as OWNER_ID
  95. FROM
  96. b_rating_vote RV
  97. LEFT JOIN b_rating_voting RVG ON RVG.ENTITY_TYPE_ID = RV.ENTITY_TYPE_ID AND RVG.ENTITY_ID = RV.ENTITY_ID
  98. WHERE
  99. RATING_VOTING_ID = 0
  100. and RV.CREATED > DATE_SUB(NOW(), INTERVAL ".intval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT'])." DAY)
  101. and RVG.ID IS NULL and RV.OWNER_ID > 0
  102. GROUP BY RV.ENTITY_TYPE_ID, RV.ENTITY_ID
  103. ";
  104. $DB->Query($strSql, false, $err_mess.__LINE__);
  105. // 4 UPDATE FIELD RATING_VOTE_ID (FROM STEP 3)
  106. $strSql = "
  107. UPDATE
  108. b_rating_vote RV,
  109. b_rating_voting RVG
  110. SET
  111. RV.RATING_VOTING_ID = RVG.ID,
  112. RV.ACTIVE = 'Y'
  113. WHERE
  114. RV.ENTITY_TYPE_ID = RVG.ENTITY_TYPE_ID
  115. and RV.ENTITY_ID = RVG.ENTITY_ID
  116. and RV.RATING_VOTING_ID = 0";
  117. $DB->Query($strSql, false, $err_mess.__LINE__);
  118. // 5 INSERT TEMP TABLE VOTE RESULTS
  119. $DB->Query("TRUNCATE b_rating_voting_prepare", false, $err_mess.__LINE__);
  120. $strSql = "
  121. INSERT INTO b_rating_voting_prepare (RATING_VOTING_ID, TOTAL_VALUE, TOTAL_VOTES, TOTAL_POSITIVE_VOTES, TOTAL_NEGATIVE_VOTES)
  122. SELECT
  123. RV.RATING_VOTING_ID,
  124. SUM(RV.VALUE) as TOTAL_VALUE,
  125. SUM(1) as TOTAL_VOTES,
  126. SUM(case when RV.VALUE > '0' then 1 else 0 end) as TOTAL_POSITIVE_VOTES,
  127. SUM(case when RV.VALUE > '0' then 0 else 1 end) as TOTAL_NEGATIVE_VOTES
  128. FROM
  129. b_rating_vote RV
  130. WHERE
  131. RV.RATING_VOTING_ID IN (SELECT DISTINCT RV0.RATING_VOTING_ID FROM b_rating_vote RV0 WHERE RV0.ACTIVE='N')
  132. and RV.USER_ID > 0
  133. GROUP BY RV.RATING_VOTING_ID";
  134. $DB->Query($strSql, false, $err_mess.__LINE__);
  135. // 6 UPDATE VOTE_RESULTS FROM TEMP TABLE
  136. $strSql = "
  137. UPDATE
  138. b_rating_voting RVG,
  139. b_rating_voting_prepare RVG0
  140. SET
  141. RVG.TOTAL_VALUE = RVG0.TOTAL_VALUE,
  142. RVG.TOTAL_VOTES = RVG0.TOTAL_VOTES,
  143. RVG.TOTAL_POSITIVE_VOTES = RVG0.TOTAL_POSITIVE_VOTES,
  144. RVG.TOTAL_NEGATIVE_VOTES = RVG0.TOTAL_NEGATIVE_VOTES
  145. WHERE
  146. RVG.ID = RVG0.RATING_VOTING_ID";
  147. $DB->Query($strSql, false, $err_mess.__LINE__);
  148. // 7 DELETE OLD POST
  149. $strSql = "DELETE FROM b_rating_vote WHERE ENTITY_TYPE_ID = 'USER' and CREATED < DATE_SUB(NOW(), INTERVAL ".intval($arConfigs['CONDITION_CONFIG']['VOTE']['VOTE_LIMIT'])." DAY)";
  150. $DB->Query($strSql, false, $err_mess.__LINE__);
  151. return true;
  152. }
  153. }