Maybe I’m missing something here, but this doesn’t seem so complicated as to require a lot of custom coding.
Here are three of my ideas, for what they’re worth.
1. Set up member groups for the different member types. Example: “Members” for regular paid members who get access to current and future content. “Premium Members” for folks who paid extra to also have access to the archives.
2. Create a weblog to hold all the downloadable files. One downloadable per entry.
3. Each entry has an entry date that should correspond to the date that downloadable was added to the library.
4. Each member has a join date. While I don’t think there’s a variable to access this, it could easily be retrieved using a simple query from the Query Module.
5. Set up your template(s) to display the files available for download.
6. Using the {if member_group} conditional, display one “version” of the template for Members and a different version for “Premium Members”.
7. By comparing the member’s join date and the entry date, the Members version of the template would display only downloads that were available on or after their join date.
8. The Premium Members version would be essentially the same, but would skip the date comparison and show them everything.
The only special plug-in I could imagine you might need would be to push the download using a script instead of just giving them a link to a directory. This would ensure that no one else could use the same link to download files without proper authorization.
An alternative method would be to use custom entry statuses.
1. Same as above.
2. Same as above.
3. and 4. Instead of doing the fancy-schmancy date comparison mentioned above, set up custom entry statuses. “Open” for this month’s current downloads. “Archive” for anything that’s not current.
5. Same as above.
6. Same as above.
7. The Members version of the template would display only downloads with a status of Open.
8. The Premium Members version would display downloads with Open status as well as those with Archive status.
9. Each month, set the status of all older downloads to “Archive”. Then any new content gets the “Open” status and you start all over.
If you didn’t want content to be archived on the calendar month, but instead be archived 30 days after it was posted, then you could write a plug-in that would work with the Cron plug-in to automatically set the status of any 30-day old downloads to “Archived”.
One big difference with this method is that regular Members would have access only to this month’s content, not all the content added since they joined. Frankly, I have content memberships that work this way and I’ve never considered it a problem. If I don’t download September’s content in September, it’s gone. You snooze, you lose. Of course, I can always get archived content for an additional fee. If you keep your members up to date with an RSS feed or something, they shouldn’t really miss anything.
And one last alternative method, without re-iterating all the steps.
Use the Entry Date and Expiration Date fields. When a download is made available, set it’s expiration date for a month later. The template could display only unexpired entries to Members while displaying all entries to Premium Members.
In any of these cases, I would highly recommend writing an extension or plug-in that pushes downloads to the browser. This would keep your download directory secure from unauthorized downloading.
PJ
P.S. - Hey, people at EllisLab, why isn’t there a {join_date} variable?