%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); }; }; }; }