%PDF- %PDF-
| Direktori : /proc/self/root/home/bitrix/www/local/php_interface/include/ |
| Current File : //proc/self/root/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";
}
}
}