Commit e2c36131 authored by Amos Latteier's avatar Amos Latteier

Added support in the Product registration process for registering online help topics.

parent aa3ed4ff
...@@ -113,6 +113,8 @@ from string import rfind, atoi, find, strip, join ...@@ -113,6 +113,8 @@ from string import rfind, atoi, find, strip, join
from Factory import Factory from Factory import Factory
from Permission import PermissionManager from Permission import PermissionManager
import ZClasses, ZClasses.ZClass import ZClasses, ZClasses.ZClass
from HelpSys.HelpSystem import ProductHelp
class ProductFolder(Folder): class ProductFolder(Folder):
"Manage a collection of Products" "Manage a collection of Products"
...@@ -198,6 +200,8 @@ class Product(Folder, PermissionManager): ...@@ -198,6 +200,8 @@ class Product(Folder, PermissionManager):
{'id':'version', 'type': 'string'}, {'id':'version', 'type': 'string'},
) )
_reserved_names=('Help',)
manage_addPrincipiaFactoryForm=Globals.HTMLFile('addFactory',globals()) manage_addPrincipiaFactoryForm=Globals.HTMLFile('addFactory',globals())
def manage_addPrincipiaFactory( def manage_addPrincipiaFactory(
self, id, title, object_type, initial, permission=None, REQUEST=None): self, id, title, object_type, initial, permission=None, REQUEST=None):
...@@ -210,7 +214,8 @@ class Product(Folder, PermissionManager): ...@@ -210,7 +214,8 @@ class Product(Folder, PermissionManager):
def __init__(self, id, title): def __init__(self, id, title):
self.id=id self.id=id
self.title=title self.title=title
self._setObject('Help', ProductHelp('Help', '%s Help' % id))
def Destination(self): def Destination(self):
"Return the destination for factory output" "Return the destination for factory output"
return self return self
......
...@@ -86,6 +86,8 @@ ...@@ -86,6 +86,8 @@
""" """
from AccessControl.PermissionRole import PermissionRole from AccessControl.PermissionRole import PermissionRole
import Globals, os, OFS.ObjectManager, OFS.misc_, Products, OFS.PropertySheets import Globals, os, OFS.ObjectManager, OFS.misc_, Products, OFS.PropertySheets
from HelpSys import HelpTopic
import string, os.path
if not hasattr(Products, 'meta_types'): Products.meta_types=() if not hasattr(Products, 'meta_types'): Products.meta_types=()
if not hasattr(Products, 'meta_classes'): if not hasattr(Products, 'meta_classes'):
...@@ -102,6 +104,7 @@ class ProductContext: ...@@ -102,6 +104,7 @@ class ProductContext:
def registerClass(self, instance_class=None, meta_type='', def registerClass(self, instance_class=None, meta_type='',
permission=None, constructors=(), permission=None, constructors=(),
icon=None, permissions=None, legacy=(), icon=None, permissions=None, legacy=(),
constructor_help=None,
): ):
"""Register a constructor """Register a constructor
...@@ -201,7 +204,8 @@ class ProductContext: ...@@ -201,7 +204,8 @@ class ProductContext:
{ 'name': meta_type or instance_class.meta_type, { 'name': meta_type or instance_class.meta_type,
'action': ('manage_addProduct/%s/%s' % (pid, name)), 'action': ('manage_addProduct/%s/%s' % (pid, name)),
'product': pid, 'product': pid,
'permission': permission, 'permission': permission,
'help': constructor_help
},) },)
m[name]=initial m[name]=initial
...@@ -248,3 +252,65 @@ class ProductContext: ...@@ -248,3 +252,65 @@ class ProductContext:
Z.__module__=pack.__name__ Z.__module__=pack.__name__
setattr(pack, zname, Z) setattr(pack, zname, Z)
return self.registerZClass(Z, meta_type) return self.registerZClass(Z, meta_type)
def registerHelpTopic(self, id, topic):
"""
Register a Help Topic for a product.
"""
self.__prod.__of__(self.__app.Control_Panel.Products).Help._setObject(id, topic)
def registerHelpViews(self, klass):
"""
Associates a class's views with help topics.
This relies on the manage_options structure of
the class.
Note: right now this just sets the permissions on
the help topics.
"""
# this needs to be better thought out.
#
for option in klass.manage_options:
if option.has_key('help'):
prod_id, topic_id = option['help']
prod=getattr(self.__app.Control_Panel.Products, prod_id)
topic=getattr(pdoc.Help, topic_id)
perms=topic.permissions + [permission]
topic._setPropValue('permissions',perms)
def registerHelp(self, directory='help', clear=1):
"""
Registers Help Topics for all objects in a directory.
'clear' indicates whether or not to delete all existing
Topics from the Product.
HelpTopics are created for these kind of files
.dtml -- DTMLHelpTopic
.html .htm .txt -- TextHelpTopic
.stx .txt -- STXHelpTopic
.jpg .png .gif -- ImageHelpTopic
"""
if clear:
help=self.__prod.__of__(self.__app.Control_Panel.Products).Help
for id in help.objectIds('Help Topic'):
help._delObject(id)
path=os.path.join(Globals.package_home(self.__pack.__dict__), directory)
for file in os.listdir(path):
ext=os.path.splitext(file)[1]
ext=string.lower(ext)
if ext in ('.dtml',):
ht=HelpTopic.DTMLTopic(file, '', os.path.join(path,file))
self.registerHelpTopic(file, ht)
elif ext in ('.html', '.htm'):
ht=HelpTopic.TextTopic(file, '', os.path.join(path,file))
self.registerHelpTopic(file, ht)
elif ext in ('.stx', '.txt'):
ht=HelpTopic.STXTopic(file, '', os.path.join(path, file))
self.registerHelpTopic(file,ht)
elif ext in ('.jpg', '.gif', '.png'):
ht=HelpTopic.ImageTopic(file, '', os.path.join(path, file))
self.registerHelpTopic(file,ht)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment