from Globals import Persistent, InitializeClass
from Acquisition import Implicit
from OFS.SimpleItem import Item
from AccessControl import ClassSecurityInfo
from Products.PageTemplates.PageTemplateFile import PageTemplateFile

import os.path
fn = os.path.join(os.path.dirname(__file__), 'AccessEg.zpt')
#if not os.path.exists(fn):
if 1:
    print >> open(fn, 'w'), '''<html><body>
        <h1>Access Eg</h1>
        <div tal:content="context/protected_info" />
        <div tal:content="python:DateTime()" />
        <div tal:content="structure request" />
        </body></html>
        '''

class Resource(Implicit):
    meta_type = 'Blah'
    security = ClassSecurityInfo()
   
    security.declareProtected('View', 'resource_html')
    resource_html = PageTemplateFile(
            'AccessEg', globals(), __name__='resource_html'
            )

InitializeClass(Resource)


class AccessEg(Persistent, Implicit, Item):
    ''' A minimal example '''
    meta_type = 'AccessEg'
    security = ClassSecurityInfo()
    #security.setDefaultAccess('deny')
    security.setDefaultAccess({'': 1})

    resource = Resource()

    manage_options = Item.manage_options + (
            {'label': 'View', 'action': 'index_html'},
            )

    security.declareProtected('View', 'index_html')
    def index_html(self):
        ''' foo '''
        res = self.resource.__of__(self)
        return res.resource_html()

    security.declareProtected('View', 'protected_info')
    def protected_info(self):
        ''' Moo '''
        return 'Shh... protected info'

InitializeClass(AccessEg)


def addAccessEgForm(self, REQUEST=None):
    ''' Add form '''
    return '''
        <html><body><form action="addAccessEg">Id: <input name="id" />
        <input type="submit" /></form></body></html>
        '''

def addAccessEg(self, id, REQUEST=None):
    ''' Add method '''
    self._setObject(id, AccessEg(id))
    if REQUEST is not None:
        return self.manage_main(self, REQUEST, update_menu=0)

def initialize(context):
    context.registerClass(
            AccessEg,
            constructors = (addAccessEgForm, addAccessEg),
            )


