public static function CheckAllowVote($arVoteParam) { global $USER; $userId = $USER->GetId(); $bUserAuth = $USER->IsAuthorized(); $bAllGroups = false; $arInfo = array( 'RESULT' => true, 'ERROR_TYPE' => '', 'ERROR_MSG' => '', ); $bSelfVote = COption::GetOptionString("main", "rating_self_vote", 'N'); if ($bSelfVote == 'N' && IntVal($arVoteParam['OWNER_ID']) == $userId) { $arInfo = array( 'RESULT' => false, 'ERROR_TYPE' => 'SELF', 'ERROR_MSG' => GetMessage('RATING_ALLOW_VOTE_SELF'), ); } else if (!$bUserAuth) { $arInfo = array( 'RESULT' => false, 'ERROR_TYPE' => 'GUEST', 'ERROR_MSG' => GetMessage('RATING_ALLOW_VOTE_GUEST'), ); } else { static $cacheAllowVote = array(); static $cacheUserVote = array(); static $cacheVoteSize = 0; if(!array_key_exists($userId, $cacheAllowVote)) { global $DB; $arGroups = array(); $sVoteType = $arVoteParam['ENTITY_TYPE_ID'] == 'USER'? 'A': 'R'; $userVoteGroup = Array(); $ar = CRatings::GetVoteGroupEx(); foreach($ar as $group) if ($sVoteType == $group['TYPE']) $userVoteGroup[] = $group['GROUP_ID']; $userGroup = $USER->GetUserGroupArray(); $result = array_intersect($userGroup, $userVoteGroup); if (empty($result)) { $arInfo = $cacheAllowVote[$userId] = array( 'RESULT' => false, 'ERROR_TYPE' => 'ACCESS', 'ERROR_MSG' => GetMessage('RATING_ALLOW_VOTE_ACCESS'), ); } $authorityRatingId = CRatings::GetAuthorityRating(); $arAuthorityUserProp = CRatings::GetRatingUserPropEx($authorityRatingId, $userId); if ($arAuthorityUserProp['VOTE_WEIGHT'] <= 0) { $arInfo = $cacheAllowVote[$userId] = array( 'RESULT' => false, 'ERROR_TYPE' => 'ACCESS', 'ERROR_MSG' => GetMessage('RATING_ALLOW_VOTE_LOW_WEIGHT'), ); } if ($arInfo['RESULT'] && $sVoteType == 'A') { $strSql = ' SELECT COUNT(*) as VOTE FROM b_rating_vote RV WHERE RV.USER_ID = '.$userId.' AND RV.CREATED > DATE_SUB(NOW(), INTERVAL 1 DAY)'; $res = $DB->Query($strSql, false, $err_mess.__LINE__); $countVote = $res->Fetch(); $cacheVoteSize = $_SESSION['RATING_VOTE_COUNT'] = $countVote['VOTE']; $cacheUserVote[$userId] = $_SESSION['RATING_USER_VOTE_COUNT'] = $arAuthorityUserProp['VOTE_COUNT']; if ($cacheVoteSize >= $cacheUserVote[$userId]) { $arInfo = $cacheAllowVote[$userId] = array( 'RESULT' => false, 'ERROR_TYPE' => 'COUNT_VOTE', 'ERROR_MSG' => GetMessage('RATING_ALLOW_VOTE_COUNT_VOTE'), ); } } } else { if ($cacheAllowVote[$userId]['RESULT']) { if ($cacheVoteSize >= $cacheUserVote[$userId]) { $arInfo = $cacheAllowVote[$userId] = array( 'RESULT' => false, 'ERROR_TYPE' => 'COUNT_VOTE', 'ERROR_MSG' => GetMessage('RATING_ALLOW_VOTE_COUNT_VOTE'), ); } } $arInfo = $cacheAllowVote[$userId]; } } static $handlers; if (!isset($handlers)) $handlers = GetModuleEvents("main", "OnAfterCheckAllowVote", true); foreach ($handlers as $arEvent) { $arEventResult = ExecuteModuleEventEx($arEvent, array($arVoteParam)); if (is_array($arEventResult) && isset($arEventResult['RESULT']) && $arEventResult['RESULT'] === false && isset($arEventResult['ERROR_TYPE']) && strlen($arEventResult['ERROR_MSG']) > 0 && isset($arEventResult['ERROR_MSG']) && strlen($arEventResult['ERROR_MSG']) > 0) { $arInfo = array( 'RESULT' => false, 'ERROR_TYPE' => $arEventResult['ERROR_TYPE'], 'ERROR_MSG' => $arEventResult['ERROR_MSG'], ); } } return $arInfo; }
$i++; } if (is_array($arRatings) && !empty($arRatings)) { $ratingWeightType = COption::GetOptionString("main", "rating_weight_type", "auto"); $authorityRatingId = CRatings::GetAuthorityRating(); $arAuthorityUserProp = CRatings::GetRatingUserPropEx($authorityRatingId, $ID); $viewTabControl = new CAdminViewTabControl("tabControlRating", $aTabs2); $viewTabControl->Begin(); foreach($arRatings as $ratingId => $arRating) { $arRatingResult = CRatings::GetRatingResult($ratingId, $ID); $arRatingUserProp = CRatings::GetRatingUserPropEx($ratingId, $ID); if ($ratingId == $authorityRatingId && $arRatingUserProp['BONUS'] == 0) $arRatingUserProp['BONUS'] = COption::GetOptionString("main", "rating_start_authority", 3); $viewTabControl->BeginNextTab(); ?> <table cellspacing="7" cellpadding="0" border="0" width="100%" class="edit-table"> <? if ($USER->CanDoOperation('edit_ratings') && ($selfEdit || $ID!=$uid)): ?> <tr> <td class="field-name" width="40%"><?php echo GetMessage('RATING_BONUS'); ?> :<sup><span class="required">2</span></sup></td> <td><?php echo InputType('text', "RATING_BONUS[{$ratingId}]", floatval($arRatingUserProp['BONUS']), false, false, '', 'size="5" maxlength="11"');