Account created on 21 February 2010, over 15 years ago
#

Merge Requests

More

Recent comments

🇷🇴Romania amateescu

This was recently fixed here. You can use the dev version until a new release is tagged :)

🇷🇴Romania amateescu

If it doesn't match, we can call RouteProvider::getRouteByName() on each of the passed in routes, this will trigger the deprecation we need.

@catch, the issue is that RouteMatch::isRouteName() will _not_ match the current route name in most (almost all) cases, so we'll be calling ::getRouteByName() all the time. Maybe it's easier to explain with an example:

Let's say we have a few different modules, and each one checks for a route, e.g. ::isRouteName('module1_controller'), ::isRouteName('module2_form'), etc.

Now, imagine that those checks happen on every request, wouldn't this mean that we'll be "attaching" the knowledge of those routes to every page in the context of the route preloader?

🇷🇴Romania amateescu

I don't think that subclassing the version history controller is a good solution for this issue.

The Diff module is a great example. From the perspective of another contrib module which also needs to alter the revision overview, and in order to support both core's controller and Diff's override, it has to subclass both of them. A third one with similar requirements would bring chaos :)

Adding a hook as in the current MR is one way to do it, but I think converting that controller to a form would be more helpful in the long run, especially since Diff (which is a very popular module) already does that.

🇷🇴Romania amateescu

@catch, yep, the space is added for a bit of padding, and it's handled correctly on RTL languages.

🇷🇴Romania amateescu

Updated the test to use key-value instead of state.

@catch, copying FormController::getContentResult() wouldn't help us in any way, it's HtmlEntityFormController::getFormObject() that builds the form, and the MR is actually doing what you're suggesting, it copies the relevant parts from it into WorkspacesHtmlEntityFormController::getContentResult() :)

🇷🇴Romania amateescu

Yay, hook ordering actually works now :) Reverted that change and made EntityOperations::entityFormAlter() run first. Back to RTBC because there's no functional change to the MR and the current code has already been reviewed before.

🇷🇴Romania amateescu

amateescu made their first commit to this issue’s fork.

🇷🇴Romania amateescu

This is still relevant and not implemented yet :)

🇷🇴Romania amateescu

Decided to set the initial workflow states with database queries. If any other viable entity storage gets written, we can worry about it then :)

🇷🇴Romania amateescu

Try to clear any data you have in the workspace column of the paragraphs_item_revision table before running that update function. Something like this:

drush php:eval "\Drupal::database()->update('paragraphs_item_revision')->fields(['workspace' => NULL])->execute();"
🇷🇴Romania amateescu

You should run this update function using Drush or whatever other method you have available: wse_update_10001().

🇷🇴Romania amateescu

This looks like a valid feature request still.

🇷🇴Romania amateescu

@adamzimmermann

It feels weird to need a contrib module for core functionality to work though.

That's because core moves at a slower pace, and production sites needed a lot of various fixes for Workspaces that were lingering for years in the core queue for various reasons. Workspaces Extra had to incorporate all these little fixes to prevent developers from using a huge list of patches into their projects.

Opened a MR with a fix and test coverage for this issue.

🇷🇴Romania amateescu

That code is now in \Drupal\Core\Entity\Sql\SqlContentEntityStorage::loadFromDedicatedTables(), and it has the same problem :)

🇷🇴Romania amateescu

Addressed all the feedback so far, but there's one thing left.. the main reason for this API: checking whether the passed-in route name is deprecated.

The problem is that the only way to do that currently is \Drupal\Core\Routing\RouteProvider::getRouteAliases(), which would mean an uncached db query for every call to the new RouteMatch::isRouteName() method. I think we need a way to retrieve and cache (persistent and static) all aliased/deprecated routes somewhere in the route provider. Setting back to NW to get feedback on that.

🇷🇴Romania amateescu

The test failures are not caused by this MR, see 🐛 Fix failing PHPunit tests Active .

🇷🇴Romania amateescu

Glad you were able to solve it.

🇷🇴Romania amateescu

Can you clear caches before running the database upgrade?

🇷🇴Romania amateescu

Did you run the database updates?

🇷🇴Romania amateescu

Whoops :) Merged into 2.0.x, thanks!

🇷🇴Romania amateescu

amateescu made their first commit to this issue’s fork.

🇷🇴Romania amateescu

A workspace might have hundreds or even thousands of entities, so the current approach from the MR that loads everything won't work. We probably need to restrict the list to the first 10 (20?) or so entities of each type. And even then, the list will be incomplete so not really useful for its intended purpose.

Since you're (usually) coming to the publish form from the workspace overview page which shows you all these details, I'm not sure I see the usefulness of this feature tbh :)

🇷🇴Romania amateescu

I've committed this fix to entity_workflow, so we can now use hook_install() to insert this data.

I would set the draft state for open workspaces directly in the hook_install() implementation, and create a queue for populating the state of closed workspaces.

🇷🇴Romania amateescu

Thinking more about this, I think the issue should be moved to the entity_workflow module, and implemented like this in the entity_workflow_workspace submodule:

- implement a hook_form_alter that covers both entity_workflow_form and entity_workflow_simple_transition_form
- in that form alter, build and render the workspace publish form (directly for entity_workflow_simple_transition_form, using #states for entity_workflow_form)
- ensure that all form validators of the workspace publish form will run
- ensure that \Drupal\workspaces\Form\WorkspacePublishForm::submitForm() does not run (because the actual publishing will be done by the workflow transition)

This way, every customization/alter of the workspace publish form should be available in the workflow transition form.

🇷🇴Romania amateescu

All the points from the issue summary are still valid, the documentation of \Drupal\Core\Field\FieldStorageDefinitionInterface::getMainPropertyName() doesn't tell developers what the consequences are if a field type has or lacks a "main property".

🇷🇴Romania amateescu

Looks great to me as well, thanks for sticking with it :)

🇷🇴Romania amateescu

Updated the MR on top of latest 3.x. Might still need some work around trash access -> entity access, so leaving the status at NW for now.

🇷🇴Romania amateescu

Merged into 3.x. Thanks @plach for reviewing this MR!

🇷🇴Romania amateescu

Opened a followup for #19 and added a @todo pointing to it :)

🇷🇴Romania amateescu

Thanks @krisahil, we're almost there! Added a comment to the MR, the data provider is not necessary and should be removed :)

🇷🇴Romania amateescu

I've been thinking about this problem lately and I think we should add a Compact overview setting that displays the list of trash-enabled entity types in a select element and hides the second-level local tasks.

Let me know if you can test this a bit and what do you think about it :)

🇷🇴Romania amateescu

In that case, some debugging is needed. First, I would look at \Drupal\trash\TrashStorageTrait::delete() and check if it's immediately going to the parent delete method, which means the trash context is not active. If that's the case, the next step is to put a breakpoint in TrashManager::setTrashContext() and see who's changing the trash context.

🇷🇴Romania amateescu

The bug is specific to Drupal CMS though :) Enabling the node entity type by default was recently changed in 🐛 Fatal when entity type doesn't exist (anymore) Active , and it works fine..

🇷🇴Romania amateescu

Re #6:

Should each trashable entity type have its own predefined View, or should we generate Views dynamically based on the selected entity type?

Generate Views dynamically based on the selected entity type.

When you say "on-demand," do you mean the Views should be created programmatically when accessed, or should they be predefined and stored permanently?

Views should be created programmatically when accessed.

Are there specific fields you'd like displayed for different entity types, or should the View dynamically adjust based on available fields?

The View dynamically adjust based on available fields, using the list of fields we currently display in the trash controller.

🇷🇴Romania amateescu

This is a great idea, thanks for opening the issue. Added a trash:restore command and modernized the Drush integration while I was there :)

🇷🇴Romania amateescu

amateescu made their first commit to this issue’s fork.

🇷🇴Romania amateescu

Needs work to handle redirect_delete_by_path() somehow..

🇷🇴Romania amateescu

I've been following and reviewing this MR for a while, and even though the workaround for pending revisions of menu links is a bit awkward, I can't see any other way around it.

Suggested a small improvement for the exception message, otherwise +1 for RTBC.

🇷🇴Romania amateescu

I started working on this feature as well from a different angle (Workspaces support) but didn't consider searching through the issue queue first.

However, after finding this issue, turns out my approach was almost identical, so I incorporated my changes into the existing work here :)

🇷🇴Romania amateescu

amateescu made their first commit to this issue’s fork.

🇷🇴Romania amateescu

Started a MR from a reroll of the patch in #25.

🇷🇴Romania amateescu

The test coverage seems quite heavy-handed for the issue we're fixing here. As mentioned in #5, I still think a simple method in a kernel test that calls WorkspaceAssociation::getTrackedEntitiesForListing() with $limit = FALSE would be better.

🇷🇴Romania amateescu

Wouldn't it make more sense to wrap those lines with $this->assertTrue() calls?

🇷🇴Romania amateescu

Re #12: Nope, it's now called "manually" from core/modules/workspaces/src/Hook/FormOperations::formAlter(). It's easier to see if you look at the commit directly: https://git.drupalcode.org/project/drupal/-/merge_requests/10447/diffs?c...

🇷🇴Romania amateescu

Re #11: Those test changes are reverting the wrong assumptions made in 📌 Revert and Delete actions should not be available for the current revision Active , which didn't take into account that it should be possible to revert to the default revision when there are pending revisions.

🇷🇴Romania amateescu

Nice, I'm glad you figured it out.

Production build 0.71.5 2024