A good deal of my job is dealing with multi screen CGI/mod_perl applications. I know there are many others here that deal with CGI as well.

I find myself solving the same problems over and over and I am working on an OO oriented solution.

I've looked at the various modules like CGI::MxScreen and CGI::Screen and they don't really solve my problem. I've also looked at CGI::Persistant and it doesn't really fit my bill either because I'm lazy. I have my approaches to CGI and I don't want to have to write things in a new paradigm. On that note, I think a solution should also satisfy the following requirements.
  1. Transparent Parameter persistance.
  2. Form Parameter Validation (The ability to know what you should be receiving and ignore anything extra automatically.)
  3. Preventing users from passing anything extra in query strings.
  4. Preventing people from hijacking the session.
  5. Preventing users from repeating certain actions if they hit Refresh.
  6. Only allowing certain actions from certain states.
    The session "knows" the user can only make one of the following choices and won't let them go to any other state. (If they use back to go to a previous form and resubmit for instance.)
  7. The ability to save a state and return to it in the future if needed. (Including uploaded files.)
  8. Has to work with mod_perl
  9. Totally transparent to programmer. You should be able to simply change use CGI; to use CGI::ScreenState or whatever it's called in existing scripts (Providing you are using CGI.pm to generate the forms and urls).
I'm working on a solution for just that. It's a ways off from showing anyone but I do have a working version that satisfies 90% of the criteria. For me this solves most of my problems.

What I'm wondering is there anything big I'm missing and what the interest level is for something like this?

I plan on eventually releasing it on CPAN but to get it to that point will take awhile with my current work schedule.

Any feedback would be welcome.

-Lee

"To be civilized is to deny one's nature."