Workspace in Drupal Core

Podcast episode player
0:00 0:00

Matt and Mike talk with Andrei Mateescu and Tim Millwood about Workspace, what it is, and including it in Drupal core.

Episode Guests

Andrei Mateescu

Thumbnail
Drupal Research Engineer at Pfizer, and primary contributor to Workspace in Core.

Tim Millwood

Thumbnail
Drupal Architect at Appnovation, and contributor to Workspace and Workflow initiatives.
Transcript

Transcript

Matt Kleve:
May 24, 2018. It's the Lullabot Podcast.
Matt Kleve:
Hey everybody, it's the Lullabot Podcast, episode 224. I'm Matt Kleve, the senior developer at Lullabot with the, as always, cohost of the show, senior front end developer Mike Herchel. Hey, Mike.
Mike Herchel:
Hey.
Matt Kleve:
It's been a while.
Mike Herchel:
Yeah, yeah. It has.
Matt Kleve:
We're getting the band back together.
Mike Herchel:
Yep, back on the wagon.
Matt Kleve:
Getting the Lullabot Podcast rolling again after a little bit of a springtime break.
Mike Herchel:
Chugga-chugga.
Matt Kleve:
Chugga-chugga. Hey-
Mike Herchel:
(laughing)
Matt Kleve:
We've kind of been on this theme, even with a couple months off, of talking about the latest, greatest, what's happening in Drupal 8, the cool things that people need to know about if they're going to be building a Drupal 8 website or want to be involved with building Drupal 8.
Mike Herchel:
Yep, absolutely, and there's been a whole bunch of stuff happening within the workspace and workflows initiative.
Matt Kleve:
Workspace and workflow, those sound like a couple of things that are those like, I forgot about but turns out the client actually wants it at the end of the project so stuff kind of gets shoehorned in, and you can be kind of frustrated if you don't understand what's going on.
Mike Herchel:
It's kind of funny how that works.
Matt Kleve:
Yeah. Well it's not like obvious, you know, it's not the pretty comps that most people have.
Mike Herchel:
Yep, yep. Yep. So with us, we have two great people from the workspace, have worked on the workspace module in core. First up, we have Andrei Mateescu, who is a Drupal research engineer at Pfizer. What do you do as a Drupal research engineer, Andrei?
Andrei Mateescu:
So first of all, it's nice to be here.
Mike Herchel:
Thank you.
Matt Kleve:
Glad you're here.
Andrei Mateescu:
What I do at Pfizer is I work on core, mostly.
Mike Herchel:
Oh, alright.
Matt Kleve:
Awesome.
Mike Herchel:
Yeah. (laughing) Cool. You are from Romania, just in case you didn't know. (laughing) A Mateescu and Drupal.org and according to our other guest, Tim, you literally did everything on the workspace module, so thanks for that.
Matt Kleve:
And speaking of our other guest Tim, we have Tim Millwood, he's a Drupal architect at Appnovation. Tim Millwood. Tim Millwood on Drupal.org. He's from Wales in the UK, working on the workspace contrib module. Hi, Tim.
Tim Millwood:
Hello, how are you doing?
Matt Kleve:
So workspace and workflow in core, so if you one of you guys want to just jump out and say you know what is it, what's going on, why is it important?
Tim Millwood:
Yeah so, workspace is a new module in the core. It got into the eight sects development branch last week, or the week before. Last week, maybe. It's a module which has made it's way from contrib space and now into core and it allows you to create that full site preview so you can generate all of your content in that sort of preview environment.
You can create multiple versions of your site and whichever one you want to push live, you can push live. So an example that's pushed around is maybe a, sort of a presidential election or a football game where you don't know who's going to win until you can create all of the content for both parties winning and then whichever one wins, you can push it live. So yeah, it's a pretty great system.
Mike Herchel:
So I can go ahead and create content, move it around, throw up new blocks, new, I don't know, panel panes or whatever I'm using and publish that to a workspace and then I can have stakeholders preview that, make sure it looks good, and then at that point, just publish that whole thing all at once?
Tim Millwood:
Pretty much, yeah. Currently, from a technical point of view, we support anti-types which are both revisionable and publishable. So in core, I think, correct me if I'm wrong, that node, block content, and media and you can create all those in your workspace and push those up, but hopefully we're going to make more entity types on core revisionable and publishable. We've got patches in the issue queue for taxonomy terms and menu lengths and comments and all the other anti-types.
Andrei Mateescu:
Based on your example earlier, blocks would be not exactly working as you would expect in 8.6 because blocks are complete entities and the workspace is currently works only with content entities and like things that are publishable and revisionable content entities. But we will have to look into making complete work as well, so blocks and panels and all that.
Mike Herchel:
Got you, so because blocks are not publishable, it doesn't fit in. That makes sense.
Andrei Mateescu:
Yeah.
Matt Kleve:
So what's actually happening under the hood? When you're creating, say this state of my candidate won the election, what are you actually building? It's a workspace? Is it an entity, is it like, what are you building?
Andrei Mateescu:
So what I'm building on top of the revision system provided by the entity [inaudible 00:05:49], which currently provides two types of revisions: one is the default revision, which is the one that most site visitors see when they look at their website and when we want to create the preview of an entity, we create the pending revision, that's how we call it, which is something that it's not usually live. I mean, it could be, but ... it's not the common base.
Matt Kleve:
Sure, there's just another revision of a visa content that's out there.
Andrei Mateescu:
Exactly.
Matt Kleve:
But something is referencing that revision, right? Or a set of revisions like for a couple of nodes or whatever is on the page?
Andrei Mateescu:
We keep track of a set of pending revisions, and that group of pending revisions basically make up a workspace.
Mike Herchel:
So how does this work with the caching system? Is it all have decache tags integrated in and everything?
Andrei Mateescu:
So actually, it works great with the caching system for render caching. We provide mandatory cache context, which is used as a cache key for every render cache item. So your render cache is your workspace, basically. And entity cache still works, the persistent cache is used like in a regular demonstration. The only difference is that we don't use the persistent entity cache when you're in a non-default workspace.
Mike Herchel:
That makes sense.
Andrei Mateescu:
So the main takeaway from this is that, your live site is not impacted at all in terms of performance, so the default workspace only works with default revisions of entities and yeah, that works like a regular Drupal site.
Mike Herchel:
Is it possible to serve multiple workspaces to anonymous people to do like, say some type of A/B testing or something like that?
Matt Kleve:
What a cool idea.
Andrei Mateescu:
Yeah, that's, not yet.
Mike Herchel:
Yeah, I know this is all new. I'm just kind of flying off the cuff right here. I was thinking, that would be pretty neat.
Matt Kleve:
Yeah, I like it.
Mike Herchel:
[crosstalk 00:08:25] I guess.
Matt Kleve:
I'm still trying to wrap my head around the system and a lot of it it sounding kind of like the site preview system that ... I've been on some projects that used on Drupal 7. Are you familiar with that?
Andrei Mateescu:
Yeah so, what we did with workspace is, is that we took all the ideas from the [inaudible 00:08:44] text branch of the contrib module, and the whole, the body suit, with the version and all the other modules, combined it with the CPS module from Drupal 7. CPS is for content publishing system, I think. And we took all that and rewrote it for Drupal 8.
Mike Herchel:
Is there any type of upgrade path or is an upgrade path even needed for this type of stuff?
Tim Millwood:
There will be an upgrade path from the contrib module of workspace, because a lot of people are using the contrib module of workspace, a lot of big, high profile sites are using it. So we want to provide a solid upgrade path so it's something that we will be looking at, but the two systems are conceptually the same, but vastly different in how they're implemented, so it is going to be quite a complex upgrade path. But yeah, I think something will be provided somehow. I'm not sure whether it will be ready for the 8.6 release or whether it will be something that will follow up later on, but yes, definitely something we'll be working on.
Mike Herchel:
So as of right now, if I download the 8.6 branch of Drupal 8, does workspace exist in there? Does the UI or is it just the API? Or is there anything else I need to do?
Tim Millwood:
So there's a bare bones UI in place at the moment. You may have seen a really nice, fancy UI posted around on issue queues and blog posts and Andrei has mentioned it in his key notes, various DrupalCons, that UI is still a work in progress, but we've got things like links in the toolbar, provided by the toolbar module in core, which allow you to twitch between workspaces, and some links on there to create a new workspace and then there's a list of all your workspaces and on there you can switch between the workspaces and edit the workspaces and deploy from one of your workspaces up to the default live workspace. So there is a UI there, it's that menu provided by the toolbar module at the moment and just various lift pages.
Mike Herchel:
Is it possible to have different revisions of a single piece of content in different workspaces?
Andrei Mateescu:
Right now, if you edit an entity in a workspace-
Mike Herchel:
Yeah.
Andrei Mateescu:
You are basically locking that entity, so you cannot edit it in more, not the one in live, or any other workspace.
Mike Herchel:
Yeah, I'm not quite sure why I would ever want to do that, but just thinking.
Matt Kleve:
Well, I don't know, I mean an entity might be used in multiple workspaces, right? So I could see that Mike, you're not too far off.
Mike Herchel:
Thanks, Matt.
Andrei Mateescu:
It's a very good u space for editing, [inaudible 00:12:11] editing in multiple workspaces. But in order for that to happen, we need conflict resolution ... API mechanism in core. So that's why we are currently limited to editing an entity in a single workspace.
Mike Herchel:
Is there anyone working on that API in core right now, do you know?
Andrei Mateescu:
We will probably work on it for 8.7.
Mike Herchel:
Yeah, so there's been a little bit of a ... I've seen a lot of chatter on the internet as far as workspace and of course, just workspace and workflow, and there's content moderation, can you just run us down through the difference of each ... How they are different? You know, I know there's obviously, like content moderation is very different from workspace, but are those all under the workflow intiative? Or is workflow something different?
Tim Millwood:
So they're all under the workflow initiative. Content moderation was added as an experimental module in 8.2 but became stable in 8.5 and then the workflow module was split out from content moderation along the way, so it's a separate module in its own right. So the workflow module provides a mechanism of creating workflows so it has nothing to do with content, it has nothing to do with entities, it's just a workflow of various states and transitions between those different states. You can do whatever you wish by implementing a workflow type plugin. So content moderation is one of the modules that implements the workflow type plugin and it connects a workflow with content entities.
So to work with content moderation and entity to be revisionable, so you can have the different states for each revisions, hand content moderation allows you to move your content between these different states and you'd have different publishing states as well, in there as well so you can make something published and unpublished, and you could also make a default revision or not.
It allows you to create these pending revisions in the same way that the workspace works under the hood. So it's kind of like a first step to moderating content on your site that allows you to moderate one piece of content at a time, whereas workspace is kind of the full picture rich way to moderate content, allowing you to moderate multiple pieces of content at once, that's what we were saying earlier.
Andrei Mateescu:
The reason why content moderation is incompatible with workspace is, at the moment, in core. So again, the various content moderation on workspace is.
Mike Herchel:
Is that incompatibility issue going to be resolved at some point?
Andrei Mateescu:
There are some ideas for that. For example, [inaudible 00:15:45] to make content moderation use the workspace API, at which point everything will magically work together. So, yeah, it's still in the discussion phase.
Mike Herchel:
Is it possible to kind of assign different people to a workspace and maybe have different permissions per workspace?
Andrei Mateescu:
That was a very hot topic in the initial workspace issue, and so far the consensus is that per workspace permissions is better left to contrib to experiment with because a site can have many workspaces and permissions page will just explode with how many per work space permissions.
Tim Millwood:
In the first station of the workspace module, which is in contrib at the moment, it ships with tons of permissions so you can have permissions to your work space, so a user can only edit content within their workspace and can't edit content in any other work space or you can have permission to edit content in any workspace apart from the default live workspace and so many permissions that it's just really overwhelming, but there are some really good use cases for sort of completely locking down your site so no one can edit any content and they have to create a workspace to be able to edit content and kind of seek approval for their edits before they get pushed up to the live workspace. So yeah, there are some great use cases, but as Andrei said, I think that will live in contrib for a while.
Matt Kleve:
So nuts and bolts, what is a workspace? Is it an entity?
Tim Millwood:
Yes.
Andrei Mateescu:
Yes, it an open entity.
Matt Kleve:
Okay, so with entities comes baggage, can you ... I mean, is a workspace revisionable? Is a workspace ... Can you comment on a workspace? I don't know.
Andrei Mateescu:
If it's revisionable, then of course you can comment on it, and even more, if you want, you can moderate it using content moderation.
Matt Kleve:
Sure, sure. I guess that makes sense then, so yeah, it's natural that it's an entity. And so are there references to the pieces of content inside of a workspace?
Andrei Mateescu:
Exactly.
Matt Kleve:
And so, workspaces own a route? Is that true?
Andrei Mateescu:
Sorry, can you say that-
Matt Kleve:
Does a workspace own a route? A URL.
Andrei Mateescu:
No, it doesn't. It works ... So, if you're in a workspace, it's using you're under the hood session, a negotiator, and that's how the site knows which content to display based on the current workspace you are in.
But for example, since you asked, we also want to add the URL parameter negotiator so you can change your workspace by a pending workspace ID equals machinery, words that you're ... So you can change the workspace in the URL directly.
Mike Herchel:
Yeah, I can see that point of view so you can maybe throw by some nontechnical stakeholders by emailing a URL or something like that.
Andrei Mateescu:
What was that? That's the U space.
Mike Herchel:
And one of the big reasons that we made workspaces content entities in the first place, and this comes back from the original contrib module, is if you're using a module such as the config read only module in contrib, so in production you're only ... You can't edit any config, you wouldn't be able to create any workspaces. So we made it a content entity and then you can create new workspaces even if you've got all of your config locked down.
Matt Kleve:
So with workspaces being content, how does that ... How can I deploy that to other environments?
Mike Herchel:
Technically, you wouldn't. We ship with two workspaces out box, so you've got a live and a staged workspace, which you could rename if you wish. And you can ad new workspaces, but we see those as kind of a temporary workplace. The content is kind of throw-away. You push it live if you want to keep it, otherwise it's just a draft place where you work. So it wouldn't ever be something you would push up through your desk stage production environment.
Andrei Mateescu:
However, there is work planned to update the relaxed contrib module, so we can deploy workspaces and its content through a different server, but they're thinking more about that.
Tim Millwood:
Yeah, so the relaxed module is a contrib module at the moment as part of the deployed suite of modules and it uses the same API as CouchDB to replicate content between sites over HTTP. So you can push content from your dexter server up to your stage server up to your production server. And this is something that we will be supporting in the core section of workspace with a new contrib version of the relaxed module. So you will be able to move the content from a workspace between environments, and so you could create a summer campaign workspace on your [inaudible 00:21:58] environment, and then create a summer campaign needs review workspace on your stage environment, and push it from one to the other, and then finally push it from there up your live workspace on your production environment.
Mike Herchel:
And that's the relaxed module?
Tim Millwood:
That's right, yeah.
Mike Herchel:
Alright, yeah, well I haven't used that before. That's really cool, we'll include a link to that in our show notes.
Tim Millwood:
Okay.
Mike Herchel:
We're talking about the workspace and workflow initiative that's coming at you with Drupal 8.6. Coming up right after the break, we're going to talk a little bit about actually jumping in and creating a workspace, how that process goes, and then on into the future and maybe how you can help out. Coming up, right after this.
Tim Millwood:
Hey, it's Tim Millwood from the Developing App podcast.
Mike Herchel:
Michael, hey, you're a Boston guy and we know that New England Drupal camp is coming up at the end of the year, but there's another big event happening in Boston.
Matt Kleve:
In June, it's the 10th Design for Drupal conference, from June 27th to 29th. What's interesting about Design for Drupal is two things: one, it's the only front end focused and design-focused Drupal camp, but the other big announcement is the key note this year is Dries. So that's really exciting, the organizers worked hard to get him to come and I think it's a great opportunity to come to the Boston area in the summer. Go to the Charles, learn some front end stuff for Drupal.
Mike Herchel:
Alright, so Design for Drupal in Boston and then we'll look forward to the New England Drupal camp coming up later in the year. Alright, keep your eyes on Drupal now, folks.
Mike Herchel:
Welcome back to the Lullabot podcast, we're talking about the workspace and workflow initiative, how that just rolls right off the tongue.
Matt Kleve:
You say it much better than I do.
Mike Herchel:
(laughing) So we're going to talk a little bit about how this actually works, but before that, Andrei, you just attended Drupal Camp Transylvania, correct?
Matt Kleve:
Yes, I did.
Mike Herchel:
Tell us about it. That is in Romania, which in Eastern Europe and tell us about the camp, and how it went, and what you talked about, and if there were any vampires there?
Andrei Mateescu:
Of course, it was Transylvania.
Mike Herchel:
Yeah, absolutely.
Andrei Mateescu:
It works out everywhere. Yeah so it was a very nice camp organized in the [inaudible 00:24:19] city, which is right in the middle of Transylvania. I was there as a sprint mentor, so I was helping new people work on core badges or other badges. I didn't really attend any session because I was pretty busy with all the people that wanted to help out and wanted to learn how to contribute to Drupal. But I hear that the sessions were nice [00:24:57] attendance.
Matt Kleve:
About how many people were there?
Andrei Mateescu:
I think there were 100-
Matt Kleve:
Cool.
Andrei Mateescu:
I think over 100.
Matt Kleve:
That's great, I mean, it seems like you don't have to go very far to find a Drupal event nearby, even in Transylvania. So that's awesome.
Mike Herchel:
Planning on doing it next year?
Andrei Mateescu:
Probably, yes.
Mike Herchel:
Yeah? Are the sessions mostly in English, or what languages are the sessions in?
Andrei Mateescu:
There were only sessions in English. [crosstalk 00:25:28] many international speakers-
Mike Herchel:
Yep, yep.
Andrei Mateescu:
From Spain, from Netherlands, all of [inaudible 00:25:35].
Matt Kleve:
You better go next year, Mike. You're the guy who has to travel to those things, yeah.
Mike Herchel:
I know, I know, I know. I can do that, you know, get my bat wings. Take my garlic and wooden cross.
Andrei Mateescu:
(laughing)
Mike Herchel:
Exciting stuff. So let's push it back to workspace before we go too far off and lose all our listeners here. Can someone walk us through what it actually looks like, you know? And start at, these are the modules that we have to enable, and once you enable these, this is what you're going to see, and this is what you can do.
Tim Millwood:
Yes, so currently at the workspace module in 8.6, as I was saying earlier, you install the module and in the toolbar, you will see a big, green live button up in the top right that will tell you you're on the live workspace and the big, green color will tell you that this is the default workspace, it's the workspace that your users are going to see when they visit your site. And as Andrei was saying earlier, we don't ... In the module, we don't mess around with the live workspace at all, so the users get just as they would get in a normal Drupal site.
Clicking on this big, green button will show the second row of the toolbar, allowing you to select a different workspace, and so we also ship with a workspace called stage, so switching to that will now give you a big, orange stage button in the top right. So, orange telling you that it's not the default workspace anymore, and it tells you it's a staged workspace.
You can also add new workspaces. You can call them whatever you like, they get a machine name and a human readable name, and as you create workspaces, they will get linked to in the toolbar as well. They'll get their own orange non-live button. And under configuration and workspace, there's a link in the standard configuration page which will get you the list of all of your workspaces and from there you can edit the workspace itself, then the name of the workspace, and we store the author of the workspace, or the person who created the workspace. And you can deploy the content from that workspace up to the live workspace. You can make that workspace the active workspace, so there's a whole number of options on that list page.
A lot of the functionality within workspace is it's very hidden, so once you're in your own workspace, or once you're in the stage workspace, you can just go and create content as you normally would create content on your Drupal site and it will just appear in the workspace, and you can switch back to live and it won't be there in live.
Mike Herchel:
So I have a question for you, is it possible to kind of merge ... Alright. If I have three workspaces, and I have, you know, I have the live workspace, maybe workspace A. If I create content on workspace ... If I create workspace A, and then I create workspace B, create content on workspace A, make that live, does workspace B automatically inherit the content that I created in the other workspace or do I have to somehow pull that down? Does it work almost similar to get branches and merges or how does a situation like that ... How do we resolve that situation?
Tim Millwood:
Any content in the live workspace is automatically visible within the other workspaces. So if you create content in live, which you can still do, or if you create something in another workspace and push it up to live, then that content is visible within any other workspace. So it's automatically inherited, you said, by the other workspaces.
Andrei Mateescu:
Yeah, hybrid merging workspaces is currently planned for quarter, but it's also waiting for the conflict resolution mechanism.
Matt Kleve:
Ah, yeah, that makes sense.
Andrei Mateescu:
Yeah. So it will merge content from one workspace to another probably in 8.7 when we have conflict resolution in core, as well. Right now, we can just push to the live workspace. There is no inheritance or merging yet. But the model is essentially is very much modeled after get, with branches, merges. There is also an issue open to provide an option to flatten a branch when you merge it, or when you push it to live.
So for example, when you have many in-between revisions with small edits and you don't want to keep all that revision history, you just want the end result, which is the last revision, we will probably have an option to remove all those in-between revisions.
Matt Kleve:
To squash it, if you will, huh?
Andrei Mateescu:
Yes.
Mike Herchel:
Is it possible if I merge the stage workspace into live and I realize I just had a big screw-up there, is it possible to undo that?
Andrei Mateescu:
Yeah, it will be possible, there is also an issue open for that and with some initial thoughts on how that could be implemented, but yes, this is definitely something that core will need to provide.
Matt Kleve:
Command Z.
Mike Herchel:
There you go, I think the issue is solved. (laughing)
Matt Kleve:
How long has this work been going on, as far as it getting it going in core in Drupal 8? How long have you been working on it?
Andrei Mateescu:
Me, personally, I think from November, or even October of 2017. Tim for far longer than that.
Tim Millwood:
So I've been working on this for nearly four years now, I think-
Matt Kleve:
Oh my goodness, yeah.
Tim Millwood:
Maybe only three and a half. I think it was DrupalCon LA maybe, however long ago that was, there was a session there by Dick Olson about a lot of the work that he was doing with workspaces and the multi-version module. So back then, there wasn't a module called workspace, but there was workspace entity, which existed in the multi-version module. This is all something that Dick Olson created back then, and so I started helping out with a lot of that stuff back then, and it's very intriguing and interesting so I was happily fed during the ride.
Mike Herchel:
Cool, so what were some of the biggest challenges with workspace? You know, what were some of the big decisions that were made that got, like, shitted on and crapped on all over? That we can talk about and maybe, like, shit more on?
Andrei Mateescu:
(laughing) The hardest part, I think, was-
Mike Herchel:
The color of the buttons. (laughing)
Tim Millwood:
Exactly.
Andrei Mateescu:
But from that-
Mike Herchel:
(laughing)
Matt Kleve:
Green means go, so that's a good thing, right?
Mike Herchel:
Yeah, I don't know, I don't know. You know.
Andrei Mateescu:
So a big shift that workspaces brings into the core workflow, I'd say, is that many entity types need to be revisionable, and historically, only notes were revisionable before 7, I think.
Matt Kleve:
Yep, and before, yeah.
Andrei Mateescu:
Yeah and a big part of what we did as part of the workflow initiative was to enable all the other entity types to be revisionable as well. So we worked a lot on providing an upgrade path for converting a nonrevisionable entity to revisionable. That was a very big effort just like workspaces.
Tim Millwood:
Yeah, I think it's very easy to gloss over the fact that we have a non-revisionable workspace and magically, now you have a revisionable workspace. But yeah, it was a lot of work and that's what I stil don't understand how Andrei managaed to make all this stuff happen. Moving various data around the place in the database.
Matt Kleve:
That's something that ends up being taken for granted, in general. Oh, it just works.
Andrei Mateescu:
Yeah, but it does take a lot of work under the hood for that.
Matt Kleve:
Thanks for that.
Andrei Mateescu:
So, apart from this, also improving the revision API. That was also a big chunk of work initiative, because everything we do, like content moderation and workspaces, everything relies on an entity being revisionable and also on a solid revision API.
Matt Kleve:
Yeah, I think there was a lot of work done as part of the content moderation module around pending revisions, because pending revisions have always been possible to create throughout the Drupal 8 life cycle, but it wasn't until content moderation came on board that you were able to create a pending revision from the UI, and that brought a whole load of problems. And now we've also got workspaces using pending revisions, so it's good that we were able to fix a lot of these things as part of the content moderation life cycle and also learn from a lot of the stuff there. We knew a lot more about pending revisions, and what they were, and how they worked and what they interfered with.
Andrei Mateescu:
Yeah, we also had to do a lot of work on the entity storage system, which enables all this revision fanciness, which was left in ... No one worked so much on the underlying storage since 8.0 was released. And there are many things that needed to be brushed up, let's say, here and there.
Mike Herchel:
That makes sense. So, if I'm a contrib module author, is there anything that I need to know about to make my entities that I'm creating fit within a workspace?
Andrei Mateescu:
Yeah, so for contrib and custom modules, it's really very simple. You just need to provide the revisionable and publishable entity. Publishable means you need the status build, and like I said earlier, for converting your non-revisionable entity types to revisionable, there is an upgrade path in core, so you can use that in your own code as well. There is also a new base class, it's called editorial content entity base, which provides by default, all of the things needed for an entity type to be revisionable and publishable via similar traits which automatically add base notes for the status field, for the revision field, revision metadata fields.
Yeah, so, make sure that your content entity type extends ... editorial content entity base, and you're all set. There is nothing else that you need to do.
Matt Kleve:
Sounds pretty straightforward, that's great.
Mike Herchel:
So what's your road map going forward for workspace and how that relates to Drupal 8 and the workflow intiative?
Matt Kleve:
I think a lot of the work coming up, we'll be getting the UI up to scratch. So we've had a lot of work that's been done by Joseph Top, and so you may have seen a key note by Dries at DrupalCon, these very flashy UIs for workspace. So these are the ones that Joseph designed and that we're working on implementing at the moment. So there's a couple of issues that are open for that, because we're looking to use all of the off canvas work that was done to settings tray. But we're going to be putting it at the top of the page. So the idea here is that the settings tray comes in from the side, it's part of your [inaudible 00:39:56]. It's the settings for your side, so coming in from the side makes a lot of sense. Whereas a workspace, it's kind of more of an overarching concept, you can kind of have multiple instances of your site and the workspace settings, the workspace switching, would fit above that.
So we have this idea of having a top tray that will slide down from the top, and from there, you'll be able to switch workspace, you'll be able to search for the workspace if you've maybe got hundreds of different workspaces, you can see the status, maybe when we do properly support content moderation and workspaces together, you'll be able to moderate your workspace and move it between different moderation states. You'll be able to deploy up to the live workspace or across to whatever workspace you need to deploy to, so this is all going to be in this top tray.
So there's an issue open at the moment that I'll give you the link for to put in the show notes where we're looking to simply enhance the off canvas stuff currently in core to allow you to have a rendered tray at the top, and then an issue that depends on that, is them adding all of the workspace UI in that top off-canvas dialogue. So there's a lot of Javascript and CSS here that we're not really that hot on, so any help or assistance, anyone looking to learn the workflow initiative, we're really in need of Javascript and CSS help, if anyone would like to join in on the-
Mike Herchel:
Got you, and if someone does want to, you know ... If someone says, hey, I know CSS, I know Javascript, I got some spare cycles, how do they reach out and who do they reach out to?
Tim Millwood:
Well, we're both on Drupal's [inaudible 00:42:11] and Drupal [inaudible 00:42:14] sort of still there. Also, in the issue queues, so if all the links are in the show notes here, they can just go straight to the issue queues and start commenting, reviewing, and helping out with the patches there. A lot of the issue summaries link to clickable mock-ups of all of the designs as well, so you can get a really good understanding of what we're trying to achieve.
Mike Herchel:
Is there a dedicated channel within Drupal's lack for workspace?
Tim Millwood:
No, we generally just stay in the contributes channel, which is, yeah, a more general channel.
Mike Herchel:
Okay. Cool.
Matt Kleve:
So we have some help for you coming as a part of this podcast, at least for the purposes of this podcast. In the past, when we've talked to people working on these Drupal 8 issues, we've offered them our Drupal genie. Are you familiar with the Drupal genie?
Mike Herchel:
The Drupal genie can do anything, and it will do it perfectly the first time.
Matt Kleve:
You get one wish-
Mike Herchel:
Yeah, if you want to wish for perfect test support, or if you want to wish for, say like, an API between content moderation and workspace and stuff like that, this is it right here.
Matt Kleve:
Yeah, exactly. So what would you ask of the Drupal genie to be done and it would be great?
Mike Herchel:
Yeah and let's start with Tim. Tim, what do you want done for free?
Matt Kleve:
(laughing)
Tim Millwood:
That's a very, very hard question. At the moment, I'm currently struggling on all of the Javascript, all the off-canvas dialogue, but I think that's a very short-term thing to wish for, I'm sure that will resolve itself over time. So I think my better use of the wish would be for the conflict stuff, I think that's going to be a harder issue to solve. I think there will be a lot of bikeshedding around that and trying to find the best solution. So I think magically solving all of the conflict stuff will be my best use of the wish.
Mike Herchel:
That's a good one, I'm glad you didn't go for the easy one. Andrei, how about you?
Andrei Mateescu:
For me, I would wish that the genie would review all the patches that are in mixed review for entity API subsystem, because like always, we are short on reviewers.
Mike Herchel:
That totally makes sense.
Matt Kleve:
Is there anything else you'd like to add, Andrei?
Mike Herchel:
Uh, yeah, so for the question earlier, the short-term goal for workspace is, is to get to a better status in 8.6. There are only a couple of issues which are working [00:45:28] and also, the longer term goal is to have it stable in 8.7.
Matt Kleve:
Right on. Tim, do you have anything else you'd like to add?
Tim Millwood:
I don't think so. I think we've covered a lot of things, a lot of information, and as Andrei just said, if we can get this out so the details leveled by 8.6 would be amazing.
Mike Herchel:
Yeah, the work that's been going in so far has been amazing, so hopefully everything will get in by 8.6. It's super, super exciting.
Matt Kleve:
Thank you, thank you both for your work.
Mike Herchel:
Yep, and for our listeners out there, you can tweet to us at Lullabot on the Twitters, rate us on iTunes or whatever, that's how people find us, and feel free to leave some comments on our podcast page and yeah, so thanks for coming on Tim and Andrei.
Tim Millwood:
Thanks for having us.
Andrei Mateescu:
Thanks for having us.