%PDF- %PDF-
| Direktori : /home/bitrix/www/local/php_interface/include/ |
| Current File : //home/bitrix/www/local/php_interface/include/rating_profile.php |
<?
class RatingProfile
{
private $arMaxPortfolio = array(
22479 => 50,
ProfileTypeHelper::DEFAULT_ID_UB => 50,
ProfileTypeHelper::DEFAULT_ID_P4 => 50,
5683 => 150, // UB
5684 => 150, // UB
45937 => 150, // P4
45938 => 150, // P4
);
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', 'FACETYPE', 'HEIGHT', 'WEIGHT', 'BREAST',
'WAIST', 'HIP', 'SIZE', 'SHOES', 'MODELTYPE', 'WIDESCREEN'
);
const VERIFED_BY_P4 = 'VERIFED_BY_P4';
private function calcPortfolio($profileID,$typeAccount)
{
if (intval($typeAccount)>0) $maxCount = $this->arMaxPortfolio[$typeAccount];
else $maxCount = $this->arMaxPortfolio[ProfileTypeHelper::DEFAULT_ID_P4];
$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('P4_PORTFOLIO', $arPhoto['ID'], 1);
if (intval($arRatingResult['TOTAL_VOTES'])>0) $like += $arRatingResult['TOTAL_VOTES'];
}
}
return $count>$maxCount?$maxCount:$count + $like;
}
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 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++;
if ($count == count($this->arPropNames)) return 10;
elseif ($count>0) return 5;
return 0;
}
public function update()
{
CModule::IncludeModule("iblock");
$arFilter = array(
'IBLOCK_ID'=>IBLOCK_PROFILE_ID,
'SECTION_ID'=>7,
//'!PROPERTY_TYPE_P4'=>false,
'ACTIVE'=>'Y'
);
$count = 0;
/*
- Если удаляет и загружает новую фотографию = 1 балл ( из рейтинга при удалении ничего не вычитается - это бонусы за активность)
*/
$rs = CIBlockElement::GetList(array(), $arFilter);
while ($ob = $rs->GetNextElement())
{
$count++;
$arProfile = $ob->GetFields();
$arProps = $ob->GetProperties();
$ratingA = $this->calcProfileProps($arProps);
$ratingC = $this->calcContacts($arProps['ACCOUNT']['VALUE']);
$ratingI = $this->calcInvites($arProps['ACCOUNT']['VALUE']);
$ratingP = $this->calcPortfolio($arProfile['ID'],$arProps['TYPE_P4']['VALUE']);
$ratingV = $arProps[static::VERIFED_BY_P4]['VALUE'] == 'Y' ? 10 : 0;
$rating = $ratingA + $ratingC + $ratingI + $ratingP + $ratingV;
CIBlockElement::SetPropertyValuesEx($arProfile['ID'], false, array('RATING_P4' => $rating));
echo $count." ".$arProfile['NAME']." #".$arProps['ACCOUNT']['VALUE']
." A".$ratingA." + C".$ratingC." + I".$ratingI." + P".$ratingP." + V".$ratingV." = ".$rating."\n";
}
}
}