Problem/Motivation

Currently, it is not possible to decide the order used for restrictions; UserRestrictionTypeBase::matchesValue() first looks for the first restriction which allows the entered value, storing in a local variable the restriction that forbids the entered value.

Proposed resolution

  • Add the weight entity key
  • Change the parent class of UserRestrictionsListBuilder to DraggableListBuilder
  • Change UserRestrictionTypeBase::matchesValue() to gather restrictions by weight (ascending order) and stop at the first matching restriction
Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

avpaderno created an issue. See original summary.

avpaderno’s picture

Assigned: Unassigned » avpaderno

avpaderno’s picture

Status: Active » Needs review
avpaderno’s picture

Status: Needs review » Needs work
avpaderno’s picture

The merge request causes the following exception, when the second user restriction is created; no exception is thrown when the first user restriction is added. In the latter case, the entity.user_restriction.collection form is correctly rendered.

TypeError: Drupal\Component\Utility\Html::escape(): Argument #1 ($text) must be of type string, array given, called in /var/www/drupal/web/core/lib/Drupal/Core/Render/Renderer.php on line 842 in Drupal\Component\Utility\Html::escape() (line 433 of /var/www/drupal/web/core/lib/Drupal/Component/Utility/Html.php).

This is the relative backtrace.

#0 /var/www/drupal/web/core/lib/Drupal/Core/Render/Renderer.php(842): Drupal\Component\Utility\Html::escape(Array)
#1 /var/www/drupal/web/core/lib/Drupal/Core/Render/Renderer.php(444): Drupal\Core\Render\Renderer->ensureMarkupIsSafe(Array)
#2 /var/www/drupal/web/core/lib/Drupal/Core/Render/Renderer.php(227): Drupal\Core\Render\Renderer->doRender(Array, Object(Drupal\Core\Render\RenderContext))
#3 /var/www/drupal/web/core/lib/Drupal/Core/Template/TwigExtension.php(491): Drupal\Core\Render\Renderer->render(Array)
#4 /var/www/drupal/web/sites/default/files/php/twig/68fcbd34bc865_table.html.twig_TT2dItyDZ7rmxPldRjFuxT_r_/DDtf0cpD8YHGvsuYCppfbrGIEqhyawphbIx8i5Tn-Qw.php(184): Drupal\Core\Template\TwigExtension->escapeFilter(Object(Drupal\Core\Template\TwigEnvironment), Array, 'html', NULL, true)
#5 /var/www/drupal/vendor/twig/twig/src/Template.php(402): __TwigTemplate_7cd77fa5fee03ed2ec54c01155ec7f3e->doDisplay(Array, Array)
#6 /var/www/drupal/vendor/twig/twig/src/Template.php(358): Twig\Template->yield(Array, Array)
#7 /var/www/drupal/vendor/twig/twig/src/Template.php(373): Twig\Template->display(Array)
#8 /var/www/drupal/vendor/twig/twig/src/TemplateWrapper.php(51): Twig\Template->render(Array)
#9 /var/www/drupal/web/core/themes/engines/twig/twig.engine(34): Twig\TemplateWrapper->render(Array)
#10 /var/www/drupal/web/core/lib/Drupal/Core/Theme/ThemeManager.php(380): twig_render_template('core/themes/cla...', Array)
#11 /var/www/drupal/web/core/lib/Drupal/Core/Render/Renderer.php(497): Drupal\Core\Theme\ThemeManager->render('table', Array)
#12 /var/www/drupal/web/core/lib/Drupal/Core/Render/Renderer.php(510): Drupal\Core\Render\Renderer->doRender(Array, Object(Drupal\Core\Render\RenderContext))
#13 /var/www/drupal/web/core/lib/Drupal/Core/Render/Renderer.php(227): Drupal\Core\Render\Renderer->doRender(Array, Object(Drupal\Core\Render\RenderContext))
#14 /var/www/drupal/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(242): Drupal\Core\Render\Renderer->render(Array, false)
#15 /var/www/drupal/web/core/lib/Drupal/Core/Render/Renderer.php(627): Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}()
#16 /var/www/drupal/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(235): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
#17 /var/www/drupal/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(131): Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
#18 /var/www/drupal/web/core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php(90): Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
#19 /var/www/drupal/vendor/symfony/event-dispatcher/EventDispatcher.php(246): Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view', Object(Symfony\Component\EventDispatcher\EventDispatcher))
#20 /var/www/drupal/vendor/symfony/event-dispatcher/EventDispatcher.php(206): Symfony\Component\EventDispatcher\EventDispatcher::Symfony\Component\EventDispatcher\{closure}(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view', Object(Symfony\Component\EventDispatcher\EventDispatcher))
#21 /var/www/drupal/vendor/symfony/event-dispatcher/EventDispatcher.php(56): Symfony\Component\EventDispatcher\EventDispatcher->callListeners(Array, 'kernel.view', Object(Symfony\Component\HttpKernel\Event\ViewEvent))
#22 /var/www/drupal/vendor/symfony/http-kernel/HttpKernel.php(188): Symfony\Component\EventDispatcher\EventDispatcher->dispatch(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view')
#23 /var/www/drupal/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#24 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#25 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#26 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#27 /var/www/drupal/web/core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#28 /var/www/drupal/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(116): Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#29 /var/www/drupal/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(90): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#30 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#31 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#32 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(53): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#33 /var/www/drupal/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#34 /var/www/drupal/web/core/lib/Drupal/Core/DrupalKernel.php(715): Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#35 /var/www/drupal/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#36 {main}

avpaderno’s picture

Version: 3.0.x-dev » 2.1.x-dev
Status: Needs work » Needs review

avpaderno’s picture

Assigned: avpaderno » Unassigned
Status: Needs review » Fixed

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.