Several years ago, I wrote a custom CMS for a website. They now wish to switch to another CMS, and I have recommended Drupal, but I need to make sure that it will be possible to achieve the same functionality as that provided by the custom CMS. Although they plan to redo their site in the process of migrating to Drupal, you can see the existing site's public view at http://www.purplepjs.com/

In this overview, I will capitalize the first letter of words that represent an object that has some special or weird meaning in the current CMS.

The site is organized into a main index page with a menu of Pages on the left, some announcement blocks down the right, and some blurbs from Pages and other information in the center. Clicking on the link for a Page will take you to it. Each Page is listed with a colored star to represent how long ago it was last updated.

Each Page is defined in an administrative backend interface in terms of a Display Template, a Submission Template, several Fields of various types, a Header, and a Footer. Each Page has one or more assigned Page Editors, which are user accounts assigned to work with that Page. Users of the site (currently anonymously, but we will probably limit this to authenticated users in the Drupal version) can submit Entries to a Page through the Submission Template. Each submitted Entry is assigned a Status. The default Status is configurable per Page. The Status is any one of: submitted, approved, disapproved, posted, or archived. A typical Page has the default Status set to submitted.

Once Entries have been submitted, the Page Editor will go through them and approve or disapprove each one. Approved Entries can be edited by the Page Editor (who typically has a textarea Field available that was not presented in the Submission Template, where the Page Editor can add a response to the Entry; the format for many Pages is like Dear Abbey, with a submitted question and the Page Editor's response; but this is not the format for all Pages), moved up or down as far as the order that Entries will be displayed, and edit the Header and Footer fields of the Page (these are used for article summaries or requests for submissions, etc.)

On a daily basis, an Editor (another level of user who can also perform Page Editor functions over all Pages, without being assigned to them; this may change so that Editors are also assigned particular pages in the Drupal version) will go through the Pages that are scheduled for updates on that day (some Pages update Monday/Thursday, others every day, for instance) and "post" that Page. The Post process performs the following:
1. All archived Entries older than the Page's archive duration (measured in days and configured per Page) are deleted
2. All posted Entries change status to archived
3. All approved Entries change status to posted
4. All disapproved Entries are deleted
5. All submitted Entries and archived Entries that have not expired remain at their old status

That is the basic functionality that needs to exist in some form or another. The idea is to have each Page be a collection of ordered Entries that have been approved by a Page Editor and posted by an Editor, with an archive of a week back or so for each Page (this can no doubt easily be done for the whole site via the archive module of Drupal).

I am not at all opposed to creating a module of my own to do this, but I need to know how far Drupal is from having this functionality as it is and maybe some pointers as to how best to approach the module development (if we decide that Drupal is up to the task, I'll take the discussion to the module development forum so as to avoid a lengthy off-topic discussion here).

On a side note - some of the Pages are artwork submission pages. The current CMS stores the submitted image as a field in the Entry, using a MySQL "blob" field to hold that image data. Does Drupal's file uploading facility allow for files to be automatically tagged as part of a given node so that deleting that node will delete the file on disk?

Thanks to anyone who can provide some guidance on this. I look forward to getting to know Drupal better and hopefully to using it for this project.