%PDF- %PDF-
| Direktori : /home/bitrix/www/local/php_interface/ |
| Current File : /home/bitrix/www/local/php_interface/init.php |
<?
include(GetLangFileName(dirname(__FILE__)."/", "/init.php"));
require __DIR__.'/lib/vendor/autoload.php';
define("CAT_PROFILE_MODEL", 7);
define("IBLOCK_PROFILE_ID", 2);
define("IBLOCK_PORTFOLIO_ID", 4);
define("IBLOCK_FEEDBACK_ID", 14);
define("IBLOCK_MULTILANG_ID", 32);
define("IBLOCK_PORTFOLIO_SETTING_ID", 11);
define("MAX_PHOTOS_PER_ALBUM", 50); // Максимально количество фотографий в альбоме
define("USER_RATING_ID", 1);
define("USR_CUSTOMER", 30); // Заказчики
define("MODERATOR_GROUP", 1);
define("GROUP_MORE_ID", 8);
define("IMAGE_UPLOAD_TMPDIR", str_replace("WWW", "tmp", $_SERVER["DOCUMENT_ROOT"]));
CModule::IncludeModule("iblock");
CModule::IncludeModule("im");
CModule::AddAutoloadClasses('',
array(
'ProfilePDFCreator' => '/local/php_interface/include/pdf/pdf.php',
'PhoneUserLoginExternal' => '/local/php_interface/include/phoneauth.php',
'ProfileTypeHelper' => '/local/php_interface/include/profile_type_helper.php',
'MoneySubscribeHelper' => '/local/php_interface/include/money_subscribe_helper.php',
'AdminAlbumButton' => '/local/php_interface/include/admin_album_button.php',
'P4UserRegisterHelper' => '/local/php_interface/include/user_register_helper.php'
)
);
ProfilePDFCreator::init();
PhoneUserLoginExternal::init();
ProfileTypeHelper::init();
AdminAlbumButton::init();
class CurrencySymbols {
private static $value = array(
'fa-rub' => '<i class="fa fa-rub"></i>', //'₽',
'fa-usd' => '<i class="fa fa-usd"></i>', //'$',
'fa-eur' => '<i class="fa fa-eur"></i>', //'€',
'fa-grn' => '₴',
'fa-gbp' => '<i class="fa fa-gbp"></i>', //'£',
'fa-jpy' => '<i class="fa fa-jpy"></i>', //'¥',
);
public static function get($v) {
return self::$value[$v];
}
}
/**
* Возвращает возраст по дате рождения
*/
function getAgeByBirthDate($bdate) {
if (strlen($bdate)>0) {
$pos = strpos($bdate, " ");
$dbate = (SITE_ID == "s1" || SITE_ID == "ru") ? DateTime::createFromFormat("d.m.Y",$pos !== false ? substr($bdate, 0, $pos):$bdate) : DateTime::createFromFormat("m/d/Y",$pos !== false ? substr($bdate, 0, $pos):$bdate);
$age = (time() - $dbate->getTimestamp()) / 60 / 60 / 24 / 365 ;
return floor($age);
}
else {
return "";
}
}
function agGetAgeByBirthDate($bdate) {
if (strlen($bdate)>0) {
$pos = strpos($bdate, " ");
$dot = strpos($bdate, ".");
$dbate = ($dot !== false) ? DateTime::createFromFormat("d.m.Y",$pos !== false ? substr($bdate, 0, $pos):$bdate) : DateTime::createFromFormat("m/d/Y",$pos !== false ? substr($bdate, 0, $pos):$bdate);
$age = (time() - $dbate->getTimestamp()) / 60 / 60 / 24 / 365 ;
return floor($age);
}
else {
return "";
}
}
function setAgeByBirthDate()
{
$arFilter = array(
'IBLOCK_ID'=>IBLOCK_PROFILE_ID,
'ACTIVE'=>'Y',
'!PROPERTY_BDATE'=>false
);
$arSelect = array('ID', 'IBLOCK_ID', 'PROPERTY_BDATE', 'PROPERTY_AGE');
$rs = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
while ($arRes = $rs->GetNext())
{
$newage = agGetAgeByBirthDate($arRes['PROPERTY_BDATE_VALUE']);
CIBlockElement::SetPropertyValueCode($arRes['ID'], "AGE", $newage);
};
return "setAgeByBirthDate();";
}
/**
* Обновляет свойство RATING профиля из текущего рейтинга связанного аккаунта
* рекомендуется запускать периодически (раз в 1-3 часа)
*/
function updateProfileRatings() {
$rsProfiles = CIBlockElement::GetList(array('id'=>'asc'),array('IBLOCK_ID'=> IBLOCK_PROFILE_ID,'ACTIVE'=>'Y'),false,false,
array('ID','IBLOCK_ID','NAME','PROPERTY_ACCOUNT', 'PROPERTY_RATING'));
$count = 0;
while ($arProfile = $rsProfiles->GetNext()) {
if (intval($arProfile['PROPERTY_ACCOUNT_VALUE'])>0)
$rating = CRatings::GetRatingResult(1,$arProfile['PROPERTY_ACCOUNT_VALUE']);
else
$rating['CURRENT_VALUE'] = 0;
if ($rating['CURRENT_VALUE']!=$arProfile['PROPERTY_RATING_VALUE']) {
// Обновляем свойство рейтинга
CIBlockElement::SetPropertyValuesEx($arProfile['ID'], IBLOCK_PROFILE_ID, array('rating' => $rating['CURRENT_VALUE']));
/* ?><li><?=$arProfile['NAME']?> - <?=$rating['CURRENT_VALUE']?> : <?=$arProfile['PROPERTY_RATING_VALUE']?></li><? */
$count++;
}
}
//AddMessage2Log('Обновлено профилей - '.$count,'updateProfileRatings');
return "updateProfileRatings();";
}
/**
* Формирует представление региона: Город,[Штат/Область,]Страна
*/
function getRegionName($city) {
$region='';
$res = CIBlockElement::GetByID($city);
if($ar_res = $res->GetNext()) {$region = $ar_res["NAME"]; $s_id=$ar_res["IBLOCK_SECTION_ID"];}
$res = CIBlockSection::GetByID($s_id);
if($ar_res = $res->GetNext()) {$region = $region.", ".$ar_res["NAME"]; $s_id=$ar_res["IBLOCK_SECTION_ID"];}
$res = CIBlockSection::GetByID($s_id);
if($ar_res = $res->GetNext()) {$region = $region.", ".$ar_res["NAME"]; $s_id=$ar_res["IBLOCK_SECTION_ID"];}
return $region;
}
/**
* Устанавливает значение рейтинга профиля из рейтинга аккаунта
*/
function updateProfileRating() {
$res = CIBlockElement::GetList(array(),array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, ">=PROPERTY_ACCOUNT"=>0),false,false,array('ID','PROPERTY_ACCOUNT'));
while ($ar=$res->GetNext()) {
$arRatingResult = CRatings::GetRatingResult(USER_RATING_ID, $ar['PROPERTY_ACCOUNT_VALUE']);
if(!empty($arRatingResult ) && intval($arRatingResult['ROUND_CURRENT_VALUE'])>0)
$rating = $arRatingResult['ROUND_CURRENT_VALUE'];
else
$rating = '-';
echo "#".$ar['ID']." : ".$rating."\n";
CIBlockElement::SetPropertyValuesEx($ar['ID'], false, array('rating' => $rating));
}
}
/**
* Возвращает текущий объем и ограничения на фотогалерею профиля
*/
function getPortfolioLimit($usrid, $sectionID = 0) {
$arResult = array();
$res = CIBlockElement::GetList(array(), array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "PROPERTY_ACCOUNT"=>$usrid), false, false, array('ID','PROPERTY_TYPE'));
if($ar_fields = $res->GetNext()) {
$elid = $ar_fields["ID"];
// Читаем ограничения для профиля
$rs = CIBlockElement::GetList(array(), array('IBLOCK_ID'=>IBLOCK_PORTFOLIO_SETTING_ID,'ID'=>$ar_fields['PROPERTY_TYPE_VALUE']),
false, false, array('ID','NAME','IBLOCK_ID','PROPERTY_GALLERY_MAX_ALBUM','PROPERTY_GALLERY_MAX_PHOTOS'));
if ($ar_limit = $rs->Fetch()) {
$arResult['TYPE'] = $ar_limit['NAME'];
$arResult['MAX_ALBUM'] = $ar_limit['PROPERTY_GALLERY_MAX_ALBUM_VALUE'];
$arResult['MAX_PHOTOS'] = $ar_limit['PROPERTY_GALLERY_MAX_PHOTOS_VALUE'];
}
}
$db_list = CIBlockSection::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PORTFOLIO_ID, "DEPTH_LEVEL"=>1, "UF_PORTF_USR"=>$elid), true, array("ID"));
if ($ar_result = $db_list->GetNext()) {
$arResult["SECTION_ID"] = $ar_result['ID'];
$arResult["ALBUM_CNT"] = CIBlockSection::GetCount(array('IBLOCK_ID'=>IBLOCK_PORTFOLIO_ID, 'SECTION_ID'=>$arResult["SECTION_ID"]));
$arResult["ELEMENT_CNT"] = $ar_result['ELEMENT_CNT'];
$arResult["ALERT"] =
((($arResult["ALBUM_CNT"]/$arResult["MAX_ALBUM"]*100)>80) ||
(($arResult["ELEMENT_CNT"]/$arResult["MAX_PHOTOS"]*100)>80)) ? 'Y':'N';
$arResult["STOP_ALBUM"] = $arResult["ALBUM_CNT"] >= $arResult["MAX_ALBUM"] ? 'Y' : 'N';
$arResult["STOP_PHOTOS"] = $arResult["ELEMENT_CNT"] >= $arResult["MAX_PHOTOS"] ? 'Y' : 'N';
}
// Определяем лимит для альбома
if ($sectionID>0) {
$count = CIBlockSection::GetSectionElementsCount($sectionID);
$count1 = MAX_PHOTOS_PER_ALBUM - $count;
$count2 = $arResult['MAX_PHOTOS'] - $arResult['ELEMENT_CNT'];
$arResult['ALBUM_AVAIL'] = $count2 < $count1 ? $count2 : $count1;
}
return $arResult;
}
function isCustomer() {
global $USER;
if ($USER->IsAuthorized()) {
$arUser = CUser::GetByID($USER->GetID())->Fetch();
if ($arUser['UF_USR']==USR_CUSTOMER) return true;
}
return false;
}
$companyIDs = array(9,10,11);
function isCompany2($usr) {
global $companyIDs;
return in_array(intval($usr), $companyIDs);
}
function isCompany() {
global $USER;
global $companyIDs;
if ($USER->IsAuthorized()) {
$arUser = CUser::GetByID($USER->GetID())->Fetch();
return in_array(intval($arUser['UF_USR']), $companyIDs);
}
return false;
}
function isJobUser($userID) {
$arUser = CUser::GetByID($userID)->Fetch();
if ($arUser['UF_USR']==USR_CUSTOMER) return true;
$r = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "PROPERTY_ACCOUNT"=>$userID, 'ACTIVE'=>'Y'), false, false,
array("IBLOCK_ID", "ID", "NAME", "CODE", "IBLOCK_SECTION_ID"));
if($ar_fields = $r->GetNext())
return true;
return false;
}
/**
* Проверяет начилие профиля пользователя
*/
function isUserProfile($userID) {
$r = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "PROPERTY_ACCOUNT"=>$userID, 'ACTIVE'=>'Y'), false, false,
array("IBLOCK_ID", "ID", "NAME", "CODE", "IBLOCK_SECTION_ID"));
if($ar_fields = $r->GetNext()) {
// @todo: Добавить проверку на корректность и полноту заполнения профиля
return true;
}
return false;
}
function isProfilePresent() {
global $USER;
if ($USER->IsAuthorized()) {
$r = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "PROPERTY_ACCOUNT"=>$USER->GetID(), 'ACTIVE'=>'Y'), false, false,
array("IBLOCK_ID", "ID", "NAME", "CODE", "IBLOCK_SECTION_ID"));
if($ar_fields = $r->GetNext()) {
// @todo: Добавить проверку на корректность и полноту заполнения профиля
return true;
}
}
return false;
}
/**
* Возвращает основные данные профиля пользователя: псевдоним, ссылка
*/
function getUserProfile($userID) {
$profile = array('NAME'=>'');
$code = ""; $scode = "";
// @todo заменить на оптимизированный getUserMeta
$r = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "PROPERTY_ACCOUNT"=>$userID, "ACTIVE"=>'Y'), false, false,
array("IBLOCK_ID", "ID", "NAME", "CODE", "IBLOCK_SECTION_ID"));
if($ar_fields = $r->GetNext()) {
$profile['NAME'] = $ar_fields["NAME"];
$profile['ID'] = $ar_fields['ID'];
$code = $ar_fields["CODE"];
$s_id = $ar_fields["IBLOCK_SECTION_ID"];
$s = CIBlockSection::GetByID($s_id);
if($ar_res = $s->GetNext()) {
$scode = $ar_res["CODE"];
}
$profile['LINK'] = "/".$scode."/".$code."/";
$profile['CUSTOMER'] = false;
}
else {
$arUser = CUser::GetByID($userID)->Fetch();
$isAdmin = in_array(MODERATOR_GROUP, CUser::GetUserGroup($userID));
if ($arUser['UF_USR']==USR_CUSTOMER) {
$profile['LINK'] = ($isAdmin?"/administration/":"/customer/").(strlen($arUser['WORK_COMPANY'])>0?$arUser['WORK_COMPANY']:$arUser['ID'])."/";
$profile['NAME'] = $arUser["SECOND_NAME"];
$profile['CUSTOMER'] = true;
}
}
return $profile;
}
function getUserCategory($catID) {
if ($catID>0) {
$rsEnum = CUserFieldEnum::GetList(array(), array("ID" =>$catID));
if ($arEnum = $rsEnum->GetNext())
return $arEnum['~VALUE'];
}
return "";
}
/**
* Возвращает аватар пользователя и его категорию
*/
function getUserMeta($userID) {
$arUserMeta = array();
$rsUser = CUser::GetByID($userID);
if ($arUser = $rsUser->GetNext()) {
// Тип профиля
if (in_array(MODERATOR_GROUP, CUser::GetUserGroup($userID)))
$arUserMeta['TYPE'] = 'Администрация';
else {
$rsEnum = CUserFieldEnum::GetList(array(), array("ID" =>$arUser['UF_USR']));
if ($arEnum = $rsEnum->GetNext())
$arUserMeta['TYPE'] = $arEnum['~VALUE'];
}
// Online
$arUserMeta['ONLINE'] = CUser::IsOnLine($userID);
// Аватара
if ($arUser['PERSONAL_PHOTO']>0)
$arUserMeta['AVATAR'] = CFile::GetPath($arUser['PERSONAL_PHOTO']);
else
$arUserMeta['AVATAR'] = updateUserAvatar($userID);
// LAST_ACTIVITY_DATE
$arUserMeta['LAST_ACTIVITY_DATE'] = $arUser['LAST_ACTIVITY_DATE'];
$arUserMeta['NAME'] = $arUser['SECOND_NAME'];
}
return $arUserMeta;
}
/**
* Возвращает аватар пользователя, если нет - создает из профиля, если нет - показывает по умолчанию
*/
function getUserAvatar($userID) {
$rsUser = CUser::GetByID($userID);
if ($arUser = $rsUser->GetNext()) {
if ($arUser['PERSONAL_PHOTO']>0)
return CFile::GetPath($arUser['PERSONAL_PHOTO']);
else
return updateUserAvatar($userID);
}
}
/**
* Устанавливет аватар пользователя из профиля
*/
function updateUserAvatar($userID) {
$res = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "PROPERTY_ACCOUNT"=>$userID),
false, false, array("ID", "IBLOCK_ID", "DETAIL_PICTURE"));
if($ar_fields = $res->GetNext()) {
$fields = array('PERSONAL_PHOTO' => CFile::MakeFileArray($ar_fields['DETAIL_PICTURE']));
$user = new CUser;
$user->Update($userID, $fields);
return CFile::GetPath($ar_fields['DETAIL_PICTURE']);
}
return false;
}
/*
Постинг отклика
*/
function sendMailResponse($userID, $feedback_casting_id, $feedback_text) {
$arResult = array();
$profile = getUserProfile($userID);
$rsCasting = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>12, "ID"=>$feedback_casting_id), false, false,
array("IBLOCK_ID", "ID", "NAME", "IBLOCK_SECTION_ID", "PROPERTY_CONTACT_NAME", "PROPERTY_CONTACT_EMAIL"));
if ($arCasting = $rsCasting->GetNext()) {
$feebackText = strip_tags($feedback_text);
$arFeedbackFields = array(
'IBLOCK_ID' => 14,
'NAME' => $profile['NAME'].' -> #'.$arCasting['ID'],
'DETAIL_TEXT' => $feebackText,
'PROPERTY_VALUES' => array('VACANCY' => $arCasting['ID'], 'USER_ID' => $userID)
);
$el = new CIBlockElement;
if($feebackID = $el->Add($arFeedbackFields,false,false,false)) {
$arResult['OK'] = $arFeedbackFields;
$rsUser = CUser::GetById($userID);
if($arUser = $rsUser->GetNext())
{
$r = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "PROPERTY_ACCOUNT"=>$userID, "ACTIVE"=>'Y'), false, false,
array("IBLOCK_ID", "ID", "NAME", "CODE", "DETAIL_PICTURE", "DETAIL_TEXT", "IBLOCK_SECTION_ID", "PROPERTY_*"));
if ($ob = $r->GetNextElement()){
$ar_fields = $ob->GetFields();
$pr_avatar = CFile::GetPath($ar_fields["DETAIL_PICTURE"]);
$pr_code = SITE_DIR.$ar_fields['CODE']."/";
$db_list = CIBlockSection::GetList(Array(),
Array("IBLOCK_ID"=>IBLOCK_PORTFOLIO_ID, "DEPTH_LEVEL"=>1, "UF_PORTF_USR"=>$ar_fields['ID']), false,
array("IBLOCK_ID", "ID", "UF_PORTF_USR")
);
if ($ar_result = $db_list->GetNext()) $sid = $ar_result["ID"];
$r_port = CIBlockElement::GetList(Array("RAND"=>"ASC"), Array("IBLOCK_ID"=>IBLOCK_PORTFOLIO_ID, "SECTION_ID"=>$sid, "INCLUDE_SUBSECTIONS"=>"Y"), false, array("nTopCount"=>9),
array("IBLOCK_ID", "ID", "NAME", "CODE", "DETAIL_PICTURE", "DETAIL_TEXT", "IBLOCK_SECTION_ID", "PROPERTY_*"));
while ($ar_res_port = $r_port->GetNext()) {
$ar_port_path[] = CFile::GetPath($ar_res_port['DETAIL_PICTURE']);
};
$ar_props = $ob->GetProperties();
$pr_age = $ar_props["AGE"]["VALUE"];
$pr_height = $ar_props["HEIGHT"]["VALUE"];
$pr_weight = $ar_props["WEIGHT"]["VALUE"];
$pr_breast = $ar_props["BREAST"]["VALUE"];
$pr_waist = $ar_props["WAIST"]["VALUE"];
$pr_hip = $ar_props["HIP"]["VALUE"];
$arFilter = Array("ID"=>$ar_props["REGION"]["VALUE"]);
$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID", "PROPERTY_NAME_RU");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
if($ar_res = $res->GetNext()) {$nam_reg = (isset($ar_res["PROPERTY_NAME_RU_VALUE"]) && SITE_ID == "ru") ?
$ar_res["PROPERTY_NAME_RU_VALUE"] : $ar_res["NAME"]; $region = $nam_reg; $s_ida=$ar_res["IBLOCK_SECTION_ID"];}
if (isset($s_ida)){
$arFilter = Array("ID"=>$s_ida, "IBLOCK_ID"=>6);
$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID", "UF_NAME_RU");
$res = CIBlockSection::GetList(Array(), $arFilter, false, $arSelect, false);
if($ar_res = $res->GetNext()) {$s_idb=$ar_res["IBLOCK_SECTION_ID"]; if (IntVal($s_idb) == 31){$nam_reg =
(isset($ar_res["UF_NAME_RU"]) && SITE_ID == "ru") ? $ar_res["UF_NAME_RU"] : $ar_res["NAME"]; $region = $region.", ".$nam_reg;};}
};
if (isset($s_idb)){
$arFilter = Array("ID"=>$s_idb, "IBLOCK_ID"=>6);
$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID", "UF_NAME_RU");
$res = CIBlockSection::GetList(Array(), $arFilter, false, $arSelect, false);
if($ar_res = $res->GetNext()) {$nam_reg = (isset($ar_res["UF_NAME_RU"]) && SITE_ID == "ru") ?
$ar_res["UF_NAME_RU"] : $ar_res["NAME"]; $region = $region.", ".$nam_reg; $s_idc=$ar_res["IBLOCK_SECTION_ID"];}
};
}
$arFields = array(
"CASTING_CONTACT_EMAIL" => $arCasting['PROPERTY_CONTACT_EMAIL_VALUE'],
"CASTING_CONTACT_NAME" => $arCasting['PROPERTY_CONTACT_NAME_VALUE'],
"CASTING_NAME" => $arCasting['NAME'],
"CASTING_ID" => $arCasting['ID'],
"FEEDBACK_TEXT" => $feebackText,
"PROFILE_NAME" => $arUser["NAME"],
"PROFILE_AVATAR" => $pr_avatar,
"PROFILE_AGE" => $pr_age,
"PROFILE_LAST_NAME" => $arUser["LAST_NAME"],
"PROFILE_REGION" => $region,
"PROFILE_PHONE" => $arUser["PERSONAL_MOBILE"],
"PROFILE_EMAIL" => $arUser["PERSONAL_MAILBOX"],
"PROFILE_HEIGHT" => $pr_height,
"PROFILE_WEIGHT" => $pr_weight,
"PROFILE_BREAST" => $pr_breast,
"PROFILE_WAIST" => $pr_waist,
"PROFILE_HIP" => $pr_hip,
"FEEDBACK_URL" => $pr_code,
"PROFILE_PORTFOLIO_1" => (isset($ar_port_path[0]) && strlen($ar_port_path[0])>0) ? $ar_port_path[0] : "",
"PROFILE_PORTFOLIO_2" => (isset($ar_port_path[1]) && strlen($ar_port_path[1])>0) ? $ar_port_path[1] : "",
"PROFILE_PORTFOLIO_3" => (isset($ar_port_path[2]) && strlen($ar_port_path[2])>0) ? $ar_port_path[2] : "",
"PROFILE_PORTFOLIO_4" => (isset($ar_port_path[3]) && strlen($ar_port_path[3])>0) ? $ar_port_path[3] : "",
"PROFILE_PORTFOLIO_5" => (isset($ar_port_path[4]) && strlen($ar_port_path[4])>0) ? $ar_port_path[4] : "",
"PROFILE_PORTFOLIO_6" => (isset($ar_port_path[5]) && strlen($ar_port_path[5])>0) ? $ar_port_path[5] : "",
"PROFILE_PORTFOLIO_7" => (isset($ar_port_path[6]) && strlen($ar_port_path[6])>0) ? $ar_port_path[6] : "",
"PROFILE_PORTFOLIO_8" => (isset($ar_port_path[7]) && strlen($ar_port_path[7])>0) ? $ar_port_path[7] : "",
"PROFILE_PORTFOLIO_9" => (isset($ar_port_path[8]) && strlen($ar_port_path[8])>0) ? $ar_port_path[8] : "",
"ROW_3" => count($ar_port_path)<=6 ? " display: none;" : "",
);
$event = new CEvent;
$event->SendImmediate("CASTING_FEEDBACK", SITE_ID, $arFields);
};
}
else {
$arResult['ERRORS'] = GetMessage("ERROR_AT_SAVING").'(14): '.$el->LAST_ERROR;
};
// Обновляем счетчик
$cnt = CIBlockElement::GetList(array(),array('IBLOCK_ID' => 14, 'PROPERTY_VACANCY' => $arCasting['ID']),array());
CIBlockElement::SetPropertyValuesEx($arCasting['ID'], $arCasting['IBLOCK_ID'], array('FEEDBACK_COUNT'=>$cnt));
// Шлем уведомление
$arMessageFields = array(
"TO_USER_ID" => $arCasting['CREATED_BY'],
"FROM_USER_ID" => 0,
"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
"NOTIFY_MODULE" => "im",
"NOTIFY_MESSAGE" => GetMessage("NEW_RESPONSE_FROM").$profile['NAME'].GetMessage("ON_YOUR_VACANCY").'"'.$arCasting['NAME'].'": '.$feebackText
);
CIMNotify::Add($arMessageFields);
}
else {$arResult['ERRORS'] = GetMessage("AD").'#'.$feedback_casting_id.GetMessage("FOR_RESPONSE_IS_NOT_FOUND");};
return $arResult;
}
/*
* Отправляем уведомление о новом отзыве профиля или комментарии к фотографйии
*/
AddEventHandler("forum", "onAfterMessageAdd", "onAfterMessageAddHandler");
function onAfterMessageAddHandler($id, $message, $topic, $forum, $params) {
//AddMessage2Log(print_r($message,true).print_r($params,true),'rating.vote');
$msg = strlen($message['POST_MESSAGE'])>50? substr($message['POST_MESSAGE'],0,49).'...':$params['POST_MESSAGE'];
if ($message['FORUM_ID']==3) { // Комментарий к фотографии
$res = CIBlockElement::GetByID($message['PARAM2']);
if($ar_res = $res->GetNext()) {
$ownerProf = getUserProfile($ar_res['CREATED_BY']);
$arMessageFields = array(
"TO_USER_ID" => $ar_res['CREATED_BY'],
"FROM_USER_ID" => 0,
"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
"NOTIFY_MODULE" => "im",
"NOTIFY_MESSAGE" => 'Новый отзыв к <a href="'.
$ownerProf['LINK'].'?ShowPhoto='.$message['PARAM2'].
'#portfolio">фотографии в вашем портфолио</a> от '.$message['SECOND_NAME'].": ".$msg
);
CIMNotify::Add($arMessageFields);
//AddMessage2Log(print_r($arMessageFields,true),'rating.vote -> element');
}
}
elseif ($message['FORUM_ID']==2) { // Комментарий к профилю
$res = CIBlockElement::GetByID($message['PARAM2']);
if($ar_res = $res->GetNext()) {
$ownerProf = getUserProfile($ar_res['CREATED_BY']);
$arMessageFields = array(
"TO_USER_ID" => $ar_res['CREATED_BY'],
"FROM_USER_ID" => 0,
"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
"NOTIFY_MODULE" => "im",
"NOTIFY_MESSAGE" => 'Новый отзыв к <a href="'.$ownerProf['LINK'].'#portfolio">вашему профилю</a> от '.$message['SECOND_NAME'].": ".$msg
);
CIMNotify::Add($arMessageFields);
//AddMessage2Log(print_r($arMessageFields,true),'rating.vote -> element');
}
}
}
/*
* Отправляем уведомление о новом лайке фотографии
*/
AddEventHandler("main", "OnAddRatingVote", "OnAddRatingVoteHandler");
function OnAddRatingVoteHandler($id, $arParam) {
//AddMessage2Log(print_r($arParam,true),'rating.vote');
if ($arParam['ENTITY_TYPE_ID']=='IBLOCK_ELEMENT') {
$res = CIBlockElement::GetByID($arParam['ENTITY_ID']);
if($ar_res = $res->GetNext()) {
// AddMessage2Log(print_r($ar_res['USER_ID'],true),'rating.vote -> element');
$userProf = getUserProfile($arParam['USER_ID']);
$ownerProf = getUserProfile($ar_res['CREATED_BY']);
$arMessageFields = array(
"TO_USER_ID" => $ar_res['CREATED_BY'],
"FROM_USER_ID" => 0,
"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
"NOTIFY_MODULE" => "im",
"NOTIFY_MESSAGE" => 'Новый лайк <a href="'.
$ownerProf['LINK'].'?ShowPhoto='.$arParam['ENTITY_ID'].
'#portfolio">фотографии в вашем портфолио</a> от '.$userProf['NAME'].'.'
);
CIMNotify::Add($arMessageFields);
//AddMessage2Log(print_r($arMessageFields,true),'rating.vote -> element');
}
}
}
/*
* Устанавливает логин равны емайлу
*/
AddEventHandler("main", "OnBeforeUserRegister", "OnBeforeUserUpdateHandler");
AddEventHandler("main", "OnBeforeUserUpdate", "OnBeforeUserUpdateHandler");
function OnBeforeUserUpdateHandler(&$arFields) {
$arFields["LOGIN"] = $arFields["EMAIL"];
return $arFields;
}
AddEventHandler("main", "OnAfterUserUpdate", "OnAfterUserUpdateHandler");
function OnAfterUserUpdateHandler(&$arFields)
{
global $USER;
if($arFields["ID"] > 0)
{
if (isCustomer())
{
$arGroups = CUser::GetUserGroup($arFields["ID"]);
if (!in_array(GROUP_MORE_ID, $arGroups))
{
$arGroups[] = GROUP_MORE_ID;
CUser::SetUserGroup($arFields["ID"], $arGroups);
};
}
else
{
$arSelect = Array("ID", "NAME", "DETAIL_PICTURE", "PROPERTY_ACCOUNT", "PROPERTY_FNAME", "PROPERTY_LNAME",
"PROPERTY_COUNTRY", "PROPERTY_REGION", "PROPERTY_BDATE");
$arFilter = Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "ACTIVE"=>"Y", "PROPERTY_ACCOUNT" => intval($arFields["ID"]));
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nTopCount"=>1), $arSelect);
if($ob = $res->GetNext())
{
$ar_res[] = $ob;
$arGroups = CUser::GetUserGroup($arFields["ID"]);
if (in_array(GROUP_MORE_ID, $arGroups)) {
if (
!isset($ar_res[0]["PROPERTY_FNAME_VALUE"]) || strlen($ar_res[0]["PROPERTY_FNAME_VALUE"]) <= 0 ||
!isset($ar_res[0]["PROPERTY_LNAME_VALUE"]) || strlen($ar_res[0]["PROPERTY_LNAME_VALUE"]) <= 0 ||
!isset($ar_res[0]["PROPERTY_COUNTRY_VALUE"]) || strlen($ar_res[0]["PROPERTY_COUNTRY_VALUE"]) <= 0 ||
!isset($ar_res[0]["PROPERTY_REGION_VALUE"]) || strlen($ar_res[0]["PROPERTY_REGION_VALUE"]) <= 0 ||
!isset($ar_res[0]["DETAIL_PICTURE"]) || strlen($ar_res[0]["DETAIL_PICTURE"]) <= 0 /*||
!isset($ar_res[0]["PROPERTY_BDATE_VALUE"]) || strlen($ar_res[0]["PROPERTY_BDATE_VALUE"]) <= 0*/
)
{
foreach ($arGroups as $key => $val)
{
if (intval($val) == GROUP_MORE_ID)
unset($arGroups[$key]);
};
CUser::SetUserGroup($arFields["ID"], $arGroups);
$USER->Authorize($USER->GetID());
};
}
elseif
(
isset($ar_res[0]["PROPERTY_FNAME_VALUE"]) && strlen($ar_res[0]["PROPERTY_FNAME_VALUE"]) > 0 &&
isset($ar_res[0]["PROPERTY_LNAME_VALUE"]) && strlen($ar_res[0]["PROPERTY_LNAME_VALUE"]) > 0 &&
isset($ar_res[0]["PROPERTY_COUNTRY_VALUE"]) && strlen($ar_res[0]["PROPERTY_COUNTRY_VALUE"]) > 0 &&
isset($ar_res[0]["PROPERTY_REGION_VALUE"]) && strlen($ar_res[0]["PROPERTY_REGION_VALUE"]) > 0 &&
isset($ar_res[0]["DETAIL_PICTURE"]) && strlen($ar_res[0]["DETAIL_PICTURE"]) > 0 /*&&
isset($ar_res[0]["PROPERTY_BDATE_VALUE"]) && strlen($ar_res[0]["PROPERTY_BDATE_VALUE"]) > 0*/
)
{
$arGroups[] = GROUP_MORE_ID;
CUser::SetUserGroup($arFields["ID"], $arGroups);
$USER->Authorize($USER->GetID());
}
else {};
}
//AddMessage2Log(print_r($arGroups,true));
unset($ar_res);
};
};
};
AddEventHandler("main", "OnBeforeUserLogin", Array("MyClass", "OnBeforeUserLoginHandler"));
class MyClass
{
// создаем обработчик события "OnBeforeUserLogin"
function OnBeforeUserLoginHandler(&$arFields)
{
global $APPLICATION;
$rsUser = CUser::GetByLogin(trim($arFields["LOGIN"]));
if($arUser = $rsUser->GetNext())
{
$r = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "PROPERTY_ACCOUNT"=>$arUser['ID'], "ACTIVE"=>'Y'), false, false,
array("IBLOCK_ID", "ID", "NAME", "CODE", "IBLOCK_SECTION_ID", "PROPERTY_TYPE", "PROPERTY_TYPE_P4"));
if ($ar_res = $r->GetNext())
{
if ((SITE_ID == "p4" || SITE_ID == "ru") && (!isset($ar_res["PROPERTY_TYPE_P4_VALUE"]) || intval($ar_res["PROPERTY_TYPE_P4_VALUE"])<=0)) {
$APPLICATION->throwException(GetMessage("YOU_CAN_NOT_LOG_IN_UB"));
return false;
} elseif ((SITE_ID == "s1" || SITE_ID == "dv") && (!isset($ar_res["PROPERTY_TYPE_VALUE"]) || intval($ar_res["PROPERTY_TYPE_VALUE"])<=0))
{
$APPLICATION->throwException(GetMessage("YOU_CAN_NOT_LOG_IN_P4"));
return false;
};
};
}
}
}
// получить имя свойства по ID и языку
function get_property_name($id, $lang)
{
CModule::IncludeModule('iblock');
$arRes = array();
$arFilter = Array("IBLOCK_ID"=>IBLOCK_MULTILANG_ID, "UF_ID"=>intval($id));
$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID", "UF_RU", "UF_EN",
"UF_DE", "UF_FR", "UF_ES");
$res = CIBlockSection::GetList(Array(), $arFilter, false, $arSelect, false);
if ($ar_res = $res->GetNext()) {
if (isset($ar_res["UF_".strtoupper($lang)])){
$arRes['OK'] = true;
$arRes['NAME'] = $ar_res["UF_".strtoupper($lang)];
} else {
$arRes['OK'] = false;
$arRes['ERROR_MESSAGE'] = "Invalid language. Please use 'ru', 'en', 'de', 'fr', 'es'.";
};
} else {
$arRes['OK'] = false;
$arRes['ERROR_MESSAGE'] = "Invalid property id";
};
return $arRes;
}
// получить список значений свойства по его коду и ID ИБ
function get_property_enum_list($iblock_id, $code)
{
CModule::IncludeModule('iblock');
$arRes = array();
$arFilter = Array("CODE"=>$code, "IBLOCK_ID"=>intval($iblock_id));
$prop_res = CIBlockProperty::GetList(Array(), $arFilter);
if ($ar_res = $prop_res->GetNext()) {
$prop_id = $ar_res['ID'];
} else {
$arRes['OK'] = false;
$arRes['ERROR_MESSAGE'] = "Invalid property code";
};
if (isset($prop_id)) {
$arFilter = Array("IBLOCK_ID" => IBLOCK_MULTILANG_ID, "UF_ID" => $prop_id);
$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID");
$sect_res = CIBlockSection::GetList(Array(), $arFilter, false, $arSelect, false);
if ($ar_res = $sect_res->GetNext()) {
$sect_id = $ar_res['ID'];
} else {
$arRes['OK'] = false;
$arRes['ERROR_MESSAGE'] = "Invalid property code";
};
if (isset($sect_id)) {
$arFilter = Array("IBLOCK_ID" => IBLOCK_MULTILANG_ID, "SECTION_ID" => $sect_id);
$arSelect = Array("ID", "NAME", "IBLOCK_ID", "PROPERTY_DE", "PROPERTY_EN",
"PROPERTY_ES", "PROPERTY_FR", "PROPERTY_RU", "PROPERTY_VALUE_ID");
$el_res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while ($ar_res = $el_res->GetNext()) {
$arRes["VALUES"][] = array(
"ID"=> $ar_res["PROPERTY_VALUE_ID_VALUE"],
"NAME_EN"=> $ar_res["PROPERTY_EN_VALUE"],
"NAME_RU"=> $ar_res["PROPERTY_RU_VALUE"],
"NAME_DE"=> $ar_res["PROPERTY_DE_VALUE"],
"NAME_FR"=> $ar_res["PROPERTY_FR_VALUE"],
"NAME_ES"=> $ar_res["PROPERTY_ES_VALUE"]
);
}
if (sizeof($arRes["VALUES"]) > 0) {
$arRes['OK'] = true;
};
}
};
return $arRes;
}
// получить значение свойства по ID и языку
function get_property_value($id, $lang)
{
CModule::IncludeModule('iblock');
$arRes = array();
$arFilter = Array("IBLOCK_ID"=>IBLOCK_MULTILANG_ID, "PROPERTY_VALUE_ID"=>intval($id));
$arSelect = Array("ID", "NAME", "IBLOCK_ID", "PROPERTY_DE", "PROPERTY_EN",
"PROPERTY_ES", "PROPERTY_FR", "PROPERTY_RU");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
if ($ar_res = $res->GetNext()) {
if (isset($ar_res["PROPERTY_".strtoupper($lang)."_VALUE"])){
$arRes['OK'] = true;
$arRes['VALUE'] = $ar_res["PROPERTY_".strtoupper($lang)."_VALUE"];
} else {
$arRes['OK'] = false;
$arRes['ERROR_MESSAGE'] = "Invalid language. Please use 'ru', 'en', 'de', 'fr', 'es'.";
};
} else {
$arRes['OK'] = false;
$arRes['ERROR_MESSAGE'] = "Invalid value id";
};
return $arRes;
}
// получить телефонный код страны по id
function get_country_code($idc){
CModule::IncludeModule('iblock');
$arRes = array();
$country_code = 0;
$arFilter = Array("ID"=>intval($idc));
$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID", "PROPERTY_NAME_RU");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
if($ar_res = $res->GetNext()) {
$s_ida=$ar_res["IBLOCK_SECTION_ID"];
}
if (isset($s_ida)){
$arFilter = Array("ID"=>$s_ida, "IBLOCK_ID"=>6);
$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID", "UF_PHONE_CODE");
$res = CIBlockSection::GetList(Array(), $arFilter, false, $arSelect, false);
if($ar_res = $res->GetNext()) {
$s_idb = $ar_res["IBLOCK_SECTION_ID"];
if (intval($ar_res["UF_PHONE_CODE"]) > 0)
$country_code = $ar_res["UF_PHONE_CODE"];
}
};
if (isset($s_idb)){
$arFilter = Array("ID"=>$s_idb, "IBLOCK_ID"=>6);
$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID", "UF_PHONE_CODE");
$res = CIBlockSection::GetList(Array(), $arFilter, false, $arSelect, false);
if($ar_res = $res->GetNext()) {
if (intval($ar_res["UF_PHONE_CODE"])>0)
$country_code = $ar_res["UF_PHONE_CODE"];
}
};
if($country_code > 0){
$arRes['OK'] = true;
$arRes['PHONE_CODE'] = intval($country_code);
}
else{
$arRes['OK'] = false;
$arRes['ERROR_MESSAGE'] = "Invalid CITY_ID";
};
return $arRes;
};
// добавить оценку приложения в ИБ
function add_app_mark($theme, $text, $mark, $email){
global $USER;
CModule::IncludeModule('iblock');
$el = new CIBlockElement;
$PROP = array();
$PROP[261] = intval($mark);
$PROP[262] = trim($email);
$arLoadProductArray = Array(
"MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем
"IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела
"IBLOCK_ID" => 31,
"PROPERTY_VALUES"=> $PROP,
"NAME" => $theme,
"ACTIVE" => "Y", // активен
"PREVIEW_TEXT" => $text,
);
$arRes = array();
if($PRODUCT_ID = $el->Add($arLoadProductArray)){
$arRes['OK'] = true;
}
else{
$arRes['OK'] = false;
$arRes['ERROR_MESSAGE'] = $el->LAST_ERROR;
};
return $arRes;
};
function generate_password($number, $onlyDigits = true) {
if ($onlyDigits)
$arr = array(
'1','2','3','4','5','6',
'7','8','9','0'
);
else
$arr = array(
'a','b','c','d','e','f',
'g','h','i','j','k','l',
'm','n','o','p','r','s',
't','u','v','x','y','z',
/*
'A','B','C','D','E','F',
'G','H','I','J','K','L',
'M','N','O','P','R','S',
'T','U','V','X','Y','Z',
*/
'1','2','3','4','5','6',
'7','8','9','0'
/*
,'.',',',
'(',')','[',']','!','?',
'&','^','%','@','*','$',
'<','>','/','|','+','-',
'{','}','`','~'
*/
);
$pass = "";
for($i = 0; $i < $number; $i++) {
$index = rand(0, count($arr) - 1);
$pass .= $arr[$index];
}
return $pass;
}
// генерация кода подтверждения
function generate_confirm_code($number) {
$arr = array('1','2','3','4','5','6','7','8','9','0');
$pass = "";
for($i = 0; $i < $number; $i++) {
$index = rand(0, count($arr) - 1);
$pass .= $arr[$index];
}
return $pass;
}
AddEventHandler("main", "OnBeforeUserSendPassword", "MyOnBeforeUserSendPasswordHandler");
function MyOnBeforeUserSendPasswordHandler(&$arFields)
{
global $APPLICATION;
$rsUser = CUser::GetByLogin(trim($_REQUEST['USER_LOGIN']));
if($arUser = $rsUser->GetNext())
{
$r = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IBLOCK_PROFILE_ID, "PROPERTY_ACCOUNT"=>$arUser['ID'], "ACTIVE"=>'Y'), false, false,
array("IBLOCK_ID", "ID", "NAME", "CODE", "IBLOCK_SECTION_ID", "PROPERTY_TYPE", "PROPERTY_TYPE_P4"));
if ($ar_res = $r->GetNext())
{
if ((SITE_ID == "p4" || SITE_ID == "ru") && (!isset($ar_res["PROPERTY_TYPE_P4_VALUE"]) || intval($ar_res["PROPERTY_TYPE_P4_VALUE"])<=0)) {
$APPLICATION->throwException(GetMessage("YOU_CAN_NOT_LOG_IN_UB"));
return false;
} elseif ((SITE_ID == "s1" || SITE_ID == "dv") && (!isset($ar_res["PROPERTY_TYPE_VALUE"]) || intval($ar_res["PROPERTY_TYPE_VALUE"])<=0))
{
$APPLICATION->throwException(GetMessage("YOU_CAN_NOT_LOG_IN_P4"));
return false;
};
};
if(SITE_ID == "p4" || SITE_ID == "ru"){
if($arUser["ACTIVE"] === "Y"){
$newPass = generate_password(6);
$obUser = new CUser;
$obUser->Update($arUser['ID'], array("PASSWORD" => $newPass, "CONFIRM_PASSWORD" => $newPass));
$arFields = array(
"USER_ID" => $arUser["ID"],
"LOGIN" => $arUser["LOGIN"],
"EMAIL" => $arUser["EMAIL"],
"NAME" => $arUser["NAME"],
"LAST_NAME" => $arUser["LAST_NAME"],
"CHECKWORD" => $newPass,
);
$event = new CEvent;
$event->SendImmediate("USER_PASS_REQUEST", SITE_ID, $arFields);
} else {
$APPLICATION->throwException("Email не подтвержден");
return false;
};
}
} else {
$APPLICATION->throwException("Неверный email");
return false;
};
}
AddEventHandler("main", "OnAfterUserRegister", "MyOnAfterUserRegisterHandler");
function MyOnAfterUserRegisterHandler(&$arFields)
{
if ($arFields["USER_ID"]>0) {
if (SITE_ID == "p4" || SITE_ID == "ru") {
if (strpos($_SERVER['REQUEST_URI'], "app") > 0) {
$us_login = trim($_REQUEST['EMAIL']);
$type_post_templ = "NEW_USER_APP_CONFIRM";
} else {
$us_login = trim($_REQUEST['REGISTER']['EMAIL']);
$type_post_templ = "NEW_USER_PUBLIC_CONFIRM";
};
$rsUser = CUser::GetByLogin($us_login);
if ($arUser = $rsUser->GetNext()) {
$confirmCode = generate_confirm_code(5);
$obUser = new CUser;
$obUser->Update($arUser["ID"], array("CONFIRM_CODE" => $confirmCode));
$arEventFields = array(
"USER_ID" => $arUser["ID"],
"LOGIN" => $arUser["LOGIN"],
"EMAIL" => $arUser["EMAIL"],
"NAME" => $arUser["NAME"],
"LAST_NAME" => $arUser["LAST_NAME"],
"CONFIRM_CODE" => $confirmCode,
);
$event = new CEvent;
$event->SendImmediate($type_post_templ, SITE_ID, $arEventFields);
};
};
};
}