Content Idea Drafts (Before selecting Content Type)

Events happening in the community are now at Drupal community events on www.drupal.org.
tsvenson's picture

Often when I get an idea for a new post or article on a site I submit content to it is a bit difficult to know the correct content type it will use when published. What would be really useful then was if there could be a pre content type option where I can start writing the story. As the story develops I will have a better idea if it should end up as a blog post, general article or something else.

Another advantage with this would be that every user, with the right permissions, would then get their own personal content sandbox where they can start working on stories, or just simply quickly be able to create a number of draft ideas they will get back to later.

Content ideas created using this would be stored completely separate from Drupals content storage until they get promoted to a content type. A great benefit with that would be that only content that will be published would occupy space in the database.

I can also see big benefits when it comes to integration with content workflows as well as content assignments.

Some features in this module that would be really useful are:

  • Private Story Ideas - Only visible for the author.
  • Story Idea Pool - An idea pool where roles with the right permission can pick a story idea and start working on. Depending on role, this pool will be filtered so that for example the sports writers don't see ideas for the cultural writers and so on.
  • Writing assignments - An editor can assign a story to a writers private sandbox.
  • File attachment - Be able to attach files to the story that then easily can be transferred to the media management (fields) for the selected content type and used for it.
  • Move between users - Roles with the right permission should be able to view all ideas and also move individual stories between writers.
  • Workflow Integration - Make sure it can easily be integrated with workflow modules such as Workbench Moderation and Maestro.
  • Commenting and Notes - Being able to have internal notes for the story, such as the editor can use to give instructions to the writer about how they want the story to be written. Notes can be used to store for example reference and source information that are relevant, but should not be published. Both should of course also follow the story when it is transformed to a real content type.

Some advantages I see with this functionality:

  • Kept completely separate from the normal content management system until it is needed to be there.
  • No more worries about what content type to select.
  • Could even be kept on a separate site and then pushed to the live site when its time to select content type. Great for staging.
  • Great for content workflows

I am no coder so I wouldn't be able to mentor on this, but I will of course be available to help with the feature specification and testing parts.

Comments

Workbench

stevepurkiss's picture

Hi - just saw webchick's tweet about this and saw your post - have you seen the new workbench suite of modules?

http://drupal.org/project/workbench

A lot of what you suggest is in these modules inc. drafts, workflow, etc., perhaps they can be a good starting point.

__

tsvenson's picture

Hi Steve,

Yep, seen Workbench and it is a great base for content moderation. Actually I have even got a nice feature request improvement, http://drupal.org/node/1091646, into Workbench Access already.

I was considering making this feature request to the Workbench Moderation module as it would fit it perfectly, but then I saw webchick's tweet about this and decided to post it here instead.

Lets see what comes out of it.

--
/thomas
T: @tsvenson | S: tsvenson.com

Remote storage

stevepurkiss's picture

Cool. How do you see the storage going? Some third party service, perhaps dropbox or similar?

Good point about storage

tsvenson's picture

Default I was more thinking of something simple as a separate tables handling it. But it could of course be made pluggable so that different storages can be used, maybe even several at the same time depending on need.

Another use of this can be for user submitted articles, guest posts and so on. Then it would be a snap to give any user the ability to submit content with absolutely no risk since it would be separated from the published content.

I know the Webform module could also be used for this, but with the other features this module would offer, user submitted content would then be very easy to integrate in an editorial workflow.

--
/thomas
T: @tsvenson | S: tsvenson.com

Interesting

stevepurkiss's picture

It's an interesting idea. Perhaps following along the lines of the new 'sandbox' module approach to module publishing on d.o. would be the quickest and easiest way of getting it off the ground, third party integration could follow.

Anyway, 3.30am here so gonna rest now, check out some of the other ideas here - all the best with the project!

Interesting ideas...some ideas

anshul.singhle's picture

This sounds interesting...I have some points to add :
1 . About storage, maybe the authors could store private story data (eg. private ideas, private story drafts etc.) on their local machine (of course it could be made pluggable so that they can choose the storage location). When they think their story is ready to be published, they can push the story to the main site.
2. About collaboration, it seems like a waste to store everything in one location, instead we could do it like git does. Many people have their own copy of changes and at any point they can choose to incorporate changes from other users or simply publish their work.

BTW : I'm a student and have used Drupal for a few projects in the past. I'm currently having a look at the Drupal codebase and the bug tracker to get started on development.
I would love to do this as a GSoC project. Still looking for a concrete plan for implementation. Suggestions would be appreciated.

Glad that your interested in this idea

tsvenson's picture

Hi Anshul,

Sorry for not being able to reply quicker to you, Been rather swamped lately.

I'm glad that you are interested in doing this as a GSoC project and work with you to create a implementation plan.

Now to your questions.

1 - Since the goal with the idea drafts is that they at some stage will be published on the site, or pushed to another site, I'm not sure there will be much need for storing the data on their local machine. An option to use the private file system in D7 would be good to have so that these draft files can be kept separate until its ready to be published. Not sure though if that still makes it possible to collaborate on content, but hopefully it is.

2 - Problem your going to face with that is how updates are managed if several people work on the same story individually. Most of these will have little knowledge about version management and how to merge changes. An alternative could be to integrate with for example Google Docs. then they will have live collaboration on the text while still be able to manage it via the workflow.

As I see it your two questions are related and if the storage is made pluggable, then it would be possible to add additional storage options. Default though should be using Drupals database and stream wrappers for files.

An issue as I see it is if it will be possible to for example embed images in the text area content and how that then is transferred to the destination content type properly. I know the Media module plugin for CKEditor makes it easy to embed images without having to attach them to the node itself. But maybe there is need for other options too, such as gallery and or attach PDF documents and other types of files that generally not is embedded in the text.

As I said in the OP, I am not a developer so being a mentor for this is not possible. I have someone in mind though, but I need to talk to them first. If that person is interested, I would of course still like to be involved somehow, especially with the feature spec and testing.

--
/thomas
T: @tsvenson | S: tsvenson.com

anshul.singhle's picture

Hi tsvenson,
Based on your feedback I took the liberty of drafting a preliminary requirements analysis . Please have a look and give feedback.

  1. Organization -
    The module will enable the creation of a new "project". For every project, the site administrator can create various user roles based on permissions. Also, for each project, an idea pool is created. The administrator also has the job of adding users and assigning roles to them.
    eg. By default, we can have two roles as Writer and Editor. However, we can also further classify roles based on taxonomy terms eg. cultural writer/editor , sports writer/editor etc. Also there could be projects without Editors, e.g a group of writers collaborating on a piece without any one of them providing overall moderation.
  2. Features -
    2.1 - Private Writer Content -
    2.1.1 - Story Drafts - The writer can create private drafts of content (without specifying content type). These drafts will be stored as files on the webserver. Using .htaccess the access to these files will be forbidden for site visitors. The writer can view his drafts, make revisions of drafts, and remove drafts through an interface (using stream wrappers). Access to these drafts will remain limited to the user.
    2.1.2 - Story ideas - The writer can also create private story ideas, which will be visible only to him/her . Ideas will consist of a piece of text with associated taxonomy terms(optional).
    2.2 - Sharing -
    2.2.1 - Sharing Drafts - Writer can share his story draft with either the administrator or other users. There will be a check box titled, ready for moderation, when the writer marks his draft as ready for moderation, the Editor can see his/her drafts. The Editor can then post his feedback, which will be visible to the original author.
    Writers can also share their draft with other writers. Suppose writer A shares his Draft with B , C and D. Then, a new workflow will be created, with four branches. Each user can view the work being done on every branch and can independently modify his branch. At any point of time any user can import the changes of any other user . Every user can also view a single document containing additions by all users, possibly using different colors to highlight contributions by different users. The final draft can be selected by either the editor (if there is one), or by consensus among the group(voting?). The person with the initial draft (A) will initially have control over who collaborates on the draft however A can allow B,C,D to add more users(with an option when he is sharing his draft with them). The person A can also add an editor for his Draft.
    A workflow can also be created by an editor, with everything else working pretty much the same way.
    ALTERNATIVE - Integration with Google docs will make the above task very easy. I had a look at http://drupal.org/project/google_docs
    and google docs integration could be added as a later feature.
    2.2.2 - Sharing Story Ideas - The private story ideas of users can be published to a public idea pool for the project. Everyone can view the ideas in the public pool. The ideas can be grouped on the basis of tags if they have been tagged with a taxonomy term.
    NOTE : This can be implemented by extending Workbench access and Workbench Moderation. I'm having a look at those projects and will post a more detailed implementation plan soon.
    2.3 - Assignments - The editor can assign Story Ideas to a particular writer or even assign a draft by a writer (say A) to another writer (B). The editor can monitor the progress of these assignments from his interface. The editor can also attach notes to each Draft from the interface itself
    NOTE : The Maestro module http://drupal.org/project/maestro can be used to add this functionality.

A NOTE ON STORAGE : I'm thinking of storing these drafts and ideas in separate tables . By a preliminary estimate, a large amount of metadata and related data is associated with each draft/idea and thus it would be advantageous to store the data in a database instead of as files.

P.S.- Please add any features you would like, also don't worry about the implementation, I have some ideas about implementation however making a concrete implementation plan would be feasible only after the feature list is frozen (sort of).
Also, please suggest potential mentors for this so that I can start working on a formal application.

Thanks and Regards,
Anshul Singhle
xashck@gmail.com
ana_s on IRC at #drupal

Mentor

agentrickard's picture

I'd be interested in mentoring this, since it was an original Workbench concept.

I would urge you to narrow the scope of the project to only handle stand-alone Drupal implementations, using database instead of file storage.

I'm also not sure you need to start revisioning these Ideas until they are turned into nodes. But they should definitely be entities so that we can go cool things like attach Comments and Tags to them.

I would also layer in the "project" concept later. First worry about designing a solid draft/ideation system, then worry about more complex implementations. And using entities may just solve that problem for you.

Feature list

tsvenson's picture

@agentrickard: Really happy that you have time to mentor this project idea, it will make sure it will integrate well with your Workbench suite. Big thanks for that.

Ken also mentioned you already had a long chat on IRC, so great you two are connected already.

From what I know, there is a deadline set to April 8th to submit GSoC projects and I really hope we are able to meat that date so we don't miss the opportunity.

I would like to follow up my OP with a more detailed list of features I would like to see in this module. My focus will be on how it will work for the users, not the implementation which I leave to you two to figure out.

Primary goal should be to make this module integrate well with the Workbench suite, but it would also be great if it where possible to use it with the Maestro workflow, and other similar modules, as well to avoid the need of duplicating its features in another module.

Suggested module name: Workbench Content Ideas

In line with the other Workbench modules, it would be great if this module both can function on its own as well as integrate with some of the other when they are enabled. I have divided my feature list to reflect that.

Stand Alone Features

The module will use its own storage (Drupals tables/file system as default, but hopefully pluggable at some stage) and not mixed in with the published content on a site.

Creating and assigning content ideas:

  • Create Private Content Idea - Allow roles with permission to create new content ideas.
  • Create Public Content Idea - Allow roles with permission to create new public content ideas. Then an editor can create a list that writers then can pick from. When they pick an idea, they automatically becomes the owner of it.
  • Reassign Own Content Idea - Allow users to reassign own content ideas to other users that has permission to do it. Also permission based.
  • Reassign Any Content idea. - Reassign any content idea to any user with permission to have them. Also permission based. Great for editors in a news organisation for example. It also means they will be able to browse all ideas.

It should also be possible for an editor to create a content assignment for a writer directly, but I believe the above permissions should be enough to permit that.

It should also be possible to reassign a content idea to public so anyone can pick it up.

Working with content ideas

  • Content Brief - A comments field used to describe the outcome of the content. Great for editors when creating public ideas. For internal use.
  • Resources - A field where resources can be listed, such as sources. For internal use.
  • Editing - Be able to work with the content as if it was already assigned to a real content type. Including adding media, both attached and embedded.

The content idea should also support version control, but since it is using its own tables, this will also be needed to handle separately. Hopefully Diff will still be possible to use without any modification.

When the content idea is pushed to a content type, then all old revisions as well as the temp table rows will be deleted and only the last version will be transferred. Might be useful with an option "Preserve revision history" if that is not to complicated to implement.

When adding new media files, it is wanted that those to are managed separately from the sites published media files. When the content idea is transferred to a content type, then these will also be transferred to the normal storage. This might be an area of problems if a media file of the same name already exists as well as handling additional fields and other things attached to media files...

Convert to real content type
Be able to convert the content idea to a real content type the user has permission to create. Preferable all fields, including comment/resources should be preserved.

A permission for "Convert to content" type is needed here.

Integrate with Workbench

Stand alone, the module should use the UI layout of the Workbench module.

If the Workbench module is enabled, then this module should integrate well with it so users can access everything from there. List pages should also be showing a trimmed version of the content brief field to give the user more info. If time allows, clicking on a content item will open a overlay with the full details.

Integrate with Workbench Access

When this module is enabled, then content ideas and permissions will fully use the structure the site has. When an editor creates a public content idea, then it will only be possible to list it in any of the sections that editor has access to, or another editor that in turn then can assign it to a section/writer he controls.

Writers will then also be able to list the public content ideas based on the same structure and pick the ones they want to work on.

Editor roles should be able to view any content idea in the sections they have access to.

Integrate with Workbench Moderation

When this module is enabled, it will be possible to configure how, and when, a content idea will, and can, be transferred to a content type.

Only users with permission to convert to content type will be able to do so. But they should still be able to put in in review stage and it will then be accessible for users that has the right to see it in that stage.

It should also not be possible to convert it to a content type and publish it at the same time, just to make sure nothing goes wrong.

Once it has been converted, then the temp files are deleted in the same manner as when it is used without this module.

This integration would also make it possible to allow any user to submit articles to a site. Only thing that will be needed is then a tailored workflow for it.

Integrate with Workbench File/Media

Temporary files/media objects should be possible to browse if the user has access to it. They should be clearly marked, including which content idea they belong to.

A switch between temporary/published file would also be good to have.

Oki, I think that pretty much covers all the features I would like to see being implemented in this module.

What's your thoughts about this?

--
/thomas
T: @tsvenson | S: tsvenson.com

Some Clarifications

anshul.singhle's picture
  1. Versioning and editing of ideas - Yesterday over irc me and agentrickard agreed that versioning of non-node entities is not a good idea. Versioning automatically takes place after the idea is converted to a node.AFAIK there are modules to change the type of a node.

  2. Regarding transferring of media files when a content idea is converted to node - I guess the user should be given the responsibility of selecting which media files are to be transferred to node as well as resolving any conflicts

Thanks,
Anshul

1 - That's fine. Its of

tsvenson's picture

1 - That's fine. Its of course always possible to convert it to a content type before its ready, but when your sure about where it will end up.

2 - Well, both that and automatic. For example images that are embedded in the content should automatically be transferred. Normal attachment could simply have a checkbox list, ticked by default, to mark which will be transferred.

Question then is what will happen with the files that is not transferred. Should they remain in the users private file archive or be deleted? Maybe a better option is to have a dropdown menu for each file with three options - Transfer, Keep and Delete?

Thing with file conflicts in Drupal, AFAIK, is that it is handled automatically by serialising the file name. So if image.jpg already exist, then the next one in that folder will get image_0.jpg. Personally I would prefer an option to be able to rename the file, but that is probably better left to a separate module that can let that be managed on a sitewide level.

--
/thomas
T: @tsvenson | S: tsvenson.com

Added a proposal

anshul.singhle's picture

Added a first draft of proposal at http://groups.drupal.org/node/138634 . Please have a look and do comment.
@agentrickard - I'm having a hard time thinking of what hooks might be needed with this since the basic stuff i.e. insert update create is already provided by Entity API. Some pointers would be appreciated

Thanks and Regards,
Anshul

Google Summer of Code 2011

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: