%PDF- %PDF-
Direktori : /home/bitrix/www/local/php_interface/include/ |
Current File : /home/bitrix/www/local/php_interface/include/rating_ub.php |
<? class RatingUB { private $arMaxPortfolio = array( 22479 => 50, ProfileTypeHelper::DEFAULT_ID_UB => 50, 5683 => 150, 5684 => 150, ); private $arUserFieldNames = array( 'PERSONAL_MOBILE', 'PERSONAL_PHONE', // Два телефона 'PERSONAL_WWW', // Сайт 'PERSONAL_ICQ', // Скайп 'PERSONAL_MAILBOX', // Е-майл 'UF_SOCIAL', // Социальные сети ); private $arPropNames = array( 'LANGUAGES', 'SEX', 'STAGE', 'HAIRCOLOR', 'HAIRLENGTH', 'SKINCOLOR', 'EYECOLOR', 'MODELTHEME', 'MODELOPTIONS', 'PHOTOTHEME', 'PHOTOOPTIONS', 'VISAGISTE', 'VISAGISTOPTION', 'BARBEROPTION', 'NAILTHEME', 'MODELINTJOB', 'FACETYPE', 'HEIGHT', 'WEIGHT', 'BREAST', 'STYLETHEME', 'PHOTOSTUDIOPRICE', 'PHOTOMIXHOURS', 'PHOTOSETAREA', 'PHOTOSETWORKAREA', 'PHOTOSETNUM', 'PHOTOSETHEIGHT', 'PHOTOFEATURES', 'PHOTOSELF', 'PHOTOMORE', 'SCOOLTHEME', 'ARBAITEN', 'OTHERINFA', 'AGENTTHEME', 'PHOTOJOB', 'DESIGNTHEME', 'WAIST', 'HIP', 'SIZE', 'SHOES', 'MODELTYPE', 'WIDESCREEN' ); private function calcPortfolio($profileID, $typeAccount) { if (intval($typeAccount) > 0) $maxCount = $this->arMaxPortfolio[$typeAccount]; else $maxCount = $this->arMaxPortfolio[ProfileTypeHelper::DEFAULT_ID_UB]; $count = 0; $like = 0; $rsAlbum = CIBlockSection::GetList(array(), array("IBLOCK_ID" => 4, "DEPTH_LEVEL" => 1, "UF_PORTF_USR" => $profileID), false); if ($arAlbum = $rsAlbum->Fetch()) { $rsPhoto = CIBlockElement::GetList(array(), array("IBLOCK_ID" => 4, "ACTIVE" => 'Y', "SECTION_ID" => $arAlbum['ID'], "INCLUDE_SUBSECTIONS" => 'Y'), false, false, array('ID')); while ($arPhoto = $rsPhoto->Fetch()) { $count++; $arRatingResult = CRatings::GetRatingVoteResult('PORTFOLIO', $arPhoto['ID'], 1); if (intval($arRatingResult['TOTAL_VOTES']) > 0) $like += $arRatingResult['TOTAL_VOTES']; } } return $count > $maxCount ? $maxCount : $count + $like; } private function calcBlogsReviews($userID) { CModule::IncludeModule("forum"); CModule::IncludeModule("blog"); $count = 0; $cnt_rev = CForumMessage::GetList(array(), array("AUTHOR_ID" => $userID), true); if ($cnt_rev > 0) $count += $cnt_rev; $arBlog = CBlog::GetByOwnerID($userID); if (is_array($arBlog)) { $count += 1; $cnt_pst = CBlogPost::GetList(array(), array("BLOG_ID" => $arBlog['ID']), array()); if ($cnt_pst > 0) $count += $cnt_pst; }; $cnt_cmt = CBlogComment::GetList(array(), array("AUTHOR_ID" => $userID), array()); if ($cnt_cmt > 0) $count += $cnt_cmt; return $count; } private function calcContacts($userID) { $count = 0; if ($arUser = CUser::GetByID($userID)->Fetch()) { foreach ($this->arUserFieldNames as $key) if (isset($arUser[$key])) { if (is_array($arUser[$key]) && count($arUser[$key]) > 0) $count += 1 * count($arUser[$key]); elseif (strlen($arUser[$key]) > 0) $count += 1; } } return $count; } private function calcInvites($userID) { $count = 0; $rsUser = CUser::GetByID($userID); $arUser = $rsUser->Fetch(); $cnt_inv = intval($arUser['UF_COUNT_INVITE']); $count = 10 * $cnt_inv; return $count; } private function calcForumReviews($userID) { CModule::IncludeModule("forum"); $count = 0; $rs = CForumTopic::GetList(array(), array("FORUM_ID" => 2, "USER_START_ID" => $userID)); if ($ar_forum = $rs->GetNext()) { $count = (int)$ar_forum['DESCRIPTION']; }; return $count; } private function calcProfileProps(&$arProps) { $count = 0; foreach ($this->arPropNames as $key) if ( isset($arProps[$key]) && ( (is_array($arProps[$key]['VALUE']) && count($arProps[$key]['VALUE']) > 0) || strlen($arProps[$key]['VALUE']) > 0 ) ) $count++; return $count; } public function update() { CModule::IncludeModule("iblock"); $arFilter = array( 'IBLOCK_ID' => IBLOCK_PROFILE_ID, '>PROPERTY_TYPE' => 0, 'ACTIVE' => 'Y' ); $count = 0; $rs = CIBlockElement::GetList(array(), $arFilter); while ($ob = $rs->GetNextElement()) { $count++; $arProfile = $ob->GetFields(); $arProps = $ob->GetProperties(); $ratingA = $this->calcProfileProps($arProps); $ratingB = $this->calcBlogsReviews($arProps['ACCOUNT']['VALUE']); $ratingC = $this->calcContacts($arProps['ACCOUNT']['VALUE']); $ratingD = $this->calcForumReviews($arProps['ACCOUNT']['VALUE']); $ratingI = $this->calcInvites($arProps['ACCOUNT']['VALUE']); $ratingP = $this->calcPortfolio($arProfile['ID'], $arProps['TYPE']['VALUE']); $rating = $ratingA + $ratingB + $ratingC + $ratingD + $ratingI + $ratingP; CIBlockElement::SetPropertyValuesEx($arProfile['ID'], false, array('rating' => $rating)); echo $count . " " . $arProfile['NAME'] . " #" . $arProps['ACCOUNT']['VALUE'] . " A" . $ratingA . " + B" . $ratingB . " + C" . $ratingC . " + D" . $ratingD . " + I" . $ratingI . " + P" . $ratingP . " = " . $rating . "\n"; } } }