Commit 3f784168 authored by Telenkov Ruslan's avatar Telenkov Ruslan

this is form api task

parent 3511cc59
...@@ -28,14 +28,30 @@ class FormApiTask extends FormBase { ...@@ -28,14 +28,30 @@ class FormApiTask extends FormBase {
'#type' => 'textfield', '#type' => 'textfield',
'#title' => t('Name:'), '#title' => t('Name:'),
); );
$form['email'] = [
'#title' => 'Email',
'#type' => 'email',
];
$form['radio'] = array(
'#type' => 'radios',
'#title' => t('Наличие сайта'),
'#options' => array('1' => 'У меня есть сайт', '2' => 'У меня нет сайта'),
'#default_value' => 'У меня нет сайта',
);
$form['site_address'] = array ( $form['site_address'] = array (
'#type' => 'textfield', '#type' => 'textfield',
'#title' => ('Site address:'), '#title' => ('Site address:'),
'#states' => array(
'visible' => array(
':input[name = "radio"]' => array(
'value' => '1',
),
),
),
); );
$form['system_messages'] = [
'#markup' => '<div id="form-system-messages"></div>',
'#weight' => -100,
];
$form['actions']['#type'] = 'actions'; $form['actions']['#type'] = 'actions';
$form['actions']['submit'] = [ $form['actions']['submit'] = [
'#type' => 'submit', '#type' => 'submit',
...@@ -50,11 +66,7 @@ class FormApiTask extends FormBase { ...@@ -50,11 +66,7 @@ class FormApiTask extends FormBase {
], ],
]; ];
$form['email'] = [
'#title' => 'Email',
'#type' => 'email',
'#required' => TRUE,
];
return $form; return $form;
} }
...@@ -75,47 +87,49 @@ class FormApiTask extends FormBase { ...@@ -75,47 +87,49 @@ class FormApiTask extends FormBase {
$response->addCommand(new RemoveCommand($selector)); $response->addCommand(new RemoveCommand($selector));
//ВАЛИДАЦИЯ адреса сайта //ВАЛИДАЦИЯ адреса сайта
$reg = '/(https?:\/\/)?(www.)?([\da-z\.-]+)\.([a-z\.]{2,6})/ui'; //она зависит от того, выбрал ли я нужную радиокнопку. Если выбрано "у меня нет сайта" , то валидация не нужна
if(preg_match($reg, $form_state->getValue('site_address'),$array_of_site_address)) if ($form_state->getValue('radio') === '1') {
{ $reg = '/(https?:\/\/)?(www.)?([\da-z\.-]+)\.([a-z\.]{2,6})/ui';
// Если пользователь повторно ввел все нормально в это поле, то при сабмите сбросим красную рамку if (preg_match($reg, $form_state->getValue('site_address'), $array_of_site_address)) {
if (end($array_of_site_address) === 'ru' || end($array_of_site_address) === 'рф'){ // Если пользователь повторно ввел все нормально в это поле, то при сабмите сбросим красную рамку
$style = '<style>#edit-site-address{border:1px solid grey !important;}</style>'; if (end($array_of_site_address) === 'ru' || end($array_of_site_address) === 'рф') {
$response->addCommand(new AddCssCommand($style)); $style = '<style>#edit-site-address{border:1px solid grey !important;}</style>';
// при успешной валидации убираем из результата http или https или www $response->addCommand(new AddCssCommand($style));
// при успешной валидации убираем из результата http или https или www
$result = preg_replace('/((https?:\/\/)||(www\.))/ui', '', $form_state->getValue('site_address'));
$valid_site_address = true; $result = preg_replace('/((https?:\/\/)||(www\.))/ui', '', $form_state->getValue('site_address'));
$valid_site_address = true;
}
else { } else {
//ошибка домена //ошибка домена
$style = '<style>#edit-site-address{border:3px solid red}</style>';
$response->addCommand(new AddCssCommand($style));
$selector = '#edit-site-address';
$content = '<p class = "domen-error">Вы ввели неправильную доменную зону, необходимая зона: "рф" или "ru"</p>';
$response->addCommand(new AfterCommand($selector, $content));
$style = '<style>.domen-error{color: red !important;}</style>';
$response->addCommand(new AddCssCommand($style));
}
} else {
//ошибка ввода самого адреса
$style = '<style>#edit-site-address{border:3px solid red}</style>'; $style = '<style>#edit-site-address{border:3px solid red}</style>';
$response->addCommand(new AddCssCommand($style)); $response->addCommand(new AddCssCommand($style));
$selector = '#edit-site-address'; $selector = '#edit-site-address';
$content = '<p class = "domen-error">Вы ввели неправильную доменную зону, необходимая зона: "рф" или "ru"</p>'; if ($form_state->getValue('site_address') == NULL) {
$content = '<p class = "domen-error">Необходимо ввести адрес сайта</p>';
} else {
$content = '<p class = "domen-error">Вы ввели адрес неправильно, пример адреса "www.example.ru"</p>';
}
$response->addCommand(new AfterCommand($selector, $content)); $response->addCommand(new AfterCommand($selector, $content));
$style = '<style>.domen-error{color: red !important;}</style>'; $style = '<style>.domen-error{color: red !important;}</style>';
$response->addCommand(new AddCssCommand($style)); $response->addCommand(new AddCssCommand($style));
} }
} }
else { else {
//ошибка ввода самого адреса $radio = true;
$style = '<style>#edit-site-address{border:3px solid red}</style>'; $result = '';
$response->addCommand(new AddCssCommand($style));
$selector = '#edit-site-address';
if ($form_state->getValue('site_address') == NULL){
$content = '<p class = "domen-error">Необходимо ввести адрес сайта</p>';
}
else {
$content = '<p class = "domen-error">Вы ввели адрес неправильно, пример адреса "www.example.ru"</p>';
}
$response->addCommand(new AfterCommand($selector, $content));
$style = '<style>.domen-error{color: red !important;}</style>';
$response->addCommand(new AddCssCommand($style));
} }
// ВАЛИДАЦИЯ email // ВАЛИДАЦИЯ email
if (filter_var($form_state->getValue('email'), FILTER_VALIDATE_EMAIL)) if (filter_var($form_state->getValue('email'), FILTER_VALIDATE_EMAIL))
{ {
...@@ -164,7 +178,7 @@ class FormApiTask extends FormBase { ...@@ -164,7 +178,7 @@ class FormApiTask extends FormBase {
//после валидации обращаюсь к БД и заполняю поля у таблицы //после валидации обращаюсь к БД и заполняю поля у таблицы
if ($valid_email && $valid_name && $valid_site_address){ if ($valid_email && $valid_name && ($valid_site_address || $radio)){
$connection = \Drupal::service('database'); $connection = \Drupal::service('database');
$result = $connection->insert('students') $result = $connection->insert('students')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment