Я хочу сделать вот что, чтобы пользователь с ролью Психолог, мог только создать одну ноду (тип материала: Психолог), и если он захочет создать вторую ноду, выскакивало сообщение "лимит превышен".Такое реализует модуль ENTITY LIMIT,но при лимите переадрисует на страницу доступ запрещен, а мне нужно чтобы было сообщение
<?php function limit_articles_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { // check if user is about to create new node of type page. Not called on edit if ($form_id == 'node_article_form') { $form['#validate'][] = '_node_page_form_custom_validate'; } }
// return if is admin $groups = \Drupal::currentUser()->getRoles(); foreach($groups as $group) { if($group == 'administrator') return true; }
// get current user id $user_uid = \Drupal::currentUser()->id();
// count number of nodes created by current user in last week $query = \Drupal::entityQuery('node'); $query->condition('type','article'); // Limit the type of node to check $query->condition('uid', $user_uid);
$count = $query->count()->execute();
// if number of posts reachs limit, stop the form from saving data if($count >= 1) { $form_state->setErrorByName('', t('Вы достигли предела @count статей.', array('@count' => $count))); }
}
?>
только работает когда сохраняю ноду, а как сделать при переходе node/add/article вылетало предупреждение?
Комментарии
А при чем тут business rules? Задача-то какая стоит? Ограничить доступ к материалу на основании роли?
Я хочу сделать вот что, чтобы пользователь с ролью Психолог, мог только создать одну ноду (тип материала: Психолог), и если он захочет создать вторую ноду, выскакивало сообщение "лимит превышен".Такое реализует модуль ENTITY LIMIT,но при лимите переадрисует на страницу доступ запрещен, а мне нужно чтобы было сообщение
Вот часть кода модуля Entity Limin файл entity_limit.module
<?php
function entity_limit_entity_create_access(AccountInterface $account, array $context, $entity_bundle) {
$result = TRUE;
if (!empty($context['entity_type_id'])) {
$result = \Drupal::service('entity_limit.inspector')->checkEntityLimitAccess(
$context['entity_type_id'],
$entity_bundle,
$account
);
}
return (
$result) ? AccessResult::neutral() : AccessResult::forbidden();}
?>
в строчке
<?phpreturn ($result) ? AccessResult::neutral() : AccessResult::forbidden();?>
если заменить
<?php: AccessResult::forbidden();?>
на переадрисацию какую нибудь сработает?никто не может подсказать?
Вот примерно
<?php
// return if is admin
// get current user id
// count number of nodes created by current user in last week
$count = $query->count()->execute();
// if number of posts reachs limit, stop the form from saving data
?>
function limit_articles_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id)
{
// check if user is about to create new node of type page. Not called on edit
if ($form_id == 'node_article_form') {
$form['#validate'][] = '_node_page_form_custom_validate';
}
}
function
_node_page_form_custom_validate(array &$form, \Drupal\Core\Form\FormStateInterface $form_state) {$groups = \Drupal::currentUser()->getRoles();
foreach($groups as $group) {
if($group == 'administrator')
return true;
}
$user_uid = \Drupal::currentUser()->id();
$query = \Drupal::entityQuery('node');
$query->condition('type','article'); // Limit the type of node to check
$query->condition('uid', $user_uid);
if($count >= 1) {
$form_state->setErrorByName('', t('Вы достигли предела @count статей.', array('@count' => $count)));
}
}
только работает когда сохраняю ноду, а как сделать при переходе node/add/article вылетало предупреждение?