@Robin Yes, all visitors including anonymous ones need to see & agree to the T&C. As Alex noted the acceptance would be stored in a cookie and checked on each page view.
@Alex Thanks! Of course the template operator is the way to go!
The template operator will need to go in all pagelayout.tpl and overrides and not be in a cache-block. It would be nice to be to able to extend the pre_check.php via an extension as something just doesn't feel right about doing redirects from template operators.
I thought about a pre-read workflow but I believe that this would only apply to the content view. It would certianly be an option if it was trigger before all page views. The requirement is that no pages can be viewed with out first agreeing to the T&C.
You're right, pre-read workflow are only triggered on content/view. I don't know how many views other than content/view can be used by users on your site, but if there are only a few, you can probably hack the PHP script of theses views to call the pre-read workflow. It's a bit hackish, but probably than modifying pre_check.php.
I suspect there may be a lot more hacking involved going down the pre-read trigger route as all the content views as well as the user module views would have to be covered and this would involve modifying a significant number of core distribution files (effecting upgrades etc...).
The reason I mentioned pre_check.php is because it's called before all accesses allowing a single entry point and limiting the core modifications to a single file.
A powerful addition to eZ publish would be to allow code to be run before (and after) all requested module/view. This would be like before and after filters in Rails. I guess this is expanding the current workflow system to allow for system wide entry points that don't rely on the triggers defined in each module.
At this stage I suspect that the functionality will be implemented with a custom template operator that will be added to pagelayout.tpl with the presentation of the T&C & acceptance handled by a custom module. This approach should be able to be contained in an extension and not involve any core file hacking.