%PDF- %PDF-
| Direktori : /home/bitrix/www/local/components/p4/user.profile/ |
| Current File : //home/bitrix/www/local/components/p4/user.profile/component.php |
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
/* @global CUser $USER */
$arResult[] = array();
$arResult['APP_RESULT'] = array('OK' => true, 'ERROR_MESSAGE' => '');
$arUserFieldNames = array(
'EMAIL','NAME','LAST_NAME','PASSWORD', 'UF_HIDECONT',
'PERSONAL_MOBILE','PERSONAL_PHONE','PERSONAL_WWW','PERSONAL_ICQ','UF_SOCIAL', 'PERSONAL_MAILBOX',
'WORK_COUNTRY', 'WORK_ZIP', 'WORK_CITY', 'WORK_STREET', 'WORK_FAX', 'WORK_COMPANY', 'WORK_NOTES');
$arPropNames = array('SEX', 'AGE', 'BDATE', 'STAGE', 'VIDEO', 'REGION', 'HAIRCOLOR', 'HAIRLENGTH', 'SKINCOLOR', 'EYECOLOR', 'MODELTHEME', 'MODELINTJOB', 'MODELOPTIONS', 'FACETYPE', 'HEIGHT', 'WEIGHT', 'BREAST', 'WAIST', 'HIP', 'SIZETYPE', 'SIZE', 'SHOESTYPE', 'SHOES', 'BODYSIZETYPE', 'MODELTYPE', 'WIDESCREEN');
function checkLink($url)
{
$k = stripos($url, "://");
if ($k!==false) return $url;
return 'http://'.$url;
}
function checkSite($url,$socLinkHosts)
{
$url = parse_url($url);
foreach($socLinkHosts as $key => $value)
if (strpos($url['host'],$key.'.com')!==false) return false;
return true;
}
$socLinkHosts = array(
'vk' => '',
'facebook' => '',
'instagram' => '',
'pinterest' => '',
'twitter' => ''
);
if ($USER->IsAuthorized() && $_SERVER["REQUEST_METHOD"]=="POST") {
$userID = $USER->GetID();
// Свойства пользователя
$arUserFields = array();
//AddMessage2Log($_POST);
if (strlen($_REQUEST['TOKEN'])>0)
{
$CUser = new CUser;
$CUser->Update($USER->GetID(), array('UF_TOKEN'=>$_REQUEST['TOKEN']));
}
if (strlen($_REQUEST['ANDROID_REG'])>0)
{
$CUser = new CUser;
$CUser->Update($USER->GetID(), array('UF_ANDROID_REG'=>$_REQUEST['ANDROID_REG']));
}
if (isset($_POST['EMAIL'])) // Сохраняем в WORK_MAILBOX и посылаем запрос на подтверждение
{
// Проверка уникальности e-mail
$res = CUser::GetList($b="", $o="", array("=EMAIL" => $_POST['EMAIL'], "!ID" => $userID));
if($res->Fetch())
{
$arResult['APP_RESULT']['OK'] = false;
$arResult['APP_RESULT']['ERROR_MESSAGE'] = GetMessage('USER_WITH_EMAIL_EXIST');
}
else
{
$arUserFields['WORK_MAILBOX'] = $_POST['EMAIL'];
unset($_POST['EMAIL']);
$confirmCode = generate_confirm_code(5);
$obUser = new CUser;
$obUser->Update($userID, array("CONFIRM_CODE" => $confirmCode));
$rsUser = CUser::GetByID($userID);
$arUser = $rsUser->Fetch();
$arFields = array(
"USER_ID" => $userID,
"EMAIL" => $arUserFields['WORK_MAILBOX'],
"NAME" => $arUser["NAME"],
"LAST_NAME" => $arUser["LAST_NAME"],
"CONFIRM_CODE" => $confirmCode,
);
$event = new CEvent;
$event->SendImmediate("USER_EMAIL_CHANGE_CONFIRM", SITE_ID, $arFields);
$arResult['APP_RESULT']['OK'] = true;
}
}
if ($arResult['APP_RESULT']['OK'])
{
if (isset($_POST['LANG']) && strlen($_POST['LANG'])>0)
{
$CUser = new CUser;
$CUser->Update($USER->GetID(), array('UF_LANG'=>$_POST['LANG']));
}
if (isset($_POST['UF_SOCIAL']) && !is_array($_POST['UF_SOCIAL'])) $_POST['UF_SOCIAL'] = array();
foreach($arUserFieldNames as $userFieldName)
if (isset($_POST[$userFieldName])) $arUserFields[$userFieldName] = $_POST[$userFieldName];
$needFullName = isset($_POST['NAME']);
if ($needFullName)
$fullName = $arUserFields['SECOND_NAME'] = $_POST['NAME'].' '.$_POST['LAST_NAME'];
// Обновление информации о пользователе
if (count($arUserFields)>0)
{
$user = new CUser();
if (!$user->Update($userID, $arUserFields)) {
$arResult['APP_RESULT']['OK'] = false;
$arResult['APP_RESULT']['ERROR_MESSAGE'] = $user->LAST_ERROR;
}
}
$rsProfile = CIBlockElement::GetList(array(),
array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, 'PROPERTY_ACCOUNT'=>$userID, 'ACTIVE'=>'Y', 'SHOW_NEW'=>'Y'), false, false,
array('IBLOCK_ID', 'ID', 'IBLOCK_SECTION_ID', 'BP_PUBLISHED')
);
if ($arProfile = $rsProfile->Fetch())
{
$arFields = array();
$arProps = array();
$isModel = $arProfile['IBLOCK_SECTION_ID'] == 7;
$profileID = $arProfile['ID'];
if ($isModel)
{
if ($needFullName) $arFields['NAME'] = $fullName;
}
else
{
if (isset($_POST['AGENCY_NAME'])) $arFields['NAME'] = $_POST['AGENCY_NAME'];
if (isset($_POST['PERSONAL_WWW'])) $arProps['AGENCY_CONTACTS'] = array(
'VALUE' => $_POST['PERSONAL_WWW'],
'DESCRIPTION' => 'SITE'
);
}
// Обновление профиля
if ($arResult['APP_RESULT']['OK'])
{
if (isset($_POST['LANGUAGES']))
{
$arLangs = array();
foreach($_POST['LANGUAGES'] as $lang_id => $lang_level)
$arLangs[] = array("VALUE"=>$lang_id,"DESCRIPTION"=>$lang_level);
$arProps['LANGUAGES'] = $arLangs;
}
if (isset($_POST['UB']))
{
$arProps['TYPE'] = $_POST['UB']=='Y' ? ProfileTypeHelper::DEFAULT_ID_UB : 0;
}
if (isset($_POST['BDATE']))
{
$_POST['BDATE'] = ConvertTimeStamp($_POST['BDATE']);
// AddMessage2Log(print_r($_POST['BDATE'],true));
$arProps['AGE'] = getAgeByBirthDate($_POST['BDATE']);
}
if (isset($_POST['REGION']))
{
$dbRegion = CIBlockElement::GetByID(intval($_POST['REGION']));
if ($arRegion = $dbRegion->Fetch())
{
$dbNav = CIBlockSection::GetNavChain(6, $arRegion['IBLOCK_SECTION_ID']);
if ($arNav = $dbNav->Fetch()) $arProps['COUNTRY'] = $arNav['ID'];
}
}
if (isset($_POST['CODE']))
{
$res = CIBlockElement::GetList(array(), array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "CODE"=>$_POST['CODE'], "!ID"=>$profileID));
if($res->GetNext())
{
$arResult['APP_RESULT']['OK'] = false;
$arResult['APP_RESULT']['ERROR_MESSAGE'] = GetMessage('CODE_NOT_UNIQUE');
}
else
$arFields['CODE'] = $_POST['CODE'];
}
if (count($arFields)>0)
{
$el = new CIBlockElement;
if(!$el->Update($profileID, $arFields, true))
{
$arResult['APP_RESULT']['OK'] = false;
$arResult['APP_RESULT']['ERROR_MESSAGE'] = $el->LAST_ERROR;
}
}
if ($arResult['APP_RESULT']['OK'])
{
foreach($arPropNames as $propName)
if (isset($_POST[$propName])) $arProps[$propName] = $_POST[$propName];
if (count($arProps) > 0)
{
CIBlockElement::SetPropertyValuesEx($profileID, IBLOCK_PROFILE_ID, $arProps);
}
if (count($arFields) || count($arProps) > 0)
{
if (!$arProfile['BP_PUBLISHED'] || $arProfile['BP_PUBLISHED'] == 'N')
{
ProfileTypeHelper::runModerate($arProfile['ID'], true);
}
}
$arResult['APP_RESULT']['PROFILE'] = array();
// User
$rsUser = CUser::GetByID($USER->GetID());
$arUser = $rsUser->Fetch();
$arResult['APP_RESULT']['ID'] = $arUser['ID'];
foreach($arUserFieldNames as $userFieldName)
if (isset($arUser[$userFieldName]) && strlen($arUser[$userFieldName])>0)
$arResult['APP_RESULT']['PROFILE'][$userFieldName] = $arUser[$userFieldName];
unset($arResult['APP_RESULT']['PROFILE']['PASSWORD']); // Не возвращаем пароль
// Profile
$rsProfile = CIBlockElement::GetList(array(),
array('IBLOCK_ID'=>IBLOCK_PROFILE_ID,'PROPERTY_ACCOUNT'=>$USER->GetID(),'SHOW_NEW'=>'Y'),
false,false,
array('ID','IBLOCK_ID','NAME','DETAIL_TEXT','DETAIL_PICTURE','CODE','BP_PUBLISHED'));
if ($ob = $rsProfile->GetNextElement())
{
// Профиль
$arProfile = $ob->GetFields();
$arProps = $ob->GetProperties();
if (isset($arProps['BDATE']['VALUE']) && strlen($arProps['BDATE']['VALUE'])>0)
$arProps['BDATE']['VALUE'] = MakeTimeStamp($arProps['BDATE']['VALUE']);
else
$arProps['BDATE']['VALUE'] = time();
$arResult['APP_RESULT']['PROFILE']['PROFILE_ID'] = $arProfile['ID'];
$arResult['APP_RESULT']['PROFILE']['AVATAR'] = CFile::GetPath($arProfile['DETAIL_PICTURE']);
$arResult['APP_RESULT']['PROFILE']['CODE'] = $arProfile['CODE'];
$arResult['APP_RESULT']['PROFILE']['IS_APPROVED'] = $arProfile['BP_PUBLISHED'] === 'Y' ? 'Y' : 'N';
$arResult['APP_RESULT']['PROFILE']['TYPE'] = CIBlockElement::GetByID(
$arProps['TYPE_P4']['VALUE']>0?$arProps['TYPE_P4']['VALUE']:ProfileTypeHelper::DEFAULT_ID_P4)->Fetch()['CODE'];
$arResult['APP_RESULT']['PROFILE']['UB'] = $arProps['TYPE']['VALUE']>0?'Y':'N';
$arResult['APP_RESULT']['LIMITS'] = ProfileTypeHelper::getLimits($arResult['APP_RESULT']['PROFILE']['TYPE_P4']['VALUE']);
$arLangs = array();
foreach($arProps['LANGUAGES']['VALUE'] as $idx => $lang_id)
$arLangs[$lang_id] = $arProps['LANGUAGES']['DESCRIPTION'][$idx];
$arResult['APP_RESULT']['PROFILE']['LANGUAGES'] = $arLangs;
foreach($arPropNames as $fieldName)
if (isset($arProps[$fieldName]))
{
if (in_array($arProps[$fieldName]['PROPERTY_TYPE'], array('N','S','E')) && strlen($arProps[$fieldName]['VALUE'])>0)
$arResult['APP_RESULT']['PROFILE'][$fieldName] = $arProps[$fieldName]['VALUE'];
elseif($arProps[$fieldName]['PROPERTY_TYPE']=='L' && $arProps[$fieldName]['VALUE_ENUM_ID']>0)
$arResult['APP_RESULT']['PROFILE'][$fieldName] = $arProps[$fieldName]['VALUE_ENUM_ID'];
elseif($arProps[$fieldName]['PROPERTY_TYPE']=='F' && $arProps[$fieldName]['VALUE']>0)
$arResult['APP_RESULT']['PROFILE'][$fieldName] = CFile::GetPath($arProps[$fieldName]['VALUE']);
}
}
}
}
}
else
{
$arResult['APP_RESULT']['OK'] = false;
$arResult['APP_RESULT']['ERROR_MESSAGE'] = GetMessage('PROFILE_NOT_FOUND');
}
}
if ($arResult['APP_RESULT']['OK']) // возвращаем профиль
{
// Profile
$rsProfile = CIBlockElement::GetList(array(),array('IBLOCK_ID'=>IBLOCK_PROFILE_ID,'PROPERTY_ACCOUNT'=>$USER->GetID(),'SHOW_NEW'=>'Y'),false,false,
array('ID','IBLOCK_ID','NAME','DETAIL_TEXT','DETAIL_PICTURE','CODE','IBLOCK_SECTION_ID','BP_PUBLISHED'));
if ($ob = $rsProfile->GetNextElement())
{
$arProfile = $ob->GetFields();
$arProps = $ob->GetProperties();
$dbSection = CIBlockSection::GetByID($arProfile['IBLOCK_SECTION_ID']);
if ($arSection = $dbSection->Fetch())
$section = $arSection['CODE'];
else
$section = 'unknow';
global $APPLICATION;
ob_start();
$arFullProfile = $APPLICATION->IncludeComponent("p4:catalog.element","",array(
'SHOW_POLAROID' => 'Y',
'PROFILE_ID' => $arProfile['ID'],
'WIDTH' => $_REQUEST['WIDTH']
));
$html = ob_get_contents();
ob_end_clean();
$arResult['APP_RESULT']['PROFILE'] = $arFullProfile['PROFILE'];
$arResult['APP_RESULT']['ALBUMS'] = $arFullProfile['ALBUMS'];
$arResult['APP_RESULT']['PROFILE']['IS_APPROVED'] = $arProfile['BP_PUBLISHED'] === 'Y' ? 'Y' : 'N';
$arResult['APP_RESULT']['PROFILE']['SECTION'] = $section;
$arResult['APP_RESULT']['PROFILE']['UB'] = $arProps['TYPE']['VALUE'] > 0 ? 'Y' : 'N';
$arResult['APP_RESULT']['MONETIZE'] = MoneySubscribeHelper::user_subscribes($arProfile['ID']);
$arResult['APP_RESULT']['LIMITS'] = ProfileTypeHelper::getLimits($arResult['APP_RESULT']['PROFILE']['TYPE_P4']['VALUE']);
$arResult['APP_RESULT']['PHPSESSID'] = session_id();
}
}
}
else {
$arResult['APP_RESULT']['OK'] = false;
$arResult['APP_RESULT']['ERROR_MESSAGE'] = GetMessage('USER_NOT_AUTHORIZED');
}
$this->IncludeComponentTemplate();