%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/local/php_interface/include/
Upload File :
Create Path :
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";
		}
		
	}
	
}

Zerion Mini Shell 1.0