Битрикс — закрытый раздел на сайте с авторизацией и регистрацией

16.06.2018  08:42

Задача: сделать на сайте закрытый раздел, видимый только определённой группе пользователей — дилеры.

JS:
  $("#partnerfrm").submit(function() {
    var th = $(this);
	$(".form-result").remove();
    $.ajax({
      type: "POST",
      url: "/ajax/partner_form.php", 
      data: th.serialize()
    }).done(function(data) {
	  if (data == 'ok') {
		th.append('
Спасибо! Ваша заявка принята,
Скоро мы свяжемся с вами по указанным e-mail и телефону
'); setTimeout(function() { // Done th.trigger("reset");//очистка формы }, 1000); } else { th.append('
'+data+'
'); } }); return false; });

Обработчик формы регистрации:
//пролог, куда ж без него:
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
$APPLICATION->RestartBuffer();
if($_REQUEST/* && check_bitrix_sessid()*/) {
   $arReqFields = Array("AUTHOR_NAME");//NAME
	if(empty($_REQUEST["name"])) {$arResult["ERRORS"] = 'name';}
		//if(empty($_REQUEST["PHONE"])) {$arResult["ERRORS"] = 'user_phone';}
    if(strlen($arResult["ERRORS"]) <= 0) {			
        $arProp["AUTHOR"] = trim($_REQUEST["name"]);
        $arProp["PHONE"] = trim($_REQUEST["phone"]);
        $arProp["EMAIL"] = trim($_REQUEST["email"]);
        $arProp["COMPANY"] = trim($_REQUEST["company"]);
        $arProp["CITY"] = trim($_REQUEST["city"]);
        $arProp["MESSAGE"] = trim($_REQUEST["MESSAGE"]);
        $date = date("d.m.Y H:i:s");
CModule::IncludeModule('iblock');
$rsUser = CUser::GetByLogin($arProp["EMAIL"]);
$arUser = $rsUser->Fetch();
// проверка на существование пользователя
if (!empty($arUser["EMAIL"])) {
	$arResult["ERRORS"] = 'Пользователь с таким логином существует.';
	echo $arResult["ERRORS"];
	exit;
}
//генерация пароля длиной 7 символов
$pass = randString(7, array(
  "abcdefghijklnmopqrstuvwxyz",
  "ABCDEFGHIJKLNMOPQRSTUVWX­YZ",
  "0123456789",
  "!@#$%^&*()",
));
global $USER;
COption::SetOptionString("main","new_user_registration_email_confirmation","N");//выключим уведомление по email
COption::SetOptionString("main","captcha_registration","N");//выключим каптчу
//добавим пользователя с группами Гости и Дилеры (id 8 и 10)
$arFieldsUser = Array(
  "NAME"              => $arProp["AUTHOR"],
  // "LAST_NAME"         => "Иванов",
  "EMAIL"             => $arProp["EMAIL"],
  "LOGIN"             => $arProp["EMAIL"],
  "LID"               => "ru",
  "ACTIVE"            => "N",
  "GROUP_ID"          => array(8,10),
  "PASSWORD"          => $pass,
  "CONFIRM_PASSWORD"  => $pass,
  "WORK_COMPANY"  => $arProp["COMPANY"],
  "WORK_CITY"  => $arProp["CITY"],
);
$ID = $USER->Add($arFieldsUser);
// ShowMessage($arResult); // выводим результат в виде сообщения
COption::SetOptionString("main","new_user_registration_email_confirmation","Y");//включим уведомление по email обратно
COption::SetOptionString("main","captcha_registration","Y");//включим каптчу обратно
if(!empty($ID)){
$arGroups = Array(8,10);//лишний дубль, можно выкинуть
CUser::SetUserGroup($USER->GetID(), $arGroups);
$arResult["SUCCESS"] = 'ok';
$arProp["MESSAGE"] .= ' Новый пользователь: http://site/bitrix/admin/user_edit.php?lang=ru&ID='.$ID;
			$arEventFields = array(
				"DATE" => $date,
				"AUTHOR" => $arProp["AUTHOR"],
				"EMAIL" => $arProp["EMAIL"],
				"COMPANY" => $arProp["COMPANY"],
				"CITY" => $arProp["CITY"],
				"AUTHOR_EMAIL" => $arProp["EMAIL"],
				"MESSAGE" => $arProp["MESSAGE"],
				"PHONE" => $arProp["PHONE"],
			);
				CEvent::SendImmediate("PARTNER_FORM", Array("s1"), $arEventFields);//отправка письма админу
}else $arResult["ERRORS"] = 'Ошибка регистрации.';
    }
} else {
    $arResult["ERRORS"] = GetMessage("UNKNOWN_ERROR");
}
if ($arResult["SUCCESS"]) {
	echo 'ok';
}
else {
	if ($arResult["ERRORS"]) print_r($arResult["ERRORS"]);
}

После заполнения формы добавляется пользователь с группами Гости и Дилеры, но без флага активности (премодерация администратором), для удобства в письмо я добавил ссылку на этого юзера в админке.

Авторизация стандартным компонентом bitrix:system.auth.form

Ну и финально закроем раздел для всех кроме пользователей из группы Дилеры (id = 8): if ($USER->IsAuthorized() && in_array(8, $USER->GetUserGroupArray())){ ... }



перейти в Блог | Блог (стр. 2)

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): 1С-Битрикс 43  jQuery 19  PHP 55  web-программирование 79  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)